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;
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;
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
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++)
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';
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
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);
+ }
}
}
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);