Prev: C003 Up: Map Next: C041
C00A: Handler: User Input
Used by the routines at UserInput_Enter and GameLoop.
Reset the screen position to defaults.
Handler_UserInput C00A CALL SetDefaultScreenPosition Call SetDefaultScreenPosition.
Clear down the command buffer which will hold the users input.
C00D LD HL,$BD34 HL=CommandBuffer.
C010 LD A,$20 Store the ASCII code for "SPACE" (" ") into A.
C012 LD B,$32 Set a counter in B for the size of the command buffer (32 bytes).
Write "SPACE" 32 times wiping the entire command buffer.
EmptyCommandBuffer_Loop C014 LD (HL),A Write A to *HL.
C015 INC HL Increment HL by one.
C016 DJNZ EmptyCommandBuffer_Loop Decrease the command buffer counter by one and loop back to EmptyCommandBuffer_Loop until the whole buffer is cleared.
Now print the prompt icon ">".
C018 CALL PrintInputPrompt Call PrintInputPrompt.
Initialise the command buffer.
C01B LD HL,$BD34 HL=CommandBuffer.
This entry point is used by the routine at UserInput_Delete.
Collect the users keypress.
UserInput_Loop C01E CALL GetUserInput Call GetUserInput.
Check the two valid control keys "DELETE" and "ENTER".
C021 CP $0C Jump to UserInput_Delete if "DELETE" was pressed.
C023 JR Z,UserInput_Delete
C025 CP $0D Jump to UserInput_Enter if "ENTER" was pressed.
C027 JR Z,UserInput_Enter
C029 CP $20 If the keypress was any other control key (the value being under 20 ASCII "SPACE"), it's not valid input so jump back to UserInput_Loop.
C02B JR C,UserInput_Loop
Test if the current position in the command buffer is at the end (BD65) of the buffer. For example:
Position Output
BD34 31
BD3B 2A
BD42 23
BD49 1C
BD50 15
BD57 0E
BD5E 07
BD65 00
C02D EX DE,HL Jump back to UserInput_Loop if the input has reached the end of the command buffer (so don't process it).
C02E LD HL,$BD65
C031 AND A
C032 SBC HL,DE
C034 EX DE,HL
C035 JR Z,UserInput_Loop
The keypress is valid, so process it and print it to the screen.
C037 LD (HL),A Write the keypress into the command buffer at the current position.
C038 CALL SwitchNormalScreenOutput Call SwitchNormalScreenOutput.
C03B CALL PrintCharacter Call PrintCharacter.
C03E INC HL Increment the pointer to the command buffer by one.
C03F JR UserInput_Loop Jump back to UserInput_Loop.
Prev: C003 Up: Map Next: C041