diff --git a/Makefile.griffin b/Makefile.griffin
index 3937080e4f..a51b4f20cd 100644
--- a/Makefile.griffin
+++ b/Makefile.griffin
@@ -148,7 +148,7 @@ else ifeq ($(platform), vita)
LIBS += -lretro_vita \
-lSceKernel_stub -lSceDisplay_stub -lSceGxm_stub -lSceNet_stub \
-lSceSysmodule_stub -lSceCtrl_stub -lSceAudio_stub \
- -lSceRtc_stub -lz -lm -lc
+ -lScePower_stub -lSceRtc_stub -lz -lm -lc
PLATOBJS += audio/audio_utils_neon.o audio/drivers_resampler/sinc_neon.o \
audio/drivers_resampler/cc_resampler_neon.o
diff --git a/frontend/drivers/platform_psp.c b/frontend/drivers/platform_psp.c
index 09de71f359..51efd2fce1 100644
--- a/frontend/drivers/platform_psp.c
+++ b/frontend/drivers/platform_psp.c
@@ -14,16 +14,11 @@
* If not, see .
*/
-#ifdef VITA
-#include
-#include
-#else
#include
#include
#include
#include
#include
-#endif
#include
#include
@@ -38,15 +33,12 @@
#include "../../defines/psp_defines.h"
#include "../../general.h"
-#if defined(HAVE_KERNEL_PRX) || (defined(IS_SALAMANDER) && !defined(VITA))
+#if defined(HAVE_KERNEL_PRX) || defined(IS_SALAMANDER)
#include "../../psp1/kernel_functions.h"
#endif
-#ifdef VITA
-PSP2_MODULE_INFO(0, 0, "RetroArch");
-#else
+
PSP_MODULE_INFO("RetroArch", 0, 1, 1);
-#endif
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER|THREAD_ATTR_VFPU);
#ifdef BIG_STACK
PSP_MAIN_THREAD_STACK_SIZE_KB(4*1024);
@@ -187,23 +179,19 @@ static void frontend_psp_init(void *data)
#ifndef IS_SALAMANDER
(void)data;
-#ifndef VITA
/* TODO/FIXME - Err on the safe side for now and
* assume these aren't there with the PSP2/Vita SDKs.
*/
/* initialize debug screen */
- pspDebugScreenInit();
+ pspDebugScreenInit();
pspDebugScreenClear();
-#endif
-
+
setup_callback();
-
-#ifndef VITA
+
pspFpuSetEnable(0); /* disable FPU exceptions */
scePowerSetClockFrequency(333,333,166);
#endif
-#endif
#if defined(HAVE_KERNEL_PRX) || defined(IS_SALAMANDER)
pspSdkLoadStartModule("kernel_functions.prx", PSP_MEMORY_PARTITION_KERNEL);
@@ -264,16 +252,13 @@ static int frontend_psp_get_rating(void)
static enum frontend_powerstate frontend_psp_get_powerstate(int *seconds, int *percent)
{
enum frontend_powerstate ret = FRONTEND_POWERSTATE_NONE;
-#ifndef VITA
int battery = scePowerIsBatteryExist(); /* this function does not exist on Vita? */
-#endif
int plugged = scePowerIsPowerOnline();
int charging = scePowerIsBatteryCharging();
*percent = scePowerGetBatteryLifePercent();
*seconds = scePowerGetBatteryLifeTime() * 60;
-#ifndef VITA
if (!battery)
{
ret = FRONTEND_POWERSTATE_NO_SOURCE;
@@ -281,7 +266,6 @@ static enum frontend_powerstate frontend_psp_get_powerstate(int *seconds, int *p
*percent = -1;
}
else
-#endif
if (charging)
ret = FRONTEND_POWERSTATE_CHARGING;
else if (plugged)
@@ -302,17 +286,12 @@ static int frontend_psp_parse_drive_list(void *data)
#ifndef IS_SALAMANDER
file_list_t *list = (file_list_t*)data;
-#ifdef VITA
- menu_list_push(list,
- "cache0:/", "", MENU_FILE_DIRECTORY, 0, 0);
-#else
menu_list_push(list,
"ms0:/", "", MENU_FILE_DIRECTORY, 0, 0);
menu_list_push(list,
"ef0:/", "", MENU_FILE_DIRECTORY, 0, 0);
menu_list_push(list,
"host0:/", "", MENU_FILE_DIRECTORY, 0, 0);
-#endif
#endif
return 0;
diff --git a/frontend/drivers/platform_vita.c b/frontend/drivers/platform_vita.c
new file mode 100644
index 0000000000..424e159e27
--- /dev/null
+++ b/frontend/drivers/platform_vita.c
@@ -0,0 +1,247 @@
+/* RetroArch - A frontend for libretro.
+ * Copyright (C) 2010-2014 - Hans-Kristian Arntzen
+ * Copyright (C) 2011-2015 - Daniel De Matteis
+ *
+ * RetroArch is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Found-
+ * ation, either version 3 of the License, or (at your option) any later version.
+ *
+ * RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along with RetroArch.
+ * If not, see .
+ */
+
+#include
+#include
+
+#include
+#include
+#include
+#include
+
+#include
+#ifndef IS_SALAMANDER
+#include
+#endif
+
+#include "../../defines/psp_defines.h"
+#include "../../general.h"
+
+PSP2_MODULE_INFO(0, 0, "RetroArch");
+
+char eboot_path[512];
+
+static bool exit_spawn = false;
+static bool exitspawn_start_game = false;
+
+#ifdef IS_SALAMANDER
+#include "../../file_ext.h"
+#endif
+
+static void frontend_vita_get_environment_settings(int *argc, char *argv[],
+ void *args, void *params_data)
+{
+ (void)args;
+#ifndef IS_SALAMANDER
+#if defined(HAVE_LOGGER)
+ logger_init();
+#elif defined(HAVE_FILE_LOGGER)
+ global_t *global = global_get_ptr();
+ global->log_file = fopen("cache0:/retroarch-log.txt", "w");
+#endif
+#endif
+
+ strlcpy(eboot_path, argv[0], sizeof(eboot_path));
+
+ fill_pathname_basedir(g_defaults.dir.port, argv[0], sizeof(g_defaults.dir.port));
+ RARCH_LOG("port dir: [%s]\n", g_defaults.dir.port);
+
+ fill_pathname_join(g_defaults.dir.assets, g_defaults.dir.port,
+ "media", sizeof(g_defaults.dir.assets));
+ fill_pathname_join(g_defaults.dir.core, g_defaults.dir.port,
+ "cores", sizeof(g_defaults.dir.core));
+ fill_pathname_join(g_defaults.dir.core_info, g_defaults.dir.port,
+ "cores", sizeof(g_defaults.dir.core_info));
+ fill_pathname_join(g_defaults.dir.savestate, g_defaults.dir.core,
+ "savestates", sizeof(g_defaults.dir.savestate));
+ fill_pathname_join(g_defaults.dir.sram, g_defaults.dir.core,
+ "savefiles", sizeof(g_defaults.dir.sram));
+ fill_pathname_join(g_defaults.dir.system, g_defaults.dir.core,
+ "system", sizeof(g_defaults.dir.system));
+ fill_pathname_join(g_defaults.dir.playlist, g_defaults.dir.core,
+ "playlists", sizeof(g_defaults.dir.playlist));
+ fill_pathname_join(g_defaults.path.config, g_defaults.dir.port,
+ "retroarch.cfg", sizeof(g_defaults.path.config));
+ fill_pathname_join(g_defaults.dir.cheats, g_defaults.dir.cheats,
+ "cheats", sizeof(g_defaults.dir.cheats));
+ fill_pathname_join(g_defaults.dir.remap, g_defaults.dir.remap,
+ "remaps", sizeof(g_defaults.dir.remap));
+
+#ifndef IS_SALAMANDER
+ if (argv[1] && (argv[1][0] != '\0'))
+ {
+ static char path[PATH_MAX_LENGTH];
+ struct rarch_main_wrap *args = NULL;
+
+ *path = '\0';
+ args = (struct rarch_main_wrap*)params_data;
+
+ if (args)
+ {
+ strlcpy(path, argv[1], sizeof(path));
+
+ args->touched = true;
+ args->no_content = false;
+ args->verbose = false;
+ args->config_path = NULL;
+ args->sram_path = NULL;
+ args->state_path = NULL;
+ args->content_path = path;
+ args->libretro_path = NULL;
+
+ RARCH_LOG("argv[0]: %s\n", argv[0]);
+ RARCH_LOG("argv[1]: %s\n", argv[1]);
+ RARCH_LOG("argv[2]: %s\n", argv[2]);
+
+ RARCH_LOG("Auto-start game %s.\n", argv[1]);
+ }
+ }
+#endif
+}
+
+static void frontend_vita_deinit(void *data)
+{
+ (void)data;
+#ifndef IS_SALAMANDER
+ global_t *global = global_get_ptr();
+ global->verbosity = false;
+
+#ifdef HAVE_FILE_LOGGER
+ if (global->log_file)
+ fclose(global->log_file);
+ global->log_file = NULL;
+#endif
+
+#endif
+}
+
+static void frontend_vita_shutdown(bool unused)
+{
+ (void)unused;
+ sceKernelExitProcess(0);
+}
+
+static void frontend_vita_init(void *data)
+{
+ (void)data;
+}
+
+static void frontend_vita_exec(const char *path, bool should_load_game)
+{
+#if defined(HAVE_KERNEL_PRX) || defined(IS_SALAMANDER)
+ char argp[512] = {0};
+ SceSize args = 0;
+
+ argp[0] = '\0';
+ strlcpy(argp, eboot_path, sizeof(argp));
+ args = strlen(argp) + 1;
+
+#ifndef IS_SALAMANDER
+ global_t *global = global_get_ptr();
+
+ if (should_load_game && global->path.fullpath[0] != '\0')
+ {
+ argp[args] = '\0';
+ strlcat(argp + args, global->path.fullpath, sizeof(argp) - args);
+ args += strlen(argp + args) + 1;
+ }
+#endif
+
+ RARCH_LOG("Attempt to load executable: [%s].\n", path);
+
+ exitspawn_kernel(path, args, argp);
+
+#endif
+}
+
+static void frontend_vita_set_fork(bool exit, bool start_game)
+{
+ exit_spawn = true;
+ exitspawn_start_game = start_game;
+}
+
+static void frontend_vita_exitspawn(char *s, size_t len)
+{
+ bool should_load_game = false;
+#ifndef IS_SALAMANDER
+ should_load_game = exitspawn_start_game;
+
+ if (!exit_spawn)
+ return;
+#endif
+ frontend_vita_exec(s, should_load_game);
+}
+
+static int frontend_vita_get_rating(void)
+{
+ return 4;
+}
+
+static enum frontend_powerstate frontend_vita_get_powerstate(int *seconds, int *percent)
+{
+ enum frontend_powerstate ret = FRONTEND_POWERSTATE_NONE;
+ int battery = 1;
+ int plugged = scePowerIsPowerOnline();
+ int charging = scePowerIsBatteryCharging();
+
+ *percent = scePowerGetBatteryLifePercent();
+ *seconds = scePowerGetBatteryLifeTime() * 60;
+
+ if (charging)
+ ret = FRONTEND_POWERSTATE_CHARGING;
+ else if (plugged)
+ ret = FRONTEND_POWERSTATE_CHARGED;
+ else
+ ret = FRONTEND_POWERSTATE_ON_POWER_SOURCE;
+
+ return ret;
+}
+
+enum frontend_architecture frontend_vita_get_architecture(void)
+{
+ return FRONTEND_ARCH_MIPS;
+}
+
+static int frontend_vita_parse_drive_list(void *data)
+{
+#ifndef IS_SALAMANDER
+ file_list_t *list = (file_list_t*)data;
+
+ menu_list_push(list,
+ "cache0:/", "", MENU_FILE_DIRECTORY, 0, 0);
+#endif
+
+ return 0;
+}
+
+frontend_ctx_driver_t frontend_ctx_vita = {
+ frontend_vita_get_environment_settings,
+ frontend_vita_init,
+ frontend_vita_deinit,
+ frontend_vita_exitspawn,
+ NULL, /* process_args */
+ frontend_vita_exec,
+ frontend_vita_set_fork,
+ frontend_vita_shutdown,
+ NULL, /* get_name */
+ NULL, /* get_os */
+ frontend_vita_get_rating,
+ NULL, /* load_content */
+ frontend_vita_get_architecture,
+ frontend_vita_get_powerstate,
+ frontend_vita_parse_drive_list,
+ "vita",
+};
diff --git a/frontend/frontend_driver.c b/frontend/frontend_driver.c
index 6157f9cae7..bc7829f251 100644
--- a/frontend/frontend_driver.c
+++ b/frontend/frontend_driver.c
@@ -47,6 +47,9 @@ static frontend_ctx_driver_t *frontend_ctx_drivers[] = {
#if defined(PSP)
&frontend_ctx_psp,
#endif
+#if defined(VITA)
+ &frontend_ctx_vita,
+#endif
#if defined(_3DS)
&frontend_ctx_ctr,
#endif
@@ -83,7 +86,7 @@ frontend_ctx_driver_t *frontend_ctx_find_driver(const char *ident)
*
* Finds first suitable driver and initialize.
*
- * Returns: pointer to first suitable driver, otherwise NULL.
+ * Returns: pointer to first suitable driver, otherwise NULL.
**/
frontend_ctx_driver_t *frontend_ctx_init_first(void)
{
diff --git a/frontend/frontend_driver.h b/frontend/frontend_driver.h
index f082a138a6..26814368eb 100644
--- a/frontend/frontend_driver.h
+++ b/frontend/frontend_driver.h
@@ -1,7 +1,7 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2014 - Hans-Kristian Arntzen
* Copyright (C) 2011-2015 - Daniel De Matteis
- *
+ *
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
@@ -84,6 +84,7 @@ extern frontend_ctx_driver_t frontend_ctx_darwin;
extern frontend_ctx_driver_t frontend_ctx_android;
extern frontend_ctx_driver_t frontend_ctx_linux;
extern frontend_ctx_driver_t frontend_ctx_psp;
+extern frontend_ctx_driver_t frontend_ctx_vita;
extern frontend_ctx_driver_t frontend_ctx_ctr;
extern frontend_ctx_driver_t frontend_ctx_win32;
extern frontend_ctx_driver_t frontend_ctx_null;
@@ -105,7 +106,7 @@ frontend_ctx_driver_t *frontend_get_ptr(void);
*
* Finds first suitable driver and initialize.
*
- * Returns: pointer to first suitable driver, otherwise NULL.
+ * Returns: pointer to first suitable driver, otherwise NULL.
**/
frontend_ctx_driver_t *frontend_ctx_init_first(void);
diff --git a/griffin/griffin.c b/griffin/griffin.c
index b98808fa23..952f706120 100644
--- a/griffin/griffin.c
+++ b/griffin/griffin.c
@@ -628,6 +628,8 @@ FRONTEND
#include "../frontend/drivers/platform_xdk.c"
#elif defined(PSP)
#include "../frontend/drivers/platform_psp.c"
+#elif defined(VITA)
+#include "../frontend/drivers/platform_vita.c"
#elif defined(_3DS)
#include "../frontend/drivers/platform_ctr.c"
#elif defined(__QNX__)