X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=frontend%2Flibretro.c;h=a91c5c175da45d55b1f3df46fad57a78b0d4e793;hb=ba5205015c1db5866b6979537c594d8e81f90500;hp=6e45e2f2e07e021bfd89f595ebc9e5551f506dad;hpb=5c00ea32a0eab812299b08acd14c25bf6ba4ca7a;p=pcsx_rearmed.git diff --git a/frontend/libretro.c b/frontend/libretro.c index 6e45e2f2..a91c5c17 100644 --- a/frontend/libretro.c +++ b/frontend/libretro.c @@ -59,18 +59,6 @@ #define INTERNAL_FPS_SAMPLE_PERIOD 64 -#ifdef DRC_DISABLE -int stop; -u32 next_interupt; -u32 event_cycles[PSXINT_COUNT]; -int cycle_multiplier; -int new_dynarec_hacks; - -void new_dyna_before_save(void) {} -void new_dyna_after_save(void) {} -void new_dyna_freeze(void *f, int i) {} -#endif - //hack to prevent retroarch freezing when reseting in the menu but not while running with the hot key static int rebootemu = 0; @@ -83,6 +71,8 @@ static retro_set_rumble_state_t rumble_cb; static struct retro_log_callback logging; static retro_log_printf_t log_cb; +static unsigned msg_interface_version = 0; + static void *vout_buf; static void *vout_buf_ptr; static int vout_width, vout_height; @@ -122,6 +112,7 @@ int in_type[8] = { int in_analog_left[8][2] = { { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 } }; int in_analog_right[8][2] = { { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 }, { 127, 127 } }; unsigned short in_keystate[PORTS_NUMBER]; +int in_mouse[8][2]; int multitap1 = 0; int multitap2 = 0; int in_enable_vibration = 1; @@ -605,6 +596,8 @@ static void update_controller_port_variable(unsigned port) in_type[port] = PSE_PAD_TYPE_NEGCON; else if (strcmp(var.value, "guncon") == 0) in_type[port] = PSE_PAD_TYPE_GUNCON; + else if (strcmp(var.value, "mouse") == 0) + in_type[port] = PSE_PAD_TYPE_MOUSE; else if (strcmp(var.value, "none") == 0) in_type[port] = PSE_PAD_TYPE_NONE; // else 'default' case, do nothing @@ -2438,6 +2431,39 @@ static void update_input(void) case PSE_PAD_TYPE_NEGCON: update_input_negcon(i, ret); break; + case PSE_PAD_TYPE_MOUSE: + { + /* mouse x/y movement, range -128 to +127 */ + float accum_x = 0, accum_y = 0; + + float x = input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_X); + float y = input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_Y); + + accum_x += x; + accum_y += y; + + if (accum_x > 127) + accum_x = 127; + else if (accum_x < -128) + accum_x = -128; + + if (accum_y > 127) + accum_y = 127; + else if (accum_y < -128) + accum_y = -128; + + in_mouse[i][0] = (int)accum_x; + in_mouse[i][1] = (int)accum_y; + + /* mouse button state */ + if (input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_LEFT)) + in_keystate[i] |= 1 << 11; + + if (input_state_cb(i, RETRO_DEVICE_MOUSE, 0, RETRO_DEVICE_ID_MOUSE_RIGHT)) + in_keystate[i] |= 1 << 10; + + break; + } default: // Query digital inputs for (j = 0; j < RETRO_PSX_MAP_LEN; j++) @@ -2467,10 +2493,6 @@ static void print_internal_fps(void) unsigned internal_fps = pl_rearmed_cbs.flip_cnt * (is_pal_mode ? 50 : 60) / INTERNAL_FPS_SAMPLE_PERIOD; char str[64]; const char *strc = (const char *)str; - struct retro_message msg = { - strc, - 180 - }; str[0] = '\0'; @@ -2478,7 +2500,27 @@ static void print_internal_fps(void) pl_rearmed_cbs.flip_cnt = 0; - environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &msg); + if (msg_interface_version >= 1) + { + struct retro_message_ext msg = { + strc, + 3000, + 1, + RETRO_LOG_INFO, + RETRO_MESSAGE_TARGET_OSD, + RETRO_MESSAGE_TYPE_STATUS, + -1 + }; + environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE_EXT, &msg); + } + else + { + struct retro_message msg = { + strc, + 180 + }; + environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &msg); + } } } else @@ -2679,12 +2721,31 @@ static void loadPSXBios(void) if (useHLE || !found_bios) { + const char *msg_str = "No PlayStation BIOS file found - add for better compatibility"; + SysPrintf("no BIOS files found.\n"); - struct retro_message msg = { - "No PlayStation BIOS file found - add for better compatibility", - 180 - }; - environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, (void *)&msg); + + if (msg_interface_version >= 1) + { + struct retro_message_ext msg = { + msg_str, + 3000, + 3, + RETRO_LOG_WARN, + RETRO_MESSAGE_TARGET_ALL, + RETRO_MESSAGE_TYPE_NOTIFICATION, + -1 + }; + environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE_EXT, &msg); + } + else + { + struct retro_message msg = { + msg_str, + 180 + }; + environ_cb(RETRO_ENVIRONMENT_SET_MESSAGE, &msg); + } } } @@ -2694,6 +2755,9 @@ void retro_init(void) struct retro_rumble_interface rumble; int ret; + msg_interface_version = 0; + environ_cb(RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION, &msg_interface_version); + #ifdef __MACH__ // magic sauce to make the dynarec work on iOS syscall(SYS_ptrace, 0 /*PTRACE_TRACEME*/, 0, 0, 0);