Routines |
Prev: 6F94 | Up: Map | Next: 7049 |
Used by the routine at TitleScreen_DefineKeysSelected.
|
||||
CollectUserDefinedKeys | 6F9A | LD A,$01 | Write 01 to *CurrentIndexUserDefinedKey. | |
6F9C | LD ($7049),A | |||
6F9F | LD HL,$6F6D | HL=KeyboardKeymap. | ||
Blank the first entry of all five user-defined key sets.
|
||||
6FA2 | LD B,$05 | B=05. | ||
BlankUserDefinedKeys_Loop | 6FA4 | LD (HL),$00 | Write 00 to *HL. | |
6FA6 | INC HL | Increment HL by two. | ||
6FA7 | INC HL | |||
6FA8 | DJNZ BlankUserDefinedKeys_Loop | Decrease counter by one and loop back to BlankUserDefinedKeys_Loop until counter is zero. | ||
Debounce Loop.
|
||||
UserDefinedKeyDebounce_Loop | 6FAA | CALL $028E | Call KEY_SCAN. | |
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. |
||||
6FAD | INC E | Increment E by one. | ||
6FAE | JR NZ,UserDefinedKeyDebounce_Loop | Jump to UserDefinedKeyDebounce_Loop until E is zero (e.g. no keys are being pressed). | ||
Get ready to collect keypresses.
|
||||
6FB0 | XOR A | Write 00 to LAST-K (last key pressed). | ||
6FB1 | LD ($5C08),A | |||
UserDefinedKeyCollectInput_Loop | 6FB4 | LD C,$05 | C=INK: CYAN, PAPER: BLACK . | |
6FB6 | CALL FindUserDefinedKeyAttribute | Call FindUserDefinedKeyAttribute. | ||
UserDefinedKeyCollectInput | 6FB9 | CALL $02BF | Call KEYBOARD. | |
6FBC | BIT 5,(IY+$01) | Jump to UserDefinedKeyCollectInput if no key was pressed. | ||
6FC0 | JR Z,UserDefinedKeyCollectInput | |||
6FC2 | LD A,($5C08) | A=*LAST-K (last key pressed). | ||
6FC5 | CP $0D | Jump to FindExistingKeyboardKeymap if A is equal to 0D. | ||
6FC7 | JR Z,FindExistingKeyboardKeymap | |||
6FC9 | CP $20 | Jump to FindExistingKeyboardKeymap if A is equal to 20. | ||
6FCB | JR Z,FindExistingKeyboardKeymap | |||
6FCD | CP $30 | Jump to UserDefinedKeyCollectInput if A is lower than 30. | ||
6FCF | JR C,UserDefinedKeyCollectInput | |||
6FD1 | CP $5B | Jump to UserDefinedKeyCollectInput if A is higher than 5B. | ||
6FD3 | JR NC,UserDefinedKeyCollectInput | |||
6FD5 | CP $41 | Jump to FindExistingKeyboardKeymap if A is higher than 41. | ||
6FD7 | JR NC,FindExistingKeyboardKeymap | |||
6FD9 | CP $3A | Jump to UserDefinedKeyCollectInput if A is higher than 3A. | ||
6FDB | JR NC,UserDefinedKeyCollectInput | |||
Check if the key which has been pressed already exists for any other key.
|
||||
FindExistingKeyboardKeymap | 6FDD | LD HL,$6F6D | HL=KeyboardKeymap. | |
6FE0 | LD D,A | Store the keypress in D. | ||
6FE1 | LD B,$05 | Set a counter in B as there are 05 keys to check in total. | ||
FindExistingKeyboardKeymap_Loop | 6FE3 | LD A,(HL) | Jump to UserDefinedKeyCollectInput if the current keypress already exists in the user-defined keymap table. | |
6FE4 | CP D | |||
6FE5 | JR Z,UserDefinedKeyCollectInput | |||
6FE7 | INC HL | Increment HL by two. | ||
6FE8 | INC HL | |||
6FE9 | DJNZ FindExistingKeyboardKeymap_Loop | Decrease the keymap counter by one and loop back to FindExistingKeyboardKeymap_Loop until all keymaps have been checked. | ||
The keypress is good, so find the keyboard keymap position we need to update.
|
||||
6FEB | LD A,($7049) | Set a counter in B of *CurrentIndexUserDefinedKey. | ||
6FEE | LD B,A | |||
6FEF | LD HL,$6F6B | HL=6F6B (e.g. KeyboardKeymap-02). | ||
FindCurrentKeyboardKeymap_Loop | 6FF2 | INC HL | Increment HL by two. | |
6FF3 | INC HL | |||
6FF4 | DJNZ FindCurrentKeyboardKeymap_Loop | Decrease counter by one and loop back to FindCurrentKeyboardKeymap_Loop until counter is zero. | ||
6FF6 | LD (HL),D | Write the keypress to *HL and also stash it on the stack. | ||
6FF7 | PUSH DE | |||
Calculate the screen co-ordinates.
B, the row, is a simple calculation of: 18-*CurrentIndexUserDefinedKey.
C, the column, will always be 0B.
|
||||
6FF8 | LD B,A | Calculate the screen co-ordinates for the index currently in-focus and store them in BC. | ||
6FF9 | LD A,$18 | |||
6FFB | SUB B | |||
6FFC | LD B,A | |||
6FFD | LD C,$0B | |||
Convert the screen co-ordinates into a screen buffer location pointer.
|
||||
6FFF | CALL $0DE2 | Call 0DE2 (CL_SET). | ||
7002 | POP DE | Fetch the keypress from the stack and store it in A. | ||
7003 | LD A,D | |||
Handle printing keywords for control keys (which are still valid as choose-able keys).
|
||||
7004 | CP $0D | Jump to Print_Enter if "enter" is the keypress. | ||
7006 | JR Z,Print_Enter | |||
7008 | CP $20 | Jump to Print_Space if "space" is the keypress. | ||
700A | JR Z,Print_Space | |||
Else, it's a printable character so display it.
|
||||
700C | RST $10 | Print the character to the screen. | ||
PrintWhitespace | 700D | LD B,$04 | Set a counter in B to print 04 ASCII spaces. | |
PrintWhitespace_Loop | 700F | LD A,$20 | Print an ASCII space " ". | |
7011 | RST $10 | |||
7012 | DJNZ PrintWhitespace_Loop | Decrease the space counter by one and loop back to PrintWhitespace_Loop until the counter is zero. | ||
7014 | LD C,$07 | C=INK: WHITE, PAPER: BLACK . | ||
7016 | CALL FindUserDefinedKeyAttribute | Call FindUserDefinedKeyAttribute. | ||
Move to the next user-defined key index.
|
||||
7019 | LD A,($7049) | A=*CurrentIndexUserDefinedKey. | ||
701C | INC A | Increment A by one. | ||
701D | LD ($7049),A | Write A to *CurrentIndexUserDefinedKey. | ||
7020 | CP $06 | Keep jumping back to UserDefinedKeyCollectInput_Loop until all user-defined keys have been collected. | ||
7022 | JR NZ,UserDefinedKeyCollectInput_Loop | |||
7024 | RET | Return. | ||
Prints the word "SPACE".
|
||||
Print_Space | 7025 | LD HL,$7A41 | HL=Messaging_Space. | |
7028 | CALL $187D | Call OUT_LINE2. | ||
702B | JR PrintWhitespace | Jump to PrintWhitespace. | ||
Prints the word "ENTER".
|
||||
Print_Enter | 702D | LD HL,$7A47 | HL=Messaging_Enter. | |
7030 | CALL $187D | Call OUT_LINE2. | ||
7033 | JR PrintWhitespace | Jump to PrintWhitespace. | ||
580B+(20*CurrentIndexUserDefinedKey) to find the attribute buffer address for the user-defined key currently being processed.
|
||||
FindUserDefinedKeyAttribute | 7035 | LD HL,$580B | HL=580B (attribute buffer location). | |
7038 | LD DE,$0020 | DE=0020. | ||
703B | LD A,($7049) | A=*CurrentIndexUserDefinedKey. | ||
FindUserDefinedKeyAttribute_Loop | 703E | ADD HL,DE | HL+=0020. | |
703F | DEC A | Decrease the index by one. | ||
7040 | JR NZ,FindUserDefinedKeyAttribute_Loop | Keep jumping back to FindUserDefinedKeyAttribute_Loop until the index is zero. | ||
HL now holds a pointer to the attribute line for the user-defined key currently being processed.
|
||||
7042 | LD B,$14 | Set a counter in B for 14 character blocks to "paint". | ||
SetUserDefinedKeyAttribute_Loop | 7044 | LD (HL),C | Write the attribute byte held by C to *HL. | |
7045 | INC HL | Increment HL by one. | ||
7046 | DJNZ SetUserDefinedKeyAttribute_Loop | Decrease counter by one and loop back to SetUserDefinedKeyAttribute_Loop until counter is zero. | ||
7048 | RET | Return. |
Prev: 6F94 | Up: Map | Next: 7049 |