Prev: E810 Up: Map Next: E9B4
E8FE: "Stop the tape" handler (48K mode only)
Sets up interrupts and music, clears the screen and shows the "STOP THE TAPE" / "PRESS ANY KEY" prompt. After a key press and release it draws the input selection menu.
Five choices are offered. 1 and 2 copy a fixed five-key scheme for the Sinclair or cursor joystick into temp_keydefs; 3 is accepted only after ten consecutive identical reads of the Kempston port, an unstable reading meaning no interface is fitted, in which case the menu is redrawn; 4 keeps whatever temp_keydefs already holds; 5 runs redefine_keys_48k and comes back to the menu.
Whichever is picked, the scheme is installed into the Kempston flag and the live key definitions, and the player is warned the choice cannot be changed afterwards. N returns to the menu, Y clears the screen and returns.
Used by the routine at entry_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 Load 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