.DK4 LDX thiskey ; Fetch the key pressed from thiskey in the key logger STX KL ; Store X in KL, byte #0 of the key logger CPX #'=' ; If "=" is not being pressed, jump to DK2 below, BNE DK2 ; otherwise let's process the configuration keys .FREEZE ; COPY is being pressed, so we enter a loop that ; listens for configuration keys, and we keep looping ; until we detect a DELETE key press. This effectively ; pauses the game when COPY is pressed, and unpauses ; it when DELETE is pressed JSR WSCAN ; Call WSCAN to wait for 15 * 256 loop iterations JSR RDKEY ; Scan the keyboard for a key press and return the ASCII ; code of the key pressed in A and X (or 0 for no key ; press) CPX #'Q' ; If "Q" is not being pressed, skip to DK6 BNE DK6 LDX #$FF ; "Q" is being pressed, so set DNOIZ to $FF to turn the STX DNOIZ ; sound off LDX #'Q' ; Set X to the ASCII for "Q" once again, so it doesn't ; get changed by the above .DK6 LDY #0 ; We now want to loop through the keys that toggle ; various settings, so set a counter in Y to work our ; way through them .DKL4 JSR DKS3 ; Call DKS3 to scan for the key given in Y, and toggle ; the relevant setting if it is pressed INY ; Increment Y to point to the next toggle key CPY #(DISK+1-DAMP) ; Check to see whether we have reached the last toggle ; key (i.e. DISK+1, as the options run from DAMP to ; DISK) BNE DKL4 ; If not, loop back to check for the next toggle key CPX #'S' ; If "S" is not being pressed, jump to DK7 BNE DK7 LDA #0 ; "S" is being pressed, so set DNOIZ to 0 to turn the STA DNOIZ ; sound on .DK7 CPX #$1B ; If ESCAPE is not being pressed, skip over the next BNE P%+5 ; instruction JMP DEATH2 ; ESCAPE is being pressed, so jump to DEATH2 to end ; the game CPX #'-' ; If "-" is not being pressed, we are still paused, BNE FREEZE ; so loop back up to keep listening for configuration ; keys, otherwise fall through into the rest of the ; key detection code, which unpauses the game .DK2 RTS ; Return from the subroutineName: DK4 [Show more] Type: Subroutine Category: Keyboard Summary: Scan for pause, configuration and secondary flight keys Deep dive: The key loggerContext: See this subroutine in context in the source code References: No direct references to this subroutine in this source file
Scan for pause and configuration keys, and if this is a space view, also scan for secondary flight controls. Specifically: * Scan for the pause button ("=") and if it's pressed, pause the game and process any configuration key presses until the game is unpaused ("-") * If this is a space view, scan for secondary flight keys and update the relevant bytes in the key logger
Other entry points: FREEZE Rejoin the pause routine after processing a screen save
[X]
Variable DAMP in workspace Option variables
Keyboard damping configuration setting
[X]
Subroutine DEATH2 (category: Start and end)
Reset most of the game and restart from the title screen
[X]
Variable DISK in workspace Option variables
The configuration setting for toggle key "T", which isn't actually used but is still updated by pressing "T" while the game is paused. This is a configuration option from the Commodore 64 version of Elite that lets you switch between tape and disk
[X]
Label DK2 is local to this routine
[X]
Label DK6 is local to this routine
[X]
Label DK7 is local to this routine
[X]
Label DKL4 is local to this routine
[X]
Subroutine DKS3 (category: Keyboard)
Toggle a configuration setting and emit a beep
[X]
Variable DNOIZ in workspace Option variables
Sound on/off configuration setting
[X]
Subroutine RDKEY (category: Keyboard)
Scan the keyboard for key presses and the joystick, and update the key logger
[X]
Subroutine WSCAN (category: Drawing the screen)
Wait for 15 * 256 loop iterations