Chase H.Q. | Routines |
Prev: E810 | Up: Map | Next: E9B4 |
Used by the routine at entrypt_48k.
|
||||
stop_the_tape_48k | E8FE | CALL setup_interrupts | Call setup_interrupts | |
E901 | CALL reset_music | Call reset_music | ||
E904 | EI | Enable interrupts | ||
E905 | HALT | Wait for next interrupt | ||
E906 | CALL clear_screen | Call clear_screen | ||
E909 | LD HL,$E9B4 | -> "STOP THE TAPE" + "PRESS ANY KEY" message set | ||
E90C | CALL menu_draw_strings | Call menu_draw_strings | ||
Wait for a key down.
|
||||
stt_wait_for_keypress_loop | E90F | CALL play_music_48k | Call play_music_48k during the loop | |
E912 | XOR A | Was any key pressed? | ||
E913 | IN A,($FE) | |||
E915 | CPL | |||
E916 | AND $1F | |||
E918 | JR Z,stt_wait_for_keypress_loop | Loop if not | ||
Wait for key up.
|
||||
stt_debounce_loop | E91A | CALL play_music_48k | Call play_music_48k during the loop | |
E91D | XOR A | Was any key pressed? | ||
E91E | IN A,($FE) | |||
E920 | CPL | |||
E921 | AND $1F | |||
E923 | JR NZ,stt_debounce_loop | Loop if it was | ||
Draw the input selection menu.
|
||||
stt_clear_screen | E925 | CALL clear_screen | Call clear_screen | |
E928 | LD HL,$E9E1 | Point HL at input menu messages (NUL terminated) | ||
E92B | CALL menu_draw_strings | Call menu_draw_strings | ||
Wait for a choice.
|
||||
stt_keyscan_choice | E92E | CALL play_music_48k | Call play_music_48k during the loop | |
E931 | LD A,$F7 | Keyscan for 1, 2, 3, 4, 5 | ||
E933 | IN A,($FE) | |||
E935 | CPL | |||
E936 | AND $1F | |||
E938 | JR Z,stt_keyscan_choice | Loop while no selection | ||
E93A | RRA | 1. SINCLAIR JOYSTICK selected | ||
E93B | JR C,stt_sinclair_joystick | |||
E93D | RRA | 2. CURSOR JOYSTICK selected | ||
E93E | JR C,stt_cursor_joystick | |||
E940 | RRA | 3. KEMPSTON JOYSTICK selected | ||
E941 | JR C,stt_kempston_joystick | |||
E943 | RRA | 4. KEYBOARD selected | ||
E944 | JR C,stt_keyboard | |||
E946 | CALL redefine_keys_48k | 5. DEFINE KEYS selected | ||
E949 | JR stt_clear_screen | Loop | ||
stt_sinclair_joystick | E94B | LD HL,$EE26 | Point at Sinclair joystick keydefs | |
E94E | JR stt_copy_keydefs | Jump to copy keydefs | ||
stt_cursor_joystick | E950 | LD HL,$EE2B | Point at cursor joystick keydefs | |
stt_copy_keydefs | E953 | LD DE,$EE38 | Copy the five keydefs at HL to $EE38 | |
E956 | LD BC,$0005 | |||
E959 | LDIR | |||
stt_keyboard | E95B | XOR A | Clear Kempston joystick flag | |
stt_do_define | E95C | LD HL,$EE3D | Point at final three bytes of temp_keydefs | |
E95F | LD DE,$A0CC | Assign Kempston joystick flag | ||
E962 | LD (DE),A | |||
E963 | INC DE | Populate Quit/Pause/Turbo keys at $A0CD+ | ||
E964 | LD BC,$0003 | |||
E967 | LDIR | |||
E969 | LD HL,$EE38 | Populate Gear/Accelerate/Brake/Left/Right keys at $A0D2+ | ||
E96C | LD C,$05 | |||
E96E | LDIR | |||
Warn the player that they can't return to this screen.
|
||||
E970 | CALL clear_screen | Call clear_screen | ||
E973 | LD HL,$EB78 | Address of "control options cannot be remodified" text (NUL terminated) | ||
E976 | CALL menu_draw_strings | Call menu_draw_strings | ||
Wait for key up.
|
||||
stt_debounce_loop2 | E979 | CALL play_music_48k | Call play_music_48k | |
E97C | XOR A | Was a key pressed? | ||
E97D | IN A,($FE) | |||
E97F | CPL | |||
E980 | AND $1F | |||
E982 | JR NZ,stt_debounce_loop2 | Loop if it was | ||
stt_confirm | E984 | CALL play_music_48k | Call play_music_48k | |
E987 | LD A,$DF | Was Y pressed? | ||
E989 | IN A,($FE) | |||
E98B | CPL | |||
E98C | AND $10 | |||
E98E | JR NZ,stt_done | Jump to done if so | ||
E990 | LD A,$7F | Was N pressed? | ||
E992 | IN A,($FE) | |||
E994 | CPL | |||
E995 | AND $08 | |||
E997 | JR NZ,stt_clear_screen | Start over if so | ||
E999 | JR stt_confirm | Loop | ||
stt_done | E99B | DI | Disable interrupts | |
E99C | JP clear_screen | Jump to clear_screen | ||
Check for a stable reading from the Kempston joystick port before allowing the user to proceed.
|
||||
stt_kempston_joystick | E99F | LD B,$0A | 10 iterations | |
E9A1 | IN A,($1F) | Read the joystick port into C | ||
E9A3 | LD C,A | |||
stt_kempston_loop | E9A4 | IN A,($1F) | Read the same port again | |
E9A6 | CP C | If it doesn't match then jump back to menu | ||
E9A7 | JR NZ,stt_keyscan_choice | |||
E9A9 | PUSH BC | Call play_music_48k | ||
E9AA | CALL play_music_48k | |||
E9AD | POP BC | |||
E9AE | DJNZ stt_kempston_loop | Loop while B > 0 | ||
E9B0 | LD A,$01 | Set Kempston joystick flag | ||
E9B2 | JR stt_do_define | Jump to do define |
Prev: E810 | Up: Map | Next: E9B4 |