![]() |
Routines |
| Prev: EB00 | Up: Map | Next: EBE3 |
|
Used by the routine at InitialiseGame.
|
|||||
| DisplayChangeControls | EB43 | LD HL,$E900 | HL=Messaging_ControlSelection. | ||
| EB46 | LD C,$04 | C=04 (four "blocks" of text). | |||
| EB48 | EXX | Switch to the shadow registers. | |||
| EB49 | LD DE,$4060 | DE'=4060 (screen buffer location). | |||
| EB4C | EXX | Switch to the shadow registers. | |||
|
Re-use the same printing routine as the start screen.
|
|||||
| EB4D | CALL StartScreen_TextLoop | Call StartScreen_TextLoop. | |||
| EB50 | LD HL,$0101 | Write 01 to *REPDEL and 01 to *REPPER. | |||
| EB53 | LD ($5C09),HL | ||||
|
Add a little pause to debounce the keypress from the previous page.
|
|||||
| EB56 | LD HL,$0000 | HL=0000. | |||
| ChangeControls_DebounceLoop | EB59 | DEC HL | Decrease HL by one. | ||
| EB5A | LD A,H | Jump to ChangeControls_DebounceLoop until HL is zero. | |||
| EB5B | OR L | ||||
| EB5C | JR NZ,ChangeControls_DebounceLoop | ||||
|
Get input from the keyboard.
|
|||||
| ChangeControls_InputLoop | EB5E | CALL KeyboardInput | Call KeyboardInput. | ||
| EB61 | AND A | Jump to ChangeControls_InputLoop until any key is pressed. | |||
| EB62 | JR Z,ChangeControls_InputLoop | ||||
|
Test if "keyboard/ standard" control has been selected.
|
|||||
| EB64 | LD HL,$6828 | HL=KeyboardInput. | |||
| EB67 | BIT 4,A | Jump to ChangeControls_TestIfKempston if a key from the top row has not been pressed. | |||
| EB69 | JR Z,ChangeControls_TestIfKempston | ||||
|
Write the selected control method to *ControlMethod.
|
|||||
| SetControlMethod | EB6B | LD ($7850),HL | Write HL to *ControlMethod. | ||
| EB6E | RET | Return. | |||
|
Test if "kempston joystick" control has been selected.
|
|||||
| ChangeControls_TestIfKempston | EB6F | LD HL,$E8F6 | HL=KempstonJoystickInput. | ||
| EB72 | BIT 3,A | Jump to SetControlMethod if a key from the second row has been pressed. | |||
| EB74 | JR NZ,SetControlMethod | ||||
|
Handle both AGF interface and "other" (user defined keys) selections.
|
|||||
| EB76 | LD HL,$EB00 | HL=UserDefinedKeysInput. | |||
| EB79 | LD ($7850),HL | Write HL to *ControlMethod. | |||
| EB7C | BIT 2,A | Jump to SetAGFController if a key from the third row has been pressed. | |||
| EB7E | JP NZ,SetAGFController | ||||
| EB81 | NOP | No operation. | |||
| EB82 | NOP | No operation. | |||
|
Ask the user to set user-defined keys.
|
|||||
| EB83 | CALL ClearScreen_Pause | Call ClearScreen_Pause. | |||
|
Set the attributes.
|
|||||
| EB86 | LD HL,$5900 | HL=5900 (attribute buffer location). | |||
| EB89 | LD B,$40 | B=40 (counter; two rows of text). | |||
| UserDefinedControls_ColourLoop | EB8B | LD (HL),$85 | Write 85 (INK: CYAN, PAPER: BLACK FLASH: ON) to *HL. | ||
| EB8D | INC L | Increment L by one. | |||
| EB8E | DJNZ UserDefinedControls_ColourLoop | Decrease counter by one and loop back to UserDefinedControls_ColourLoop until counter is zero. | |||
|
Set the screen buffer position.
|
|||||
| EB90 | EXX | Switch to the shadow registers. | |||
| EB91 | LD D,$48 | D'=48. | |||
| EB93 | EXX | Switch back to the normal registers. | |||
|
Loop through each control and allow the user to set it.
|
|||||
| EB94 | LD B,$05 | B=05 (counter; five controls to select). | |||
| EB96 | LD HL,$EA60 | HL=Messaging_Left. | |||
| EB99 | LD DE,$7853 | DE=UserDefinedKeyMap. | |||
| UserDefinedControls_Loop | EB9C | PUSH BC | Stash the control counter on the stack. | ||
|
Reset the screen buffer position.
|
|||||
| EB9D | EXX | Switch to the shadow registers. | |||
| EB9E | LD E,$20 | E'=20. | |||
| EBA0 | EXX | Switch back to the normal registers. | |||
|
Print the control select message to the screen.
|
|||||
| EBA1 | LD B,$20 | B=20 (counter; number of characters to print for this control). | |||
| EBA3 | CALL Print_Loop | Call Print_Loop. | |||
| EBA6 | PUSH HL | Stash control messaging pointer on the stack. | |||
|
Reset the screen buffer position.
|
|||||
| EBA7 | EXX | Switch to the shadow registers. | |||
| EBA8 | LD E,$00 | E'=00. | |||
| EBAA | EXX | Switch to the normal registers. | |||
| EBAB | LD HL,$EA00 | HL=Messaging_ChangeControls. | |||
| EBAE | LD B,$20 | B=20 (counter; length of "change controls" string). | |||
| EBB0 | CALL Print_Loop | Call Print_Loop. | |||
| EBB3 | LD (IY+$07),$00 | Write 07 to *IY+07. | |||
| EBB7 | SET 3,(IY+$30) | Set bit 3 of *IX+30. | |||
| EBBB | LD HL,$5C3B | HL=FLAGS. | |||
| EBBE | RES 5,(HL) | Reset bit 5 of *HL. | |||
| UserDefinedControls_InputLoop | EBC0 | RST $38 | Call MASK_INT | ||
| EBC1 | BIT 5,(HL) | Jump to UserDefinedControls_InputLoop until any key is pressed. | |||
| EBC3 | JR Z,UserDefinedControls_InputLoop | ||||
|
Fetch the user keypress.
|
|||||
| EBC5 | LD A,($5C08) | A=*LAST_K. | |||
| EBC8 | LD (DE),A | Write the keypress to the current position in *UserDefinedKeyMap. | |||
| EBC9 | INC E | Move onto the next control key. | |||
|
Warn the user that we debounce using pauses rather than wait for the key to be released.
|
|||||
| EBCA | LD HL,$EA20 | HL=Messaging_Warning. | |||
| EBCD | LD B,$40 | B=40 (counter; number of characters in the warning messaging). | |||
|
Set the screen buffer position.
|
|||||
| EBCF | EXX | Switch to the shadow registers. | |||
| EBD0 | LD E,$00 | E'=00. | |||
| EBD2 | EXX | Switch back to the normal registers. | |||
| EBD3 | CALL Print_Loop | Call Print_Loop. | |||
| EBD6 | NOP | No operation. | |||
| EBD7 | NOP | No operation. | |||
| EBD8 | NOP | No operation. | |||
| EBD9 | CALL PauseLong | Debounce using PauseLong. | |||
| EBDC | NOP | No operation. | |||
| EBDD | NOP | No operation. | |||
| EBDE | POP HL | Restore control messaging pointer and control counter from the stack. | |||
| EBDF | POP BC | ||||
| EBE0 | DJNZ UserDefinedControls_Loop | Decrease control counter by one and loop back to UserDefinedControls_Loop until counter is zero. | |||
| EBE2 | RET | Return. | |||
| Prev: EB00 | Up: Map | Next: EBE3 |