#include "menu.h"
#include "plat.h"
#include "../libpcsxcore/misc.h"
+#include "../libpcsxcore/cheat.h"
#include "../libpcsxcore/new_dynarec/new_dynarec.h"
#include "../plugins/cdrcimg/cdrcimg.h"
#include "common/plat.h"
extern int iUseReverb;
extern int iUseInterpolation;
extern int iXAPitch;
-extern int iSPUIRQWait;
-extern int iUseTimer;
extern int iVolume;
int ready_to_go;
strcpy(Config.Pad2, "builtin_pad");
strcpy(Config.Net, "Disabled");
#if defined(__arm__) && !defined(__ARM_ARCH_7A__) /* XXX */
- strcpy(Config.Gpu, "gpuPCSX4ALL.so");
+ strcpy(Config.Gpu, "gpu_unai.so");
#endif
snprintf(Config.PatchesDir, sizeof(Config.PatchesDir), "." PATCHES_DIR);
Config.CdrReschedule = 0;
Config.PsxAuto = 1;
+ pl_rearmed_cbs.gpu_neon.allow_interlace = 2; // auto
pl_rearmed_cbs.gpu_peops.iUseDither = 0;
pl_rearmed_cbs.gpu_peops.dwActFixes = 1<<7;
pl_rearmed_cbs.gpu_unai.abe_hack =
pl_rearmed_cbs.gpu_unai.no_light =
pl_rearmed_cbs.gpu_unai.no_blend = 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;
iUseReverb = 2;
iUseInterpolation = 1;
iXAPitch = 0;
- iSPUIRQWait = 1;
- iUseTimer = 2;
iVolume = 768;
#ifndef __ARM_ARCH_7A__ /* XXX */
iUseReverb = 0;
case SACTION_VOLUME_DOWN:
plat_step_volume(emu_action == SACTION_VOLUME_UP);
return;
+ case SACTION_MINIMIZE:
+ plat_minimize();
+ return;
default:
return;
}
printf("* %s\n", hud_msg);
}
+static int cdidcmp(const char *id1, const char *id2)
+{
+ while (*id1 != 0 && *id2 != 0) {
+ if (*id1 == '_') { id1++; continue; }
+ if (*id2 == '_') { id2++; continue; }
+ if (*id1 != *id2)
+ break;
+ id1++;
+ id2++;
+ }
+
+ return *id1 - *id2;
+}
+
+static void parse_cwcheat(void)
+{
+ char line[256], buf[64], name[64], *p;
+ int newcheat = 1;
+ u32 a, v;
+ FILE *f;
+
+ f = fopen("cheatpops.db", "r");
+ if (f == NULL)
+ return;
+
+ /* find the game */
+ while (fgets(line, sizeof(line), f)) {
+ if (sscanf(line, "_S %63s", buf) != 1)
+ continue;
+ if (cdidcmp(buf, CdromId) == 0)
+ break;
+ }
+
+ if (feof(f))
+ goto out;
+
+ printf("cwcheat section found for %s\n", CdromId);
+ while (fgets(line, sizeof(line), f))
+ {
+ p = line + strlen(line);
+ for (p--; p >= line && (*p == '\r' || *p == '\n' || *p == ' '); p--)
+ *p = 0;
+ if (*p == 0 || *p == '#' || *p == ';')
+ continue;
+
+ if (strncmp(line, "_S", 2) == 0)
+ break;
+ if (strncmp(line, "_G", 2) == 0) {
+ printf(" cwcheat game name: '%s'\n", line + 3);
+ continue;
+ }
+ if (strncmp(line, "_C0", 3) == 0) {
+ if (!newcheat && Cheats[NumCheats - 1].n == 0) {
+ printf("cheat '%s' failed to parse\n", name);
+ free(Cheats[NumCheats - 1].Descr);
+ NumCheats--;
+ }
+ snprintf(name, sizeof(name), "%s", line + 4);
+ newcheat = 1;
+ continue;
+ }
+ if (sscanf(line, "_L %x %x", &a, &v) != 2) {
+ printf("line failed to parse: '%s'\n", line);
+ continue;
+ }
+
+ if (newcheat) {
+ if (NumCheats >= NumCheatsAllocated) {
+ NumCheatsAllocated += 16;
+ Cheats = realloc(Cheats, sizeof(Cheat) *
+ NumCheatsAllocated);
+ if (Cheats == NULL)
+ break;
+ }
+ Cheats[NumCheats].Descr = strdup(name);
+ Cheats[NumCheats].Enabled = 0;
+ Cheats[NumCheats].WasEnabled = 0;
+ Cheats[NumCheats].First = NumCodes;
+ Cheats[NumCheats].n = 0;
+ NumCheats++;
+ newcheat = 0;
+ }
+
+ if (NumCodes >= NumCodesAllocated) {
+ NumCodesAllocated += 16;
+ CheatCodes = realloc(CheatCodes, sizeof(CheatCode) *
+ NumCodesAllocated);
+ if (CheatCodes == NULL)
+ break;
+ }
+ CheatCodes[NumCodes].Addr = a;
+ CheatCodes[NumCodes].Val = v;
+ NumCodes++;
+ Cheats[NumCheats - 1].n++;
+ }
+
+out:
+ fclose(f);
+}
+
+void emu_on_new_cd(void)
+{
+ ClearAllCheats();
+ parse_cwcheat();
+
+ if (Config.HLE) {
+ printf("note: running with HLE BIOS, expect compatibility problems\n");
+ printf("----------------------------------------------------------\n");
+ }
+
+ snprintf(hud_msg, sizeof(hud_msg), "Booting up...");
+ hud_new_msg = 2;
+}
+
int main(int argc, char *argv[])
{
// what is the name of the config file?
return 1;
// frontend stuff
+ // init input but leave probing to platform code,
+ // they add input drivers and may need to modify them after probe
in_init();
- in_evdev_init();
- //in_probe();
+ pl_init();
plat_init();
menu_init(); // loads config
- pl_init();
if (psxout)
Config.PsxOut = 1;
printf(_("Could not load CD-ROM!\n"));
return -1;
}
+ emu_on_new_cd();
ready_to_go = 1;
}
}
return ret;
ret = SaveState(fname);
+#ifndef __ARM_ARCH_7A__ /* XXX */
+ sync();
+#endif
printf("* %s \"%s\" [%d]\n", ret == 0 ? "saved" : "failed to save", fname, slot);
return ret;
}
#if defined(__x86_64__) || defined(__i386__)
// convenience hack
- char name[MAXPATHLEN];
- snprintf(name, sizeof(name), "%s.x86", lib);
- lib = name;
+ if (strstr(lib, ".x86") == NULL) {
+ char name[MAXPATHLEN];
+ snprintf(name, sizeof(name), "%s.x86_64", lib);
+ lib = name;
+ }
#endif
ret = dlopen(lib, RTLD_NOW);