From 25908c7d8cbd07bb22364d8f2578716f02ee9b03 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 13 Jan 2013 20:58:52 +0100 Subject: [PATCH] (Xenon) Fixes/cleanups (remnants of old SSNES eradicated) --- Makefile.xenon | 2 +- driver_funcs.h | 5 +++ xenon/xenon360_input.c | 91 +++++++++++++++--------------------------- 3 files changed, 38 insertions(+), 60 deletions(-) diff --git a/Makefile.xenon b/Makefile.xenon index b1b2c9dcac1..fb48df7f331 100644 --- a/Makefile.xenon +++ b/Makefile.xenon @@ -22,7 +22,7 @@ OBJ = console/griffin/griffin.o LIBS = -lretro_xenon360 -lxenon -lm -lc DEFINES = -std=gnu99 -DPACKAGE_VERSION=\"0.9.8-beta3\" -DRARCH_CONSOLE -DHAVE_THREAD -DHAVE_GETOPT_LONG=1 -DHAVE_GRIFFIN -Dmain=rarch_main -DEFINES += -maltivec -mhard-float -m32 -mpowerpc64 -mcpu=cell -mtune=cell -fno-pic -g -Wall -DXENON $(INCDIRS) +DEFINES += -maltivec -mhard-float -m32 -mpowerpc64 -mcpu=cell -mtune=cell -fno-pic -g -Wall -DXENON $(INCDIRS) -Wno-char-subscripts DEFINES += -u read -u _start -u exc_base ifeq ($(DEBUG), 1) diff --git a/driver_funcs.h b/driver_funcs.h index f363bb10447..b02fc27ccd6 100644 --- a/driver_funcs.h +++ b/driver_funcs.h @@ -113,6 +113,9 @@ static inline bool input_key_pressed_func(int key) #elif defined(_XBOX) && (defined(HAVE_D3D8) || defined(HAVE_D3D9)) /* D3D */ #define MAKENAME_VIDEO(A) CONCAT2(xdk_d3d, A) +#elif defined(XENON) /* XENON */ +#define MAKENAME_VIDEO(A) CONCAT2(xenon360, A) + #define video_set_aspect_ratio_func(aspectratio_idx) gfx_ctx_set_aspect_ratio(driver.video_data, aspectratio_idx) #define gfx_ctx_window_has_focus() (true) @@ -163,6 +166,8 @@ static inline bool input_key_pressed_func(int key) #define MAKENAME_INPUT(A) CONCAT2(ps3, A) #elif defined(ANDROID) /* ANDROID */ #define MAKENAME_INPUT(A) CONCAT2(android, A) +#elif defined(XENON) /* XENON */ +#define MAKENAME_INPUT(A) CONCAT2(xenon360, A) #else #define MAKENAME_INPUT(A) CONCAT2(nullinput, A) #endif diff --git a/xenon/xenon360_input.c b/xenon/xenon360_input.c index 121524a91c3..ca3f2bd688c 100644 --- a/xenon/xenon360_input.c +++ b/xenon/xenon360_input.c @@ -24,17 +24,33 @@ #include #include -#define MAX_PADS +#define MAX_PADS 4 -static struct controller_data_s pad[MAX_PADS]; +static uint64_t state[MAX_PADS]; static void xenon360_input_poll(void *data) { (void)data; for (unsigned i = 0; i < MAX_PADS; i++) { + struct controller_data_s pad; usb_do_poll(); - get_controller_data(&pad[i], i); + get_controller_data(&pad, i); + + uint64_t *cur_state = &state[i]; + + *cur_state |= pad.b ? RETRO_DEVICE_ID_JOYPAD_A : 0; + *cur_state |= pad.a ? RETRO_DEVICE_ID_JOYPAD_B : 0; + *cur_state |= pad.y ? RETRO_DEVICE_ID_JOYPAD_X : 0; + *cur_state |= pad.x ? RETRO_DEVICE_ID_JOYPAD_Y : 0; + *cur_state |= pad.left ? RETRO_DEVICE_ID_JOYPAD_LEFT : 0; + *cur_state |= pad.right ? RETRO_DEVICE_ID_JOYPAD_RIGHT : 0; + *cur_state |= pad.up ? RETRO_DEVICE_ID_JOYPAD_UP : 0; + *cur_state |= pad.down ? RETRO_DEVICE_ID_JOYPAD_DOWN : 0; + *cur_state |= pad.start ? RETRO_DEVICE_ID_JOYPAD_START : 0; + *cur_state |= pad.back ? RETRO_DEVICE_ID_JOYPAD_SELECT : 0; + *cur_state |= pad.lt ? RETRO_DEVICE_ID_JOYPAD_L : 0; + *cur_state |= pad.rt ? RETRO_DEVICE_ID_JOYPAD_R : 0; } } @@ -43,68 +59,25 @@ static int16_t xenon360_input_state(void *data, const struct retro_keybind **bin unsigned index, unsigned id) { (void)data; - (void)binds; (void)index; + unsigned player = port; + uint64_t button = binds[player][id].joykey; + int16_t retval = 0; - if (device != SNES_DEVICE_JOYPAD) - return 0; - - unsigned player = 0; - if (port == SNES_PORT_2 && device == SNES_DEVICE_MULTITAP) - player = index + 1; - else if (port == SNES_PORT_2) - player = 1; - - bool button; - - // Hardcoded binds. - switch (id) + if(player < MAX_PADS) { - case SNES_DEVICE_ID_JOYPAD_A: - button = pad[player].b; - break; - case SNES_DEVICE_ID_JOYPAD_B: - button = pad[player].a; - break; - case SNES_DEVICE_ID_JOYPAD_X: - button = pad[player].y; - break; - case SNES_DEVICE_ID_JOYPAD_Y: - button = pad[player].x; - break; - case SNES_DEVICE_ID_JOYPAD_LEFT: - button = pad[player].left; - break; - case SNES_DEVICE_ID_JOYPAD_RIGHT: - button = pad[player].right; - break; - case SNES_DEVICE_ID_JOYPAD_UP: - button = pad[player].up; - break; - case SNES_DEVICE_ID_JOYPAD_DOWN: - button = pad[player].down; - break; - case SNES_DEVICE_ID_JOYPAD_START: - button = pad[player].start; - break; - case SNES_DEVICE_ID_JOYPAD_SELECT: - button = pad[player].select; - break; - case SNES_DEVICE_ID_JOYPAD_L: - button = pad[player].lt; - break; - case SNES_DEVICE_ID_JOYPAD_R: - button = pad[player].rt; - break; - default: - button = false; - break; + switch (device) + { + case RETRO_DEVICE_JOYPAD: + retval = (state[player] & button) ? 1 : 0; + break; + } } - return button; + return retval; } -static void xenon360_free_input(void *data) +static void xenon360_input_free_input(void *data) { (void)data; } @@ -138,7 +111,7 @@ const input_driver_t input_xenon360 = { .poll = xenon360_input_poll, .input_state = xenon360_input_state, .key_pressed = xenon360_key_pressed, - .free = xenon360_free_input, + .free = xenon360_input_free_input, .set_default_keybind_lut = xenon360_input_set_default_keybind_lut, .set_analog_dpad_mapping = xenon360_input_set_analog_dpad_mapping, .max_pads = MAX_PADS,