diff --git a/Makefile.ctr b/Makefile.ctr index 16dbcb0100..c950478944 100644 --- a/Makefile.ctr +++ b/Makefile.ctr @@ -128,6 +128,7 @@ else OBJS += libretro-common/file/dir_list.o OBJS += libretro-common/file/retro_dirent.o OBJS += libretro-common/file/retro_file.o + OBJS += libretro-common/file/retro_stat.o OBJS += dir_list_special.o OBJS += libretro-common/string/string_list.o OBJS += libretro-common/string/stdstring.o diff --git a/frontend/drivers/platform_ctr.c b/frontend/drivers/platform_ctr.c index a2412b4243..277d146acc 100644 --- a/frontend/drivers/platform_ctr.c +++ b/frontend/drivers/platform_ctr.c @@ -16,6 +16,7 @@ #include #include #include +#include #include diff --git a/gfx/drivers/ctr_gfx.c b/gfx/drivers/ctr_gfx.c index a933536f40..7af86be2e1 100644 --- a/gfx/drivers/ctr_gfx.c +++ b/gfx/drivers/ctr_gfx.c @@ -86,6 +86,7 @@ typedef struct ctr_video bool keep_aspect; bool should_resize; + void* empty_framebuffer; } ctr_video_t; static INLINE void ctr_set_scale_vector(ctr_scale_vector_t* vec, @@ -341,6 +342,9 @@ static void* ctr_init(const video_info_t* video, ctr->should_resize = true; ctr->smooth = true; + ctr->empty_framebuffer = linearAlloc(320 * 240 * 2); + memset(ctr->empty_framebuffer, 0, 320 * 240 * 2); + return ctr; } @@ -357,6 +361,8 @@ static bool ctr_frame(void* data, const void* frame, static int total_frames = 0; static int frames = 0; static struct retro_perf_counter ctrframe_f = {0}; + uint32_t state_tmp; + touchPosition state_tmp_touch; extern bool select_pressed; @@ -378,6 +384,17 @@ static bool ctr_frame(void* data, const void* frame, return true; } + state_tmp = hidKeysDown(); + hidTouchRead(&state_tmp_touch); + if((state_tmp & KEY_TOUCH) && (state_tmp_touch.py < 120)) + { + extern PrintConsole* currentConsole; + if ((u8*)currentConsole->frameBuffer == gfxBottomFramebuffers[0]) + gfxBottomFramebuffers[0] = (u8*)ctr->empty_framebuffer; + else + gfxBottomFramebuffers[0] = (u8*)currentConsole->frameBuffer; + } + svcWaitSynchronization(gspEvents[GSPEVENT_P3D], 20000000); svcClearEvent(gspEvents[GSPEVENT_P3D]); svcWaitSynchronization(gspEvents[GSPEVENT_PPF], 20000000); @@ -550,6 +567,7 @@ static void ctr_free(void* data) linearFree(ctr->menu.texture_linear); linearFree(ctr->menu.texture_swizzled); linearFree(ctr->menu.frame_coords); + linearFree(ctr->empty_framebuffer); linearFree(ctr); // gfxExit(); } diff --git a/input/drivers_joypad/ctr_joypad.c b/input/drivers_joypad/ctr_joypad.c index bd51a61769..498b2ca752 100644 --- a/input/drivers_joypad/ctr_joypad.c +++ b/input/drivers_joypad/ctr_joypad.c @@ -121,15 +121,16 @@ static int16_t ctr_joypad_axis(unsigned port_num, uint32_t joyaxis) static void ctr_joypad_poll(void) { - int32_t ret; unsigned i, j; uint32_t state_tmp; circlePosition state_tmp_analog; + touchPosition state_tmp_touch; hidScanInput(); state_tmp = hidKeysHeld(); hidCircleRead(&state_tmp_analog); + hidTouchRead(&state_tmp_touch); analog_state[0][0][0] = analog_state[0][0][1] = analog_state[0][1][0] = analog_state[0][1][1] = 0; @@ -146,9 +147,15 @@ static void ctr_joypad_poll(void) pad_state |= (state_tmp & KEY_A) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_A) : 0; pad_state |= (state_tmp & KEY_R) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R) : 0; pad_state |= (state_tmp & KEY_L) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L) : 0; + pad_state |= (state_tmp & KEY_ZR) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_R2) : 0; + pad_state |= (state_tmp & KEY_ZL) ? (UINT64_C(1) << RETRO_DEVICE_ID_JOYPAD_L2) : 0; - analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = (state_tmp_analog.dx * 200); - analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -(state_tmp_analog.dy * 200); + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_X] = (state_tmp_analog.dx * 200); + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_LEFT] [RETRO_DEVICE_ID_ANALOG_Y] = -(state_tmp_analog.dy * 200); + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_X] = (state_tmp & KEY_CSTICK_RIGHT)? 0x7fff: + (state_tmp & KEY_CSTICK_LEFT)? -0x7fff: 0; + analog_state[0][RETRO_DEVICE_INDEX_ANALOG_RIGHT] [RETRO_DEVICE_ID_ANALOG_Y] = (state_tmp & KEY_CSTICK_DOWN)? 0x7fff: + (state_tmp & KEY_CSTICK_UP)? -0x7fff: 0; for (i = 0; i < 2; i++) for (j = 0; j < 2; j++) @@ -157,7 +164,7 @@ static void ctr_joypad_poll(void) BIT64_CLEAR(lifecycle_state, RARCH_MENU_TOGGLE); - if(state_tmp & KEY_TOUCH) + if((state_tmp & KEY_TOUCH) && (state_tmp_touch.py > 120)) BIT64_SET(lifecycle_state, RARCH_MENU_TOGGLE); /* panic button */