![]() |
Routines |
| Prev: 28564 | Up: Map | Next: 28745 |
|
Used by the routine at TitleScreen_DefineKeysSelected.
|
||||
| CollectUserDefinedKeys | 28570 | LD A,1 | Write 1 to *CurrentIndexUserDefinedKey. | |
| 28572 | LD (28745),A | |||
| 28575 | LD HL,28525 | HL=KeyboardKeymap. | ||
|
Blank the first entry of all five user-defined key sets.
|
||||
| 28578 | LD B,5 | B=5. | ||
| BlankUserDefinedKeys_Loop | 28580 | LD (HL),0 | Write 0 to *HL. | |
| 28582 | INC HL | Increment HL by two. | ||
| 28583 | INC HL | |||
| 28584 | DJNZ BlankUserDefinedKeys_Loop | Decrease counter by one and loop back to BlankUserDefinedKeys_Loop until counter is zero. | ||
|
Debounce Loop.
|
||||
| UserDefinedKeyDebounce_Loop | 28586 | CALL 654 | Call KEY_SCAN. | |
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. |
||||
| 28589 | INC E | Increment E by one. | ||
| 28590 | JR NZ,UserDefinedKeyDebounce_Loop | Jump to UserDefinedKeyDebounce_Loop until E is zero (e.g. no keys are being pressed). | ||
|
Get ready to collect keypresses.
|
||||
| 28592 | XOR A | Write 0 to LAST-K (last key pressed). | ||
| 28593 | LD (23560),A | |||
| UserDefinedKeyCollectInput_Loop | 28596 | LD C,5 | C=INK: CYAN, PAPER: BLACK . | |
| 28598 | CALL FindUserDefinedKeyAttribute | Call FindUserDefinedKeyAttribute. | ||
| UserDefinedKeyCollectInput | 28601 | CALL 703 | Call KEYBOARD. | |
| 28604 | BIT 5,(IY+1) | Jump to UserDefinedKeyCollectInput if no key was pressed. | ||
| 28608 | JR Z,UserDefinedKeyCollectInput | |||
| 28610 | LD A,(23560) | A=*LAST-K (last key pressed). | ||
| 28613 | CP 13 | Jump to FindExistingKeyboardKeymap if A is equal to 13. | ||
| 28615 | JR Z,FindExistingKeyboardKeymap | |||
| 28617 | CP 32 | Jump to FindExistingKeyboardKeymap if A is equal to 32. | ||
| 28619 | JR Z,FindExistingKeyboardKeymap | |||
| 28621 | CP 48 | Jump to UserDefinedKeyCollectInput if A is lower than 48. | ||
| 28623 | JR C,UserDefinedKeyCollectInput | |||
| 28625 | CP 91 | Jump to UserDefinedKeyCollectInput if A is higher than 91. | ||
| 28627 | JR NC,UserDefinedKeyCollectInput | |||
| 28629 | CP 65 | Jump to FindExistingKeyboardKeymap if A is higher than 65. | ||
| 28631 | JR NC,FindExistingKeyboardKeymap | |||
| 28633 | CP 58 | Jump to UserDefinedKeyCollectInput if A is higher than 58. | ||
| 28635 | JR NC,UserDefinedKeyCollectInput | |||
|
Check if the key which has been pressed already exists for any other key.
|
||||
| FindExistingKeyboardKeymap | 28637 | LD HL,28525 | HL=KeyboardKeymap. | |
| 28640 | LD D,A | Store the keypress in D. | ||
| 28641 | LD B,5 | Set a counter in B as there are 5 keys to check in total. | ||
| FindExistingKeyboardKeymap_Loop | 28643 | LD A,(HL) | Jump to UserDefinedKeyCollectInput if the current keypress already exists in the user-defined keymap table. | |
| 28644 | CP D | |||
| 28645 | JR Z,UserDefinedKeyCollectInput | |||
| 28647 | INC HL | Increment HL by two. | ||
| 28648 | INC HL | |||
| 28649 | 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.
|
||||
| 28651 | LD A,(28745) | Set a counter in B of *CurrentIndexUserDefinedKey. | ||
| 28654 | LD B,A | |||
| 28655 | LD HL,28523 | HL=28523 (e.g. KeyboardKeymap-2). | ||
| FindCurrentKeyboardKeymap_Loop | 28658 | INC HL | Increment HL by two. | |
| 28659 | INC HL | |||
| 28660 | DJNZ FindCurrentKeyboardKeymap_Loop | Decrease counter by one and loop back to FindCurrentKeyboardKeymap_Loop until counter is zero. | ||
| 28662 | LD (HL),D | Write the keypress to *HL and also stash it on the stack. | ||
| 28663 | PUSH DE | |||
|
Calculate the screen co-ordinates.
B, the row, is a simple calculation of: 24-*CurrentIndexUserDefinedKey.
C, the column, will always be 11.
|
||||
| 28664 | LD B,A | Calculate the screen co-ordinates for the index currently in-focus and store them in BC. | ||
| 28665 | LD A,24 | |||
| 28667 | SUB B | |||
| 28668 | LD B,A | |||
| 28669 | LD C,11 | |||
|
Convert the screen co-ordinates into a screen buffer location pointer.
|
||||
| 28671 | CALL 3554 | Call 3554 (CL_SET). | ||
| 28674 | POP DE | Fetch the keypress from the stack and store it in A. | ||
| 28675 | LD A,D | |||
|
Handle printing keywords for control keys (which are still valid as choose-able keys).
|
||||
| 28676 | CP 13 | Jump to Print_Enter if "enter" is the keypress. | ||
| 28678 | JR Z,Print_Enter | |||
| 28680 | CP 32 | Jump to Print_Space if "space" is the keypress. | ||
| 28682 | JR Z,Print_Space | |||
|
Else, it's a printable character so display it.
|
||||
| 28684 | RST 16 | Print the character to the screen. | ||
| PrintWhitespace | 28685 | LD B,4 | Set a counter in B to print 4 ASCII spaces. | |
| PrintWhitespace_Loop | 28687 | LD A,32 | Print an ASCII space " ". | |
| 28689 | RST 16 | |||
| 28690 | DJNZ PrintWhitespace_Loop | Decrease the space counter by one and loop back to PrintWhitespace_Loop until the counter is zero. | ||
| 28692 | LD C,7 | C=INK: WHITE, PAPER: BLACK . | ||
| 28694 | CALL FindUserDefinedKeyAttribute | Call FindUserDefinedKeyAttribute. | ||
|
Move to the next user-defined key index.
|
||||
| 28697 | LD A,(28745) | A=*CurrentIndexUserDefinedKey. | ||
| 28700 | INC A | Increment A by one. | ||
| 28701 | LD (28745),A | Write A to *CurrentIndexUserDefinedKey. | ||
| 28704 | CP 6 | Keep jumping back to UserDefinedKeyCollectInput_Loop until all user-defined keys have been collected. | ||
| 28706 | JR NZ,UserDefinedKeyCollectInput_Loop | |||
| 28708 | RET | Return. | ||
|
Prints the word "SPACE".
|
||||
| Print_Space | 28709 | LD HL,31297 | HL=Messaging_Space. | |
| 28712 | CALL 6269 | Call OUT_LINE2. | ||
| 28715 | JR PrintWhitespace | Jump to PrintWhitespace. | ||
|
Prints the word "ENTER".
|
||||
| Print_Enter | 28717 | LD HL,31303 | HL=Messaging_Enter. | |
| 28720 | CALL 6269 | Call OUT_LINE2. | ||
| 28723 | JR PrintWhitespace | Jump to PrintWhitespace. | ||
|
22539+(32*CurrentIndexUserDefinedKey) to find the attribute buffer address for the user-defined key currently being processed.
|
||||
| FindUserDefinedKeyAttribute | 28725 | LD HL,22539 | HL=22539 (attribute buffer location). | |
| 28728 | LD DE,32 | DE=0032. | ||
| 28731 | LD A,(28745) | A=*CurrentIndexUserDefinedKey. | ||
| FindUserDefinedKeyAttribute_Loop | 28734 | ADD HL,DE | HL+=0032. | |
| 28735 | DEC A | Decrease the index by one. | ||
| 28736 | 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.
|
||||
| 28738 | LD B,20 | Set a counter in B for 20 character blocks to "paint". | ||
| SetUserDefinedKeyAttribute_Loop | 28740 | LD (HL),C | Write the attribute byte held by C to *HL. | |
| 28741 | INC HL | Increment HL by one. | ||
| 28742 | DJNZ SetUserDefinedKeyAttribute_Loop | Decrease counter by one and loop back to SetUserDefinedKeyAttribute_Loop until counter is zero. | ||
| 28744 | RET | Return. | ||
| Prev: 28564 | Up: Map | Next: 28745 |