diff options
-rw-r--r-- | input.c | 545 | ||||
-rw-r--r-- | input.h | 3 |
2 files changed, 0 insertions, 548 deletions
@@ -64,287 +64,6 @@ button_repeat_state_type button_repeat_state = BUTTON_NOT_HELD; u32 button_repeat = 0; gui_action_type cursor_repeat = CURSOR_NONE; - -#ifdef PSP_BUILD - -u32 gamepad_config_map[16] = -{ - BUTTON_ID_MENU, // Triangle - BUTTON_ID_A, // Circle - BUTTON_ID_B, // Cross - BUTTON_ID_START, // Square - BUTTON_ID_L, // Ltrigger - BUTTON_ID_R, // Rtrigger - BUTTON_ID_DOWN, // Down - BUTTON_ID_LEFT, // Left - BUTTON_ID_UP, // Up - BUTTON_ID_RIGHT, // Right - BUTTON_ID_SELECT, // Select - BUTTON_ID_START, // Start - BUTTON_ID_UP, // Analog up - BUTTON_ID_DOWN, // Analog down - BUTTON_ID_LEFT, // Analog left - BUTTON_ID_RIGHT // Analog right -}; - -#define PSP_ALL_BUTTON_MASK 0xFFFF - -gui_action_type get_gui_input() -{ - SceCtrlData ctrl_data; - gui_action_type new_button = CURSOR_NONE; - u32 new_buttons; - - static u32 last_buttons = 0; - static u64 button_repeat_timestamp; - - delay_us(25000); - - sceCtrlPeekBufferPositive(&ctrl_data, 1); - ctrl_data.Buttons &= PSP_ALL_BUTTON_MASK; - new_buttons = (last_buttons ^ ctrl_data.Buttons) & ctrl_data.Buttons; - last_buttons = ctrl_data.Buttons; - - if(new_buttons & PSP_CTRL_LEFT) - new_button = CURSOR_LEFT; - - if(new_buttons & PSP_CTRL_RIGHT) - new_button = CURSOR_RIGHT; - - if(new_buttons & PSP_CTRL_UP) - new_button = CURSOR_UP; - - if(new_buttons & PSP_CTRL_DOWN) - new_button = CURSOR_DOWN; - - if(new_buttons & PSP_CTRL_START) - new_button = CURSOR_SELECT; - - if(new_buttons & PSP_CTRL_CIRCLE) - new_button = CURSOR_SELECT; - - if(new_buttons & PSP_CTRL_CROSS) - new_button = CURSOR_EXIT; - - if(new_buttons & PSP_CTRL_SQUARE) - new_button = CURSOR_BACK; - - if(new_button != CURSOR_NONE) - { - get_ticks_us(&button_repeat_timestamp); - button_repeat_state = BUTTON_HELD_INITIAL; - button_repeat = new_buttons; - cursor_repeat = new_button; - } - else - { - if(ctrl_data.Buttons & button_repeat) - { - u64 new_ticks; - get_ticks_us(&new_ticks); - - if(button_repeat_state == BUTTON_HELD_INITIAL) - { - if((new_ticks - button_repeat_timestamp) > - BUTTON_REPEAT_START) - { - new_button = cursor_repeat; - button_repeat_timestamp = new_ticks; - button_repeat_state = BUTTON_HELD_REPEAT; - } - } - - if(button_repeat_state == BUTTON_HELD_REPEAT) - { - if((new_ticks - button_repeat_timestamp) > - BUTTON_REPEAT_CONTINUE) - { - new_button = cursor_repeat; - button_repeat_timestamp = new_ticks; - } - } - } - } - - return new_button; -} - -#define PSP_CTRL_ANALOG_UP (1 << 28) -#define PSP_CTRL_ANALOG_DOWN (1 << 29) -#define PSP_CTRL_ANALOG_LEFT (1 << 30) -#define PSP_CTRL_ANALOG_RIGHT (1 << 31) - -u32 button_psp_mask_to_config[] = -{ - PSP_CTRL_TRIANGLE, - PSP_CTRL_CIRCLE, - PSP_CTRL_CROSS, - PSP_CTRL_SQUARE, - PSP_CTRL_LTRIGGER, - PSP_CTRL_RTRIGGER, - PSP_CTRL_DOWN, - PSP_CTRL_LEFT, - PSP_CTRL_UP, - PSP_CTRL_RIGHT, - PSP_CTRL_SELECT, - PSP_CTRL_START, - PSP_CTRL_ANALOG_UP, - PSP_CTRL_ANALOG_DOWN, - PSP_CTRL_ANALOG_LEFT, - PSP_CTRL_ANALOG_RIGHT -}; - -u32 button_id_to_gba_mask[] = -{ - BUTTON_UP, - BUTTON_DOWN, - BUTTON_LEFT, - BUTTON_RIGHT, - BUTTON_A, - BUTTON_B, - BUTTON_L, - BUTTON_R, - BUTTON_START, - BUTTON_SELECT, - BUTTON_NONE, - BUTTON_NONE, - BUTTON_NONE, - BUTTON_NONE -}; - -gui_action_type get_gui_input_fs_hold(u32 button_id) -{ - gui_action_type new_button = get_gui_input(); - if((last_buttons & button_psp_mask_to_config[button_id]) == 0) - return CURSOR_BACK; - - return new_button; -} - -u32 rapidfire_flag = 1; - -u32 update_input() -{ - SceCtrlData ctrl_data; - u32 buttons; - u32 non_repeat_buttons; - u32 button_id; - u32 i; - u32 new_key = 0; - u32 analog_sensitivity = 92 - (analog_sensitivity_level * 4); - u32 inv_analog_sensitivity = 256 - analog_sensitivity; - - sceCtrlPeekBufferPositive(&ctrl_data, 1); - - buttons = ctrl_data.Buttons; - - if(global_enable_analog) - { - if(ctrl_data.Lx < analog_sensitivity) - buttons |= PSP_CTRL_ANALOG_LEFT; - - if(ctrl_data.Lx > inv_analog_sensitivity) - buttons |= PSP_CTRL_ANALOG_RIGHT; - - if(ctrl_data.Ly < analog_sensitivity) - buttons |= PSP_CTRL_ANALOG_UP; - - if(ctrl_data.Ly > inv_analog_sensitivity) - buttons |= PSP_CTRL_ANALOG_DOWN; - } - - non_repeat_buttons = (last_buttons ^ buttons) & buttons; - last_buttons = buttons; - - for(i = 0; i < 16; i++) - { - if(non_repeat_buttons & button_psp_mask_to_config[i]) - button_id = gamepad_config_map[i]; - else - button_id = BUTTON_ID_NONE; - - switch(button_id) - { - case BUTTON_ID_MENU: - { - u16 *screen_copy = copy_screen(); - u32 ret_val = menu(screen_copy); - free(screen_copy); - - return ret_val; - } - - case BUTTON_ID_LOADSTATE: - { - u8 current_savestate_filename[512]; - get_savestate_filename_noshot(savestate_slot, - current_savestate_filename); - load_state(current_savestate_filename); - return 1; - } - - case BUTTON_ID_SAVESTATE: - { - u8 current_savestate_filename[512]; - u16 *current_screen = copy_screen(); - get_savestate_filename_noshot(savestate_slot, - current_savestate_filename); - save_state(current_savestate_filename, current_screen); - free(current_screen); - return 0; - } - - case BUTTON_ID_FASTFORWARD: - //print_string("FASTFORWARD", 0xFFFF, 0x0000, 0, 50); - synchronize_flag ^= 1; - return 0; - } - - if(buttons & button_psp_mask_to_config[i]) - { - button_id = gamepad_config_map[i]; - if(button_id < BUTTON_ID_MENU) - { - new_key |= button_id_to_gba_mask[button_id]; - } - else - - if((button_id >= BUTTON_ID_RAPIDFIRE_A) && - (button_id <= BUTTON_ID_RAPIDFIRE_L)) - { - rapidfire_flag ^= 1; - if(rapidfire_flag) - { - new_key |= button_id_to_gba_mask[button_id - - BUTTON_ID_RAPIDFIRE_A + BUTTON_ID_A]; - } - else - { - new_key &= ~button_id_to_gba_mask[button_id - - BUTTON_ID_RAPIDFIRE_A + BUTTON_ID_A]; - } - } - } - } - - if((new_key | key) != key) - trigger_key(new_key); - - key = new_key; - - io_registers[REG_P1] = (~key) & 0x3FF; - - return 0; -} - -void init_input() -{ - sceCtrlSetSamplingCycle(0); - sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); -} - -#elif defined(__LIBRETRO__) - static retro_input_state_t input_state_cb; void retro_set_input_state(retro_input_state_t cb) { input_state_cb = cb; } @@ -369,270 +88,6 @@ u32 update_input(void) return 0; } -#elif defined(PC_BUILD) - -u32 key_map(SDLKey key_sym) -{ - switch(key_sym) - { - case SDLK_LSHIFT: - return BUTTON_L; - - case SDLK_x: - return BUTTON_R; - - case SDLK_DOWN: - return BUTTON_DOWN; - - case SDLK_UP: - return BUTTON_UP; - - case SDLK_LEFT: - return BUTTON_LEFT; - - case SDLK_RIGHT: - return BUTTON_RIGHT; - - case SDLK_RETURN: - return BUTTON_START; - - case SDLK_RSHIFT: - return BUTTON_SELECT; - - case SDLK_LCTRL: - return BUTTON_B; - - case SDLK_LALT: - return BUTTON_A; - - default: - return BUTTON_NONE; - } -} - -u32 joy_map(u32 button) -{ - switch(button) - { - case 4: - return BUTTON_L; - - case 5: - return BUTTON_R; - - case 2: - return BUTTON_START; - - case 3: - return BUTTON_SELECT; - - case 1: - return BUTTON_B; - - case 0: - return BUTTON_A; - - default: - return BUTTON_NONE; - } -} - -gui_action_type get_gui_input() -{ - SDL_Event event; - gui_action_type gui_action = CURSOR_NONE; - - delay_us(30000); - - while(SDL_PollEvent(&event)) - { - switch(event.type) - { - case SDL_QUIT: - quit(); - - case SDL_KEYDOWN: - { - switch(event.key.keysym.sym) - { - case SDLK_ESCAPE: - gui_action = CURSOR_EXIT; - break; - - case SDLK_DOWN: - gui_action = CURSOR_DOWN; - break; - - case SDLK_UP: - gui_action = CURSOR_UP; - break; - - case SDLK_LEFT: - gui_action = CURSOR_LEFT; - break; - - case SDLK_RIGHT: - gui_action = CURSOR_RIGHT; - break; - - case SDLK_RETURN: - gui_action = CURSOR_SELECT; - break; - - case SDLK_BACKSPACE: - gui_action = CURSOR_BACK; - break; - default: - break; - } - } - break; - default: - break; - } - } - return gui_action; -} - -u32 update_input() -{ - SDL_Event event; - - while(SDL_PollEvent(&event)) - { - switch(event.type) - { - case SDL_QUIT: - quit(); - - case SDL_KEYDOWN: - { - if(event.key.keysym.sym == SDLK_ESCAPE) - { - quit(); - } -#ifdef PC_BUILD - if(event.key.keysym.sym == SDLK_BACKSPACE) -#else - if(event.key.keysym.sym == SDLK_F10) -#endif - { - u16 *screen_copy = copy_screen(); - u32 ret_val = menu(screen_copy); - free(screen_copy); - - return ret_val; - } - else -#ifdef PC_BUILD - if(event.key.keysym.sym == SDLK_F1) - { - debug_on(); - } - else - - if(event.key.keysym.sym == SDLK_F2) - { - FILE *fp = fopen("palette_ram.bin", "wb"); - printf("writing palette RAM\n"); - fwrite(palette_ram, 1024, 1, fp); - fclose(fp); - printf("writing palette VRAM\n"); - fp = fopen("vram.bin", "wb"); - fwrite(vram, 1024 * 96, 1, fp); - fclose(fp); - printf("writing palette OAM RAM\n"); - fp = fopen("oam_ram.bin", "wb"); - fwrite(oam_ram, 1024, 1, fp); - fclose(fp); - printf("writing palette I/O registers\n"); - fp = fopen("io_registers.bin", "wb"); - fwrite(io_registers, 1024, 1, fp); - fclose(fp); - } - else - - if(event.key.keysym.sym == SDLK_F3) - { - dump_translation_cache(); - } - else -#endif - if(event.key.keysym.sym == SDLK_F5) - { - char current_savestate_filename[512]; - u16 *current_screen = copy_screen(); - get_savestate_filename_noshot(savestate_slot, - current_savestate_filename); - save_state(current_savestate_filename, current_screen); - free(current_screen); - } - else - - if(event.key.keysym.sym == SDLK_F7) - { - char current_savestate_filename[512]; - get_savestate_filename_noshot(savestate_slot, - current_savestate_filename); - load_state(current_savestate_filename); - debug_on(); - return 1; - } - else - - if(event.key.keysym.sym == SDLK_BACKQUOTE) - { - synchronize_flag ^= 1; - } - else - { - key |= key_map(event.key.keysym.sym); - trigger_key(key); - } - - break; - } - - case SDL_KEYUP: - { - key &= ~(key_map(event.key.keysym.sym)); - break; - } - - case SDL_JOYBUTTONDOWN: - { - key |= joy_map(event.jbutton.button); - trigger_key(key); - break; - } - - case SDL_JOYBUTTONUP: - { - key &= ~(joy_map(event.jbutton.button)); - break; - } - } - } - - io_registers[REG_P1] = (~key) & 0x3FF; - - return 0; -} - -void init_input() -{ - u32 joystick_count = SDL_NumJoysticks(); - - if(joystick_count > 0) - { - SDL_JoystickOpen(0); - SDL_JoystickEventState(SDL_ENABLE); - } -} - -#endif - - #define input_savestate_builder(type) \ void input_##type##_savestate(file_tag_type savestate_file) \ { \ @@ -82,7 +82,6 @@ gui_action_type get_gui_input_fs_hold(u32 button_id); void input_write_mem_savestate(file_tag_type savestate_file); void input_read_savestate(file_tag_type savestate_file); -#ifdef __LIBRETRO__ #include "libretro.h" typedef struct @@ -102,11 +101,9 @@ static const map btn_map[] = { { RETRO_DEVICE_ID_JOYPAD_B, BUTTON_B }, { RETRO_DEVICE_ID_JOYPAD_A, BUTTON_A } }; -#endif extern u32 gamepad_config_map[]; extern u32 global_enable_analog; extern u32 analog_sensitivity_level; #endif - |