static const struct retro_variable vars[] = {
{ "pcsx_rearmed_frameskip", "Frameskip; 0|1|2|3" },
{ "pcsx_rearmed_region", "Region; Auto|NTSC|PAL" },
- { "pcsx_rearmed_pad1type", "Pad 1 Type; standard|analog" },
- { "pcsx_rearmed_pad2type", "Pad 2 Type; standard|analog" },
+ { "pcsx_rearmed_pad1type", "Pad 1 Type; standard|analog|negcon" },
+ { "pcsx_rearmed_pad2type", "Pad 2 Type; standard|analog|negcon" },
#ifndef DRC_DISABLE
{ "pcsx_rearmed_drc", "Dynamic recompiler; enabled|disabled" },
#endif
in_type1 = PSE_PAD_TYPE_STANDARD;
if (strcmp(var.value, "analog") == 0)
in_type1 = PSE_PAD_TYPE_ANALOGPAD;
+ if (strcmp(var.value, "negcon") == 0)
+ in_type1 = PSE_PAD_TYPE_NEGCON;
}
var.value = NULL;
in_type2 = PSE_PAD_TYPE_STANDARD;
if (strcmp(var.value, "analog") == 0)
in_type2 = PSE_PAD_TYPE_ANALOGPAD;
+ if (strcmp(var.value, "negcon") == 0)
+ in_type2 = PSE_PAD_TYPE_NEGCON;
+
}
#ifdef __ARM_NEON__
void retro_run(void)
{
- int i;
+ int i, val;
input_poll_cb();
if (input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, i))
in_keystate |= retro_psx_map[i];
+
if (in_type1 == PSE_PAD_TYPE_ANALOGPAD)
{
in_a1[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_LEFT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128;
in_a4[1] = (input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 256) + 128;
}
+
+ if (in_type1 == PSE_PAD_TYPE_NEGCON)
+ {
+ /* left brake */
+ if(input_state_cb(0, RETRO_DEVICE_JOYPAD, 0, 12))
+ in_a1[1] = 255;
+ else
+ in_a1[1] = 0;
+
+ /* steer */
+ in_a2[0] = (input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128;
+
+ /* thrust and fire */
+ val = ((input_state_cb(0, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 127));
+ if(val < -2) {
+ in_a1[0] = 256 - val;
+ }
+ if (val > 2) {
+ in_a2[1] = val;
+ }
+ if(val >= -2 && val <= 2)
+ {
+ in_a2[1] = 0;
+ in_a1[0] = 0;
+ }
+ }
+
+ if (in_type2 == PSE_PAD_TYPE_NEGCON)
+ {
+ /* left brake */
+ if(input_state_cb(1, RETRO_DEVICE_JOYPAD, 0, 12))
+ in_a3[1] = 255;
+ else
+ in_a3[1] = 0;
+
+ /* steer */
+ in_a4[0] = (input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_X) / 256) + 128;
+
+ /* thrust and fire */
+ val = ((input_state_cb(1, RETRO_DEVICE_ANALOG, RETRO_DEVICE_INDEX_ANALOG_RIGHT, RETRO_DEVICE_ID_ANALOG_Y) / 127));
+ if(val < -2) {
+ in_a3[0] = 256 - val;
+ }
+ if (val > 2) {
+ in_a4[1] = val;
+ }
+ if(val >= -2 && val <= 2)
+ {
+ in_a4[1] = 0;
+ in_a3[0] = 0;
+ }
+ }
+
+
stop = 0;
psxCpu->Execute();
return true;
}
-#if 1
+#ifndef VITA
#include <sys/types.h>
#include <dirent.h>
psxUnmapHook = pl_3ds_munmap;
#endif
ret = emu_core_preinit();
+#ifdef _3DS
+ /* emu_core_preinit sets the cpu to dynarec */
+ if(!ctr_svchack_init_success)
+ Config.Cpu = CPU_INTERPRETER;
+#endif
ret |= emu_core_init();
if (ret != 0) {
SysPrintf("PCSX init failed.\n");
exit(1);
}
-#if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L)
+#ifdef _3DS
+ vout_buf = linearMemAlign(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2, 0x80);
+#elif defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200112L) && !defined(VITA)
posix_memalign(&vout_buf, 16, VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2);
#else
vout_buf = malloc(VOUT_MAX_WIDTH * VOUT_MAX_HEIGHT * 2);
void retro_deinit(void)
{
SysClose();
+#ifdef _3DS
+ linearFree(vout_buf);
+#else
free(vout_buf);
+#endif
vout_buf = NULL;
}
+
+#ifdef VITA
+#include <psp2/kernel/threadmgr.h>
+int usleep (unsigned long us)
+{
+ sceKernelDelayThread(us);
+}
+#endif