void S9xAddCheat (bool8 enable, bool8 save_current_value, uint32 address, uint8 byte, const char *name) { if (address >= 0x000000 && address <= 0xFFFFFF) { char code[10]; sprintf(code, "%06X:%02X", address, byte); S9xAddCheat(enable, save_current_value, code, name); } }
static void DetachCheatItems (void) { S9xDeleteCheats(); // Cheat.num_cheats = 0 for (unsigned int i = 0; i < MAX_CHEATS; i++) { if (citem[i].valid) { strcpy(Cheat.c[Cheat.num_cheats].name, citem[i].description); S9xAddCheat(citem[i].enabled, false, citem[i].address, citem[i].value); // Cheat.num_cheats++ } } S9xApplyCheats(); }
char * S9xParseArgs (char **argv, int argc) { for (int i = 1; i < argc; i++) { if (*argv[i] == '-') { if (!strcasecmp(argv[i], "-help")) S9xUsage(); else // SOUND OPTIONS if (!strcasecmp(argv[i], "-soundsync")) Settings.SoundSync = TRUE; else if (!strcasecmp(argv[i], "-playbackrate")) { if (i + 1 < argc) { Settings.SoundPlaybackRate = atoi(argv[++i]); if (Settings.SoundPlaybackRate < 8192) Settings.SoundPlaybackRate = 8192; } else S9xUsage(); } else if (!strcasecmp(argv[i], "-inputrate")) { if (i + 1 < argc) { Settings.SoundInputRate = atoi(argv[++i]); if (Settings.SoundInputRate < 8192) Settings.SoundInputRate = 8192; } else S9xUsage(); } else if (!strcasecmp(argv[i], "-reversestereo")) Settings.ReverseStereo = TRUE; else if (!strcasecmp(argv[i], "-nostereo")) Settings.Stereo = FALSE; else if (!strcasecmp(argv[i], "-eightbit")) Settings.SixteenBitSound = FALSE; else if (!strcasecmp(argv[i], "-mute")) Settings.Mute = TRUE; else // DISPLAY OPTIONS if (!strcasecmp(argv[i], "-displayframerate")) Settings.DisplayFrameRate = TRUE; else if (!strcasecmp(argv[i], "-displaykeypress")) Settings.DisplayPressedKeys = TRUE; else if (!strcasecmp(argv[i], "-nohires")) Settings.SupportHiRes = FALSE; else if (!strcasecmp(argv[i], "-notransparency")) Settings.Transparency = FALSE; else if (!strcasecmp(argv[i], "-nowindows")) Settings.DisableGraphicWindows = TRUE; else // CONTROLLER OPTIONS if (!strcasecmp(argv[i], "-nomp5")) Settings.MultiPlayer5Master = FALSE; else if (!strcasecmp(argv[i], "-nomouse")) Settings.MouseMaster = FALSE; else if (!strcasecmp(argv[i], "-nosuperscope")) Settings.SuperScopeMaster = FALSE; else if (!strcasecmp(argv[i], "-nojustifier")) Settings.JustifierMaster = FALSE; else if (!strcasecmp(argv[i], "-port1") || !strcasecmp(argv[i], "-port2")) { if (i + 1 < argc) { i++; if (!parse_controller_spec(argv[i - 1][5] - '1', argv[i])) S9xUsage(); } else S9xUsage(); } else // ROM OPTIONS if (!strcasecmp(argv[i], "-hirom")) Settings.ForceHiROM = TRUE; else if (!strcasecmp(argv[i], "-lorom")) Settings.ForceLoROM = TRUE; else if (!strcasecmp(argv[i], "-ntsc")) Settings.ForceNTSC = TRUE; else if (!strcasecmp(argv[i], "-pal")) Settings.ForcePAL = TRUE; else if (!strcasecmp(argv[i], "-nointerleave")) Settings.ForceNotInterleaved = TRUE; else if (!strcasecmp(argv[i], "-interleaved")) Settings.ForceInterleaved = TRUE; else if (!strcasecmp(argv[i], "-interleaved2")) Settings.ForceInterleaved2 = TRUE; else if (!strcasecmp(argv[i], "-interleavedgd24")) Settings.ForceInterleaveGD24 = TRUE; else if (!strcasecmp(argv[i], "-noheader")) Settings.ForceNoHeader = TRUE; else if (!strcasecmp(argv[i], "-header")) Settings.ForceHeader = TRUE; else if (!strcasecmp(argv[i], "-bsxbootup")) Settings.BSXBootup = TRUE; else // PATCH/CHEAT OPTIONS if (!strcasecmp(argv[i], "-nopatch")) Settings.NoPatch = TRUE; else if (!strcasecmp(argv[i], "-cheat")) Settings.ApplyCheats = TRUE; else if (!strcasecmp(argv[i], "-gamegenie")) { if (i + 1 < argc) { uint32 address; uint8 byte; const char *error; if ((error = S9xGameGenieToRaw(argv[++i], address, byte)) == NULL) S9xAddCheat(TRUE, FALSE, address, byte); else S9xMessage(S9X_ERROR, S9X_GAME_GENIE_CODE_ERROR, error); } else S9xUsage(); } else if (!strcasecmp(argv[i], "-actionreplay")) { if (i + 1 < argc) { uint32 address; uint8 byte; const char *error; if ((error = S9xProActionReplayToRaw(argv[++i], address, byte)) == NULL) S9xAddCheat(TRUE, FALSE, address, byte); else S9xMessage(S9X_ERROR, S9X_ACTION_REPLY_CODE_ERROR, error); } else S9xUsage(); } else if (!strcasecmp(argv[i], "-goldfinger")) { if (i + 1 < argc) { uint32 address; uint8 bytes[3]; bool8 sram; uint8 num_bytes; const char *error; if ((error = S9xGoldFingerToRaw(argv[++i], address, sram, num_bytes, bytes)) == NULL) { for (int c = 0; c < num_bytes; c++) S9xAddCheat(TRUE, FALSE, address + c, bytes[c]); } else S9xMessage(S9X_ERROR, S9X_GOLD_FINGER_CODE_ERROR, error); } else S9xUsage(); } else // NETPLAY OPTIONS #ifdef NETPLAY_SUPPORT if (!strcasecmp(argv[i], "-net")) Settings.NetPlay = TRUE; else if (!strcasecmp(argv[i], "-port")) { if (i + 1 < argc) Settings.Port = -atoi(argv[++i]); else S9xUsage(); } else if (!strcasecmp(argv[i], "-server")) { if (i + 1 < argc) { strncpy(Settings.ServerName, argv[++i], 127); Settings.ServerName[127] = 0; } else S9xUsage(); } else #endif // HACKING OR DEBUGGING OPTIONS #ifdef DEBUGGER if (!strcasecmp(argv[i], "-debug")) CPU.Flags |= DEBUG_MODE_FLAG; else if (!strcasecmp(argv[i], "-trace")) { ENSURE_TRACE_OPEN(trace,"trace.log","wb") CPU.Flags |= TRACE_FLAG; } else #endif if (!strcasecmp(argv[i], "-hdmatiming")) { if (i + 1 < argc) { int p = atoi(argv[++i]); if (p > 0 && p < 200) Settings.HDMATimingHack = p; } else S9xUsage(); } else if (!strcasecmp(argv[i], "-invalidvramaccess")) Settings.BlockInvalidVRAMAccessMaster = FALSE; else // OTHER OPTIONS if (!strcasecmp(argv[i], "-frameskip")) { if (i + 1 < argc) Settings.SkipFrames = atoi(argv[++i]) + 1; else S9xUsage(); } else if (!strcasecmp(argv[i], "-frametime")) { if (i + 1 < argc) Settings.FrameTimePAL = Settings.FrameTimeNTSC = atoi(argv[++i]); else S9xUsage(); } else if (!strcasecmp(argv[i], "-upanddown")) Settings.UpAndDown = TRUE; else if (!strcasecmp(argv[i], "-conf")) { if (++i >= argc) S9xUsage(); // Else do nothing, S9xLoadConfigFiles() handled it. } else if (!strcasecmp(argv[i], "-nostdconf")) { // Do nothing, S9xLoadConfigFiles() handled it. } else S9xParseArg(argv, i, argc); } else rom_filename = argv[i]; } S9xVerifyControllers(); return (rom_filename); }