Skip to navigation


Keyboard: DK4

[Apple II version]

Name: DK4 [Show more] Type: Subroutine Category: Keyboard Summary: Scan for pause, configuration and secondary flight keys Deep dive: The key logger
Context: 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
.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 subroutine