This code appears in the following versions (click to see it in the source code):
Code variations between these versions are shown below.
Name: DK4 Type: Subroutine Category: Keyboard Summary: Scan for pause, configuration and secondary flight keys Deep dive: The key logger
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 (COPY) and if it's pressed, pause the game and process any configuration key presses until the game is unpaused (DELETE) * If this is a space view, scan for secondary flight keys and update the relevant bytes in the key logger
This variation is blank in the Cassette, Master and Electron versions.
Tap on a block to expand it, and tap it again to revert.
.DK4
This variation is blank in the Master version.
Tap on a block to expand it, and tap it again to revert.
.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
.DK6
.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
The Executive version supports two new configuration keys when paused: "@" toggles infinite jump range, while ":" toggles speech.
Tap on a block to expand it, and tap it again to revert.
BNE DKL4 \ If not, loop back to check for the next toggle key
The Master version allows you to change the volume of the sound effects using the "<" and ">" keys when the game is paused.
This variation is blank in the Cassette, Disc (flight), Disc (docked), 6502 Second Processor and Electron versions.
LDA VOL \ Fetch the current volume setting into A CPX #'.' \ If "." is being pressed (i.e. the ">" key) then jump BEQ DOVOL1 \ to DOVOL1 to increase the volume CPX #',' \ If "," is not being pressed (i.e. the "<" key) then BNE DOVOL4 \ jump to DOVOL4 to skip the following DEC A \ The volume down key is being pressed, so decrement the \ volume level in A EQUB &24 \ Skip the next instruction by turning it into &24 &1A, \ or BIT &001A, which does nothing apart from affect the \ flags .DOVOL1 INC A \ The volume up key is being pressed, so increment the \ volume level in A TAY \ Copy the new volume level to Y AND #%11111000 \ If any of bits 3-7 are set, skip to DOVOL3 as we have BNE DOVOL3 \ either increased the volume past the maximum volume of \ 7, or we have decreased it below 0 to -1, and in \ neither case do we want to change the volume as we are \ already at the maximum or minimum level STY VOL \ Store the new volume level in VOL .DOVOL3 PHX \ Store X on the stack so we can retrieve it below after \ making a beep JSR BEEP \ Call the BEEP subroutine to make a short, high beep at \ the new volume level LDY #10 \ Wait for 10/50 of a second (0.2 seconds) JSR DELAY PLX \ Restore the value of X we stored above .DOVOL4
This variation is blank in the Master version.
Tap on a block to expand it, and tap it again to revert.
This variation is blank in the Cassette and Electron versions.
Tap on a block to expand it, and tap it again to revert.
The enhanced versions support a new Bitstik configuration option, "B", which toggles the Bitstik when the game is paused.
This variation is blank in the Cassette and Electron versions.
LDA BSTK \ Toggle the value of BSTK between 0 and &FF EOR #&FF STA BSTK STA JSTK \ Configure JSTK to the same value, so when the Bitstik \ is enabled, so is the joystick STA JSTE \ Configure JSTE to the same value, so when the Bitstik \ is enabled, the joystick is configured with reversed \ channels
The Master version makes two beeps when the Bitstik is configured and one when it is disabled, while the disc and 6502SP versions remain totally silent and give no clue as to whether you just turned the Bitstik on or off.
This variation is blank in the Cassette, Disc (flight), Disc (docked), 6502 Second Processor and Electron versions.
BPL P%+5 \ If we just toggled the Bitstik off (i.e. to 0, which \ is positive), then skip the first of these two \ instructions, so we get two beeps for on and one beep \ for off JSR BELL \ We just enabled the Bitstik, so give two standard \ system beeps (this being the first) JSR BELL \ Make another system beep
This variation is blank in the Cassette and Electron versions.
Tap on a block to expand it, and tap it again to revert.
The 6502SP version lets you take screenshots, by pressing "D" when the game is paused.
This variation is blank in the Cassette, Disc (flight), Disc (docked), Master and Electron versions.
CPX #&32 \ If "D" is being pressed, jump to savscr to save a BEQ savscr \ screenshot
This variation is blank in the Cassette, Disc (flight), Disc (docked), 6502 Second Processor and Electron versions.
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
.DK2
This variation is blank in the Master version.
Tap on a block to expand it, and tap it again to revert.
The key logger scans for an additional secondary flight key, "P", which disables the docking computer.
This variation is blank in the Master version.
Tap on a block to expand it, and tap it again to revert.
LDA #&FF \ Set A to &FF so we can store this in the keyboard \ logger for keys that are being pressed
.DKL1 LDX KYTB,Y \ Get the internal key number of the Y-th flight key \ the KYTB keyboard table CPX KL \ We stored the key that's being pressed in KL above, \ so check to see if the Y-th flight key is being \ pressed BNE DK1 \ If it is not being pressed, skip to DK1 below STA KL,Y \ The Y-th flight key is being pressed, so set that \ key's location in the key logger to &FF .DK1 DEY \ Decrement the loop counter CPY #7 \ Have we just done the last key? BNE DKL1 \ If not, loop back to process the next key
RTS \ Return from the subroutine
This variation is blank in the Cassette, Disc (flight), 6502 Second Processor, Master and Electron versions.