Routines |
Prev: 90BB | Up: Map | Next: 913E |
|
||||
Controls | 90D8 | XOR A | Write 00 to *LAST-K (last key pressed). | |
90D9 | LD ($5C08),A | |||
90DC | LD A,($913E) | Jump to Controls_ReadKeyboard if *UserDefinedKeys is not equal to 06. | ||
90DF | CP $06 | |||
90E1 | JR NZ,Controls_ReadKeyboard | |||
90E3 | CALL Controls_ReadKempston | Call Controls_ReadKempston. | ||
90E6 | LD A,C | A=Player input. | ||
90E7 | INC C | Jump to Controls_NoInput if no input was detected (FF for "no input was made"). | ||
90E8 | JR Z,Controls_NoInput | |||
90EA | JR Controls_0 | Jump to Controls_0. | ||
Controls_ReadKeyboard | 90EC | CALL $02BF | Call KEYBOARD. | |
90EF | LD HL,$913E | HL=UserDefinedKeys. | ||
90F2 | LD A,($5C08) | A=*LAST-K (last key pressed). | ||
90F5 | CP $0E | Jump to QuitGame if A is equal to 0E. | ||
90F7 | JP Z,QuitGame | |||
Detect the keyboard input.
|
||||
90FA | LD B,$05 | Set a counter of 05 for the number of controls to be read. | ||
Controls_ReadKeyboard_Loop | 90FC | CP (HL) | Jump to Controls_HandleKeyPress if the currently pressed key is equal to *HL. | |
90FD | JR Z,Controls_HandleKeyPress | |||
90FF | INC HL | Increment HL by two. | ||
9100 | INC HL | |||
9101 | 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 FF.
|
||||
Controls_NoInput | 9103 | LD A,$FF | A=FF. | |
9105 | RET | Return. | ||
A valid key press was detected, handle it.
|
||||
Controls_HandleKeyPress | 9106 | INC HL | Increment HL by one. | |
9107 | LD A,(HL) | A=*HL. | ||
Controls_0 | 9108 | PUSH AF | Stash AF on the stack. | |
9109 | LD A,($92C5) | Jump to PlaySelectWaveSound if *92C5 is not zero. | ||
910C | OR A | |||
910D | JR NZ,PlaySelectWaveSound | |||
910F | LD A,($913E) | Jump to DebounceLoop if *UserDefinedKeys is not equal to 06. | ||
9112 | CP $06 | |||
9114 | JR NZ,DebounceLoop | |||
Controls_1 | 9116 | CALL Controls_ReadKempston | Call Controls_ReadKempston. | |
9119 | INC C | Increment C by one. | ||
911A | JR NZ,Controls_1 | Jump to Controls_1 if C is not zero. | ||
911C | JR PlaySelectWaveSound | Jump to PlaySelectWaveSound. | ||
Debounce the key press.
|
||||
DebounceLoop | 911E | CALL $028E | 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 +00 to +27 the value being different for each of the forty keys of the keyboard, or the value +FF for no-key. |
||||
9121 | INC E | Set the zero flag if no keys have been pressed. | ||
9122 | JR NZ,DebounceLoop | Jump to DebounceLoop unless no keys are being pressed. | ||
Play the "select" key wave sound.
|
||||
PlaySelectWaveSound | 9124 | XOR A | Write 00 to *92C5. | |
9125 | LD ($92C5),A | |||
9128 | POP AF | Restore AF from the stack. | ||
9129 | OR A | Return if A is not zero. | ||
912A | RET NZ | |||
912B | DI | Disable interrupts. | ||
912C | LD B,$C9 | B=C9. | ||
912E | LD A,$FC | A=FC. | ||
SelectSoundLoop | 9130 | LD C,$32 | C=32. | |
SelectSoundDurationLoop | 9132 | DEC C | Decrease C by one. | |
9133 | JR NZ,SelectSoundDurationLoop | Jump to SelectSoundDurationLoop until C is zero. | ||
9135 | OUT ($FE),A | Flip the speaker bit (bit 4), and send the result to the speaker. | ||
9137 | XOR %00010000 | |||
9139 | DJNZ SelectSoundLoop | Decrease counter by one and loop back to SelectSoundLoop until counter is zero. | ||
913B | XOR A | A=00. | ||
913C | EI | Enable interrupts. | ||
913D | RET | Return. |
Prev: 90BB | Up: Map | Next: 913E |