![]() |
Routines |
| Prev: 33695 | Up: Map | Next: 33913 |
|
Used by the routine at GameInitialise.
|
||||||||||||||||||||
Prints "Select controls".
|
||||||||||||||||||||
| GameMenu | 33706 | LD HL,35633 | HL=Messaging_SelectControls. | |||||||||||||||||
| 33709 | LD DE,20555 | DE=20555 (screen buffer location). | ||||||||||||||||||
| 33712 | CALL Print_String | Call Print_String. | ||||||||||||||||||
| 33715 | LD HL,20587 | HL=20587 (screen buffer location). | ||||||||||||||||||
| 33718 | LD B,15 | Underline the header with 15 character blocks of 255. | ||||||||||||||||||
| 33720 | CALL Underline | |||||||||||||||||||
|
Prints "1 User defined keys".
|
||||||||||||||||||||
| 33723 | LD HL,35648 | HL=Messaging_UserDefinedKeys. | ||||||||||||||||||
| 33726 | LD DE,20617 | DE=20617 (screen buffer location). | ||||||||||||||||||
| 33729 | CALL Print_String | Call Print_String. | ||||||||||||||||||
|
Prints "2 Kempston joystick".
|
||||||||||||||||||||
| 33732 | LD HL,35667 | HL=Messaging_KempstonJoystick. | ||||||||||||||||||
| 33735 | LD DE,20649 | DE=20649 (screen buffer location). | ||||||||||||||||||
| 33738 | CALL Print_String | Call Print_String. | ||||||||||||||||||
|
Prints "3 Interface 2".
|
||||||||||||||||||||
| 33741 | LD HL,35686 | HL=Messaging_Interface2. | ||||||||||||||||||
| 33744 | LD DE,20681 | DE=20681 (screen buffer location). | ||||||||||||||||||
| 33747 | CALL Print_String | Call Print_String. | ||||||||||||||||||
|
Prints "4 Cursor key type J/S".
|
||||||||||||||||||||
| 33750 | LD HL,35699 | HL=Messaging_CursorKeys. | ||||||||||||||||||
| 33753 | LD DE,20713 | DE=20713 (screen buffer location). | ||||||||||||||||||
| 33756 | CALL Print_String | Call Print_String. | ||||||||||||||||||
|
Handle retrieving the players input.
|
||||||||||||||||||||
| GameMenu_InputLoop | 33759 | LD BC,63486 | Read from the keyboard;
|
|||||||||||||||||
| 33762 | IN A,(C) | |||||||||||||||||||
| 33764 | OR %11100000 | Set bits 5-7 (to fill in the extra bits). | ||||||||||||||||||
| 33766 | CP 255 | Jump to GameMenu_HandleInput if any of the keys have been pressed. | ||||||||||||||||||
| 33768 | JR NZ,GameMenu_HandleInput | |||||||||||||||||||
| 33770 | LD B,5 | Call 32853 with a count of 5. | ||||||||||||||||||
| 33772 | CALL 32853 | |||||||||||||||||||
| 33775 | JR GameMenu_InputLoop | Jump to GameMenu_InputLoop. | ||||||||||||||||||
|
Process the players input.
|
||||||||||||||||||||
| GameMenu_HandleInput | 33777 | CP 254 | Jump to SetUserDefinedKeys if A is equal to 254. | |||||||||||||||||
| 33779 | JR Z,SetUserDefinedKeys | |||||||||||||||||||
|
Was Kempston joystick selected?
|
||||||||||||||||||||
| 33781 | LD HL,36437 | HL=KeyMap_Kempston. | ||||||||||||||||||
| 33784 | CP 253 | Jump to SetKempstonJoystick if A is equal to 253. | ||||||||||||||||||
| 33786 | JR Z,SetKempstonJoystick | |||||||||||||||||||
|
Was Interface 2 joystick selected?
|
||||||||||||||||||||
| 33788 | LD HL,36452 | HL=KeyMap_Interface2. | ||||||||||||||||||
| 33791 | CP 251 | Jump to SetNoOperation if A is equal to 251. | ||||||||||||||||||
| 33793 | JR Z,SetNoOperation | |||||||||||||||||||
|
Was the Cursor joystick selected?
|
||||||||||||||||||||
| 33795 | LD HL,36467 | HL=KeyMap_CursorKeys. | ||||||||||||||||||
| 33798 | CP 247 | Jump back to GameMenu_InputLoop if the cursor joystick was not selected. | ||||||||||||||||||
| 33800 | JR NZ,GameMenu_InputLoop | |||||||||||||||||||
|
Self-modifying code. See; HandleControlBits.
|
||||||||||||||||||||
| SetNoOperation | 33802 | LD A,0 | Write 0 (NOP) to *HandleControlBits. | |||||||||||||||||
| SetActiveKeyMap | 33804 | LD (34292),A | Write A to *HandleControlBits. | |||||||||||||||||
| 33807 | LD DE,61408 | Copy 0015 bytes from *HL to *ActiveKeyMap. | ||||||||||||||||||
| 33810 | LD BC,15 | |||||||||||||||||||
| 33813 | LDIR | |||||||||||||||||||
| 33815 | RET | Return. | ||||||||||||||||||
|
Self-modifying code. See; HandleControlBits.
Invert the bits in the controls routine.
|
||||||||||||||||||||
| SetKempstonJoystick | 33816 | LD A,47 | A=47 (CPL) to *HandleControlBits. | |||||||||||||||||
| 33818 | JR SetActiveKeyMap | Jump to SetActiveKeyMap. | ||||||||||||||||||
|
Self-modifying code. See; HandleControlBits.
|
||||||||||||||||||||
| SetUserDefinedKeys | 33820 | LD A,0 | Write 0 (NOP) to *HandleControlBits. | |||||||||||||||||
| 33822 | LD (34292),A | |||||||||||||||||||
| 33825 | CALL ClearBottomScreenArea | Call ClearBottomScreenArea. | ||||||||||||||||||
|
Prints "Please select ".
|
||||||||||||||||||||
| 33828 | LD HL,35720 | HL=Messaging_PleaseSelectKeys. | ||||||||||||||||||
| 33831 | LD DE,20647 | DE=20647 (screen buffer location). | ||||||||||||||||||
| 33834 | CALL Print_String | Call Print_String. | ||||||||||||||||||
|
Cycle through each key/ key messaging to collect the user input:
Using "right key", "down key", "left key", "up key" and "fire key" strings.
|
||||||||||||||||||||
| 33837 | LD HL,35734 | HL=Messaging_RedefineKeys_Right. | ||||||||||||||||||
| 33840 | LD B,5 | Store a counter in B of 5 for how many strings to print. | ||||||||||||||||||
| 33842 | LD IX,61408 | IX=ActiveKeyMap. | ||||||||||||||||||
| SetKeys_Loop | 33846 | PUSH BC | Stash the string counter and active keymap position on the stack. | |||||||||||||||||
| 33847 | PUSH IX | |||||||||||||||||||
| 33849 | LD DE,20661 | DE=20661 (screen buffer location). | ||||||||||||||||||
| 33852 | CALL Print_String | Call Print_String. | ||||||||||||||||||
| 33855 | PUSH HL | Stash the messaging pointer on the stack. | ||||||||||||||||||
| GameMenu_0 | 33856 | CALL PauseCheck | Call PauseCheck. | |||||||||||||||||
| GameMenu_1 | 33859 | LD B,5 | Call 32853 with a count of 5. | |||||||||||||||||
| 33861 | CALL 32853 | |||||||||||||||||||
| 33864 | LD BC,65278 | Read from the keyboard;
|
||||||||||||||||||
| GameMenu_2 | 33867 | IN A,(C) | ||||||||||||||||||
| 33869 | OR %11100000 | Set bits 5-7 (to fill in the extra bits). | ||||||||||||||||||
| 33871 | CP 255 | Jump to GameMenu_3 if any of the keys have been pressed. | ||||||||||||||||||
| 33873 | JR NZ,GameMenu_3 | |||||||||||||||||||
| 33875 | RLC B | Rotate B left (with carry). | ||||||||||||||||||
| 33877 | JR C,GameMenu_2 | Jump to GameMenu_2 if A is lower. | ||||||||||||||||||
| 33879 | JR GameMenu_1 | Jump to GameMenu_1. | ||||||||||||||||||
| GameMenu_3 | 33881 | CPL | Invert the bits in A. | |||||||||||||||||
| 33882 | AND %00011111 | Keep only bits 0-4. | ||||||||||||||||||
| 33884 | LD E,A | E=A. | ||||||||||||||||||
| GameMenu_4 | 33885 | RRA | RRA. | |||||||||||||||||
| 33886 | JR NC,GameMenu_4 | Jump to GameMenu_4 if A is higher. | ||||||||||||||||||
| 33888 | CP 0 | Jump to GameMenu_0 if A is not equal to 0. | ||||||||||||||||||
| 33890 | JR NZ,GameMenu_0 | |||||||||||||||||||
| 33892 | POP HL | Restore the messaging pointer and active keymap position from the stack. | ||||||||||||||||||
| 33893 | POP IX | |||||||||||||||||||
| 33895 | LD (IX+0),C | Write the keymap data to the current active key. | ||||||||||||||||||
| 33898 | LD (IX+1),B | |||||||||||||||||||
| 33901 | LD (IX+2),E | |||||||||||||||||||
| 33904 | LD BC,3 | Add 0003 to IX to move to the next key. | ||||||||||||||||||
| 33907 | ADD IX,BC | |||||||||||||||||||
| 33909 | POP BC | Restore the string counter from the stack. | ||||||||||||||||||
| 33910 | DJNZ SetKeys_Loop | Decrease the string counter by one and loop back to SetKeys_Loop until all keys have been collected. | ||||||||||||||||||
| 33912 | RET | Return. | ||||||||||||||||||
| Prev: 33695 | Up: Map | Next: 33913 |