Prev: 37051 Up: Map Next: 37182
37080: Controls: Get Input
Used by the routines at Messaging_Girl, MarkCards, InGameControls and HandlerRaising.
Controls 37080 XOR A Write 0 to *LAST-K (last key pressed).
37081 LD (23560),A
37084 LD A,(37182) Jump to Controls_ReadKeyboard if *UserDefinedKeys is not equal to 6.
37087 CP 6
37089 JR NZ,Controls_ReadKeyboard
37091 CALL Controls_ReadKempston Call Controls_ReadKempston.
37094 LD A,C A=Player input.
37095 INC C Jump to Controls_NoInput if no input was detected (255 for "no input was made").
37096 JR Z,Controls_NoInput
37098 JR Controls_0 Jump to Controls_0.
Controls_ReadKeyboard 37100 CALL 703 Call KEYBOARD.
37103 LD HL,37182 HL=UserDefinedKeys.
37106 LD A,(23560) A=*LAST-K (last key pressed).
37109 CP 14 Jump to QuitGame if A is equal to 14.
37111 JP Z,QuitGame
Detect the keyboard input.
37114 LD B,5 Set a counter of 5 for the number of controls to be read.
Controls_ReadKeyboard_Loop 37116 CP (HL) Jump to Controls_HandleKeyPress if the currently pressed key is equal to *HL.
37117 JR Z,Controls_HandleKeyPress
37119 INC HL Increment HL by two.
37120 INC HL
37121 DJNZ Controls_ReadKeyboard_Loop Decrease counter by one and loop back to Controls_ReadKeyboard_Loop until counter is zero.
No input was detected so return with 255.
Controls_NoInput 37123 LD A,255 A=255.
37125 RET Return.
A valid key press was detected, handle it.
Controls_HandleKeyPress 37126 INC HL Increment HL by one.
37127 LD A,(HL) A=*HL.
Controls_0 37128 PUSH AF Stash AF on the stack.
37129 LD A,(37573) Jump to PlaySelectWaveSound if *37573 is not zero.
37132 OR A
37133 JR NZ,PlaySelectWaveSound
37135 LD A,(37182) Jump to DebounceLoop if *UserDefinedKeys is not equal to 6.
37138 CP 6
37140 JR NZ,DebounceLoop
Controls_1 37142 CALL Controls_ReadKempston Call Controls_ReadKempston.
37145 INC C Increment C by one.
37146 JR NZ,Controls_1 Jump to Controls_1 if C is not zero.
37148 JR PlaySelectWaveSound Jump to PlaySelectWaveSound.
Debounce the key press.
DebounceLoop 37150 CALL 654 Call KEY_SCAN.
Handle if no keys are being pressed, for reference:
In all instances the E register is returned with a value in the range of +0 to +39 the value being different for each of the forty keys of the keyboard, or the value +255 for no-key.
37153 INC E Set the zero flag if no keys have been pressed.
37154 JR NZ,DebounceLoop Jump to DebounceLoop unless no keys are being pressed.
Play the "select" key wave sound.
PlaySelectWaveSound 37156 XOR A Write 0 to *37573.
37157 LD (37573),A
37160 POP AF Restore AF from the stack.
37161 OR A Return if A is not zero.
37162 RET NZ
37163 DI Disable interrupts.
37164 LD B,201 B=201.
37166 LD A,252 A=252.
SelectSoundLoop 37168 LD C,50 C=50.
SelectSoundDurationLoop 37170 DEC C Decrease C by one.
37171 JR NZ,SelectSoundDurationLoop Jump to SelectSoundDurationLoop until C is zero.
37173 OUT (254),A Flip the speaker bit (bit 4), and send the result to the speaker.
37175 XOR %00010000
37177 DJNZ SelectSoundLoop Decrease counter by one and loop back to SelectSoundLoop until counter is zero.
37179 XOR A A=0.
37180 EI Enable interrupts.
37181 RET Return.
Prev: 37051 Up: Map Next: 37182