#include "arm_features.h"
#include "revision.h"
+#if defined(__has_builtin)
+#define DO_CPU_CHECKS __has_builtin(__builtin_cpu_init)
+#elif defined(__x86_64__) || defined(__i386__)
+#define DO_CPU_CHECKS 1
+#else
+#define DO_CPU_CHECKS 0
+#endif
+
#ifndef NO_FRONTEND
#include "libpicofe/input.h"
#include "libpicofe/plat.h"
void emu_set_default_config(void)
{
// try to set sane config on which most games work
- Config.Xa = Config.Cdda = Config.Sio =
- Config.icache_emulation = Config.SpuIrq = Config.RCntFix = Config.VSyncWA = 0;
+ Config.Xa = Config.Cdda = 0;
+ Config.icache_emulation = 0;
Config.PsxAuto = 1;
-
- pl_rearmed_cbs.thread_rendering = 0;
+ Config.cycle_multiplier = CYCLE_MULT_DEFAULT;
+ Config.GpuListWalking = -1;
pl_rearmed_cbs.gpu_neon.allow_interlace = 2; // auto
pl_rearmed_cbs.gpu_neon.enhancement_enable =
pl_rearmed_cbs.gpu_neon.enhancement_no_main = 0;
pl_rearmed_cbs.gpu_peops.iUseDither = 0;
pl_rearmed_cbs.gpu_peops.dwActFixes = 1<<7;
- pl_rearmed_cbs.gpu_unai.ilace_force = 0;
- pl_rearmed_cbs.gpu_unai.pixel_skip = 1;
+#if 0
+ pl_rearmed_cbs.gpu_senquack.ilace_force = 0;
+ pl_rearmed_cbs.gpu_senquack.pixel_skip = 0;
+ pl_rearmed_cbs.gpu_senquack.lighting = 1;
+ pl_rearmed_cbs.gpu_senquack.fast_lighting = 0;
+ pl_rearmed_cbs.gpu_senquack.blending = 1;
+ pl_rearmed_cbs.gpu_senquack.dithering = 0;
+#else
pl_rearmed_cbs.gpu_unai.lighting = 1;
- pl_rearmed_cbs.gpu_unai.fast_lighting = 1;
pl_rearmed_cbs.gpu_unai.blending = 1;
- pl_rearmed_cbs.gpu_unai.dithering = 0;
- // old gpu_unai config
+#endif
pl_rearmed_cbs.gpu_unai.abe_hack =
pl_rearmed_cbs.gpu_unai.no_light =
pl_rearmed_cbs.gpu_unai.no_blend = 0;
- pl_rearmed_cbs.gpu_unai.scale_hires = 0;
memset(&pl_rearmed_cbs.gpu_peopsgl, 0, sizeof(pl_rearmed_cbs.gpu_peopsgl));
pl_rearmed_cbs.gpu_peopsgl.iVRamSize = 64;
pl_rearmed_cbs.gpu_peopsgl.iTexGarbageCollection = 1;
spu_config.iXAPitch = 0;
spu_config.iVolume = 768;
spu_config.iTempo = 0;
- spu_config.iUseThread = 1; // no effect if only 1 core is detected
+ // may cause issues, no effect if only 1 core is detected
+ spu_config.iUseThread = 0;
#if defined(HAVE_PRE_ARMV7) && !defined(_3DS) /* XXX GPH hack */
spu_config.iUseReverb = 0;
spu_config.iUseInterpolation = 0;
#endif
#endif
new_dynarec_hacks = 0;
- cycle_multiplier = 200;
in_type[0] = PSE_PAD_TYPE_STANDARD;
in_type[1] = PSE_PAD_TYPE_STANDARD;
}
}
+static void log_wrong_cpu(void)
+{
+#if DO_CPU_CHECKS
+ __builtin_cpu_init();
+ #define CHECK_CPU(name) if (!__builtin_cpu_supports(name)) \
+ SysPrintf("ERROR: compiled for " name ", which is unsupported by the CPU\n")
+#ifdef __SSE2__
+ CHECK_CPU("sse2");
+#endif
+#ifdef __SSSE3__
+ CHECK_CPU("ssse3");
+#endif
+#ifdef __SSE4_1__
+ CHECK_CPU("sse4.1");
+#endif
+#endif // DO_CPU_CHECKS
+}
+
int emu_core_preinit(void)
{
// what is the name of the config file?
#endif
emuLog = stdout;
+ log_wrong_cpu();
+
SetIsoFile(NULL);
memset(&Config, 0, sizeof(Config));
void emu_core_ask_exit(void)
{
- stop = 1;
+ stop++;
g_emu_want_quit = 1;
}
signal(SIGPIPE, SignalExit);
#endif
- GPU_clearDynarec(clearDynarec);
-
ret = CDR_open();
if (ret < 0) { SysMessage(_("Error opening CD-ROM plugin!")); return -1; }
ret = SPU_open();