.TT102 CMP #f8 ; If key "8" was pressed, jump to STATUS to show the BNE P%+5 ; Status Mode screen, returning from the subroutine JMP STATUS ; using a tail call CMP #f4 ; If key "4" was pressed, jump to TT22 to show the BNE P%+5 ; Long-range Chart, returning from the subroutine using JMP TT22 ; a tail call CMP #f5 ; If key "5" was pressed, jump to TT23 to show the BNE P%+5 ; Short-range Chart, returning from the subroutine using JMP TT23 ; a tail call CMP #f6 ; If key "6" was pressed, call TT111 to select the BNE TT92 ; system nearest to galactic coordinates (QQ9, QQ10) JSR TT111 ; (the location of the chart crosshairs) and set ZZ to JMP TT25 ; the system number, and then jump to TT25 to show the ; Data on System screen (along with an extended system ; description for the system in ZZ if we're docked), ; returning from the subroutine using a tail call .TT92 CMP #f9 ; If key "9" was pressed, jump to TT213 to show the BNE P%+5 ; Inventory screen, returning from the subroutine JMP TT213 ; using a tail call CMP #f7 ; If key "7" was pressed, jump to TT167 to show the BNE P%+5 ; Market Price screen, returning from the subroutine JMP TT167 ; using a tail call CMP #f0 ; If key "1" was pressed, jump to TT110 to launch our BNE fvw ; ship (if docked), returning from the subroutine using JMP TT110 ; a tail call .fvw BIT QQ12 ; If bit 7 of QQ12 is clear (i.e. we are not docked, but BPL INSP ; in space), jump to INSP to skip the following checks ; for f1-f3 and "@" (save commander file) key presses CMP #f3 ; If key "3" was pressed, jump to EQSHP to show the BNE P%+5 ; Equip Ship screen, returning from the subroutine using JMP EQSHP ; a tail call CMP #f1 ; If key "1" was pressed, jump to TT219 to show the BNE P%+5 ; Buy Cargo screen, returning from the subroutine using JMP TT219 ; a tail call CMP #'I' ; If "I" was not pressed, skip to nosave BNE nosave JSR SVE ; "@" was pressed, so call SVE to show the disk access ; menu BCC P%+5 ; If the C flag was set by SVE, then we loaded a new JMP QU5 ; commander file, so jump to QU5 to restart the game ; with the newly loaded commander JMP BAY ; Otherwise the C flag was clear, so jump to BAY to go ; to the docking bay (i.e. show the Status Mode screen) .nosave CMP #f2 ; If key "2" was pressed, jump to TT208 to show the BNE LABEL_3 ; Sell Cargo screen, returning from the subroutine using JMP TT208 ; a tail call .INSP CMP #f12 ; If key "2" was pressed, jump to chview1 BEQ chview1 CMP #f22 ; If key "3" was pressed, jump to chview2 BEQ chview2 CMP #f32 ; If key "4" was not pressed, jump to LABEL_3 to keep BNE LABEL_3 ; checking for which key was pressed LDX #3 ; Key "4" was pressed, so set the view number in X to ; 3 for the right view EQUB $2C ; Skip the next instruction by turning it into ; $2C $A2 $02, or BIT $02A2, which does nothing apart ; from affect the flags .chview2 LDX #2 ; If we jump to here, key "3" was pressed, so set the ; view number in X to 2 for the left view EQUB $2C ; Skip the next instruction by turning it into ; $2C $A2 $01, or BIT $02A2, which does nothing apart ; from affect the flags .chview1 LDX #1 ; If we jump to here, key "2" was pressed, so set the ; view number in X to 1 for the rear view JMP LOOK1 ; Jump to LOOK1 to switch to view X (rear, left or ; right), returning from the subroutine using a tail ; call .LABEL_3 LDA KL ; If "H" was not pressed, skip the following instruction CMP #'H' BNE P%+5 JMP hyp ; Jump to hyp to do a hyperspace jump (if we are in ; space), returning from the subroutine using a tail ; call CMP #'G' ; If "G" was not pressed, skip the following instruction BNE P%+5 JMP hyp ; Jump to hyp to do a galactic hyperspace jump (if we ; are in space), returning from the subroutine using a ; tail call .NWDAV5 CMP #'D' ; If "D" was pressed, jump to T95 to print the distance BEQ T95 ; to a system (if we are in one of the chart screens) CMP #'F' ; If "F" was not pressed, jump down to HME1, otherwise BNE HME1 ; keep going to process searching for systems LDA QQ12 ; If QQ12 = 0 (we are not docked), we can't search for BEQ t95 ; systems, so return from the subroutine (as t95 ; contains an RTS) LDA QQ11 ; If the current view is a chart (QQ11 = 64 or 128), AND #%11000000 ; keep going, otherwise return from the subroutine (as BEQ t95 ; t95 contains an RTS) JMP HME2 ; Jump to HME2 to let us search for a system, returning ; from the subroutine using a tail call .HME1 STA T1 ; Store A (the key that's been pressed) in T1 LDA QQ11 ; If the current view is a chart (QQ11 = 64 or 128), AND #%11000000 ; keep going, otherwise jump down to TT107 to skip the BEQ TT107 ; following LDA QQ22+1 ; If the on-screen hyperspace counter is non-zero, BNE TT107 ; then we are already counting down, so jump to TT107 ; to skip the following LDA T1 ; Restore the original value of A (the key that's been ; pressed) from T1 CMP #'O' ; If "O" was pressed, do the following three jumps, BNE ee2 ; otherwise skip to ee2 to continue JSR TT103 ; Draw small crosshairs at coordinates (QQ9, QQ10), ; which will erase the crosshairs currently there JSR ping ; Set the target system to the current system (which ; will move the location in (QQ9, QQ10) to the current ; home system JMP TT103 ; Draw small crosshairs at coordinates (QQ9, QQ10), ; which will draw the crosshairs at our current home ; system, and return from the subroutine using a tail ; call .ee2 JSR TT16 ; Call TT16 to move the crosshairs by the amount in X ; and Y, which were passed to this subroutine as ; arguments .TT107 LDA QQ22+1 ; If the on-screen hyperspace counter is zero, return BEQ t95 ; from the subroutine (as t95 contains an RTS), as we ; are not currently counting down to a hyperspace jump DEC QQ22 ; Decrement the internal hyperspace counter BNE t95 ; If the internal hyperspace counter is still non-zero, ; then we are still counting down, so return from the ; subroutine (as t95 contains an RTS) ; If we get here then the internal hyperspace counter ; has just reached zero and it wasn't zero before, so ; we need to reduce the on-screen counter and update ; the screen. We do this by first printing the next ; number in the countdown sequence, and then printing ; the old number, which will erase the old number ; and display the new one because printing uses EOR ; logic LDX QQ22+1 ; Set X = the on-screen hyperspace counter - 1 DEX ; (i.e. the next number in the sequence) JSR ee3 ; Print the 8-bit number in X at text location (0, 1) LDA #5 ; Reset the internal hyperspace counter to 5 STA QQ22 LDX QQ22+1 ; Set X = the on-screen hyperspace counter (i.e. the ; current number in the sequence, which is already ; shown on-screen) JSR ee3 ; Print the 8-bit number in X at text location (0, 1), ; i.e. print the hyperspace countdown in the top-left ; corner DEC QQ22+1 ; Decrement the on-screen hyperspace countdown BNE t95 ; If the countdown is not yet at zero, return from the ; subroutine (as t95 contains an RTS) JMP TT18 ; Otherwise the countdown has finished, so jump to TT18 ; to do a hyperspace jump, returning from the subroutine ; using a tail call .t95 RTS ; Return from the subroutine .T95 ; If we get here, "D" was pressed, so we need to show ; the distance to the selected system (if we are in a ; chart view) LDA QQ11 ; If the current view is a chart (QQ11 = 64 or 128), AND #%11000000 ; keep going, otherwise return from the subroutine (as BEQ t95 ; t95 contains an RTS) JSR hm ; Call hm to move the crosshairs to the target system ; in (QQ9, QQ10), returning with A = 0 ;STA QQ17 ; This instruction is commented out in the original ; source JSR cpl ; Print control code 3 (the selected system name) LDA #%10000000 ; Set bit 7 of QQ17 to switch to Sentence Case, with the STA QQ17 ; next letter in capitals LDA #12 ; Print a line feed to move the text cursor down a line JSR TT26 JMP TT146 ; Print the distance to the selected system and return ; from the subroutine using a tail callName: TT102 [Show more] Type: Subroutine Category: Keyboard Summary: Process number key, save key, hyperspace and chart key presses and update the hyperspace counterContext: See this subroutine in context in the source code References: This subroutine is called as follows: * Main game loop (Part 6 of 6) calls TT102 * HME2 calls via T95
Process number key presses, plus "I" (save commander), "H" (hyperspace), "G" (galactic hyperspace), "D" (show distance to system) and "O" (move chart cursor back to current system). We can also pass cursor position deltas in X and Y to indicate that the cursor keys or joystick have been used (i.e. the values that are returned by routine TT17). This routine also checks for the "F" key press (search for a system), which applies to enhanced versions only.
Arguments: A The key number of the key pressed X The amount to move the crosshairs in the x-axis Y The amount to move the crosshairs in the y-axis
Other entry points: T95 Print the distance to the selected system
[X]
Subroutine BAY (category: Status)
Go to the docking bay (i.e. show the Status Mode screen)
[X]
Subroutine EQSHP (category: Equipment)
Show the Equip Ship screen
[X]
Label HME1 is local to this routine
[X]
Subroutine HME2 (category: Charts)
Search the galaxy for a system
[X]
Label INSP is local to this routine
[X]
Label LABEL_3 is local to this routine
[X]
Subroutine LOOK1 (category: Flight)
Initialise the space view
[X]
Entry point QU5 in subroutine BR1 (Part 1 of 2) (category: Start and end)
Restart the game using the last saved commander without asking whether to load a new commander file
[X]
Subroutine STATUS (category: Status)
Show the Status Mode screen
[X]
Subroutine SVE (category: Save and load)
Display the disk access menu and process saving of commander files
[X]
Subroutine TT103 (category: Charts)
Draw a small set of crosshairs on a chart
[X]
Label TT107 is local to this routine
[X]
Subroutine TT110 (category: Flight)
Launch from a station or show the front space view
[X]
Subroutine TT111 (category: Universe)
Set the current system to the nearest system to a point
[X]
Subroutine TT146 (category: Universe)
Print the distance to the selected system in light years
[X]
Subroutine TT16 (category: Charts)
Move the crosshairs on a chart
[X]
Subroutine TT167 (category: Market)
Show the Market Price screen
[X]
Subroutine TT18 (category: Flight)
Try to initiate a jump into hyperspace
[X]
Subroutine TT208 (category: Market)
Show the Sell Cargo screen
[X]
Subroutine TT213 (category: Market)
Show the Inventory screen
[X]
Subroutine TT219 (category: Market)
Show the Buy Cargo screen
[X]
Subroutine TT22 (category: Charts)
Show the Long-range Chart
[X]
Subroutine TT23 (category: Charts)
Show the Short-range Chart
[X]
Subroutine TT25 (category: Universe)
Show the Data on System screen
[X]
Subroutine TT26 (category: Text)
Print a character at the text cursor, with support for verified text in extended tokens
[X]
Label TT92 is local to this routine
[X]
Label chview1 is local to this routine
[X]
Label chview2 is local to this routine
[X]
Subroutine cpl (category: Universe)
Print the selected system name
[X]
Label ee2 is local to this routine
[X]
Subroutine ee3 (category: Flight)
Print the hyperspace countdown in the top-left of the screen
[X]
Configuration variable f0 = $31
ASCII number for key "1" (Launch, Front)
[X]
Configuration variable f1 = $32
ASCII number for key "1" (Buy Cargo)
[X]
Configuration variable f12 = $32
ASCII number for key "2" (Rear)
[X]
Configuration variable f2 = $33
ASCII number for key "2" (Sell Cargo)
[X]
Configuration variable f22 = $33
ASCII number for key "3" (Left)
[X]
Configuration variable f3 = $34
ASCII number for key "3" (Equip Ship)
[X]
Configuration variable f32 = $34
ASCII number for key "4" (Right)
[X]
Configuration variable f4 = $35
ASCII number for key "4" (Long-range Chart)
[X]
Configuration variable f5 = $36
ASCII number for key "5" (Short-range Chart)
[X]
Configuration variable f6 = $37
ASCII number for key "6" (Data on System)
[X]
Configuration variable f7 = $38
ASCII number for key "7" (Market Price)
[X]
Configuration variable f8 = $39
ASCII number for key "8" (Status Mode)
[X]
Configuration variable f9 = $30
ASCII number for key "9" (Inventory)
[X]
Label fvw is local to this routine
[X]
Subroutine hm (category: Charts)
Select the closest system and redraw the chart crosshairs
[X]
Subroutine hyp (category: Flight)
Start the hyperspace process
[X]
Label nosave is local to this routine
[X]
Subroutine ping (category: Universe)
Set the selected system to the current system
[X]
Label t95 is local to this routine