示例#1
0
void S9xQuickLoadSlot (int slot)
{
    char def[PATH_MAX];
    char filename[PATH_MAX];
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char ext[_MAX_EXT];

    if (!gui_config->rom_loaded)
        return;

    _splitpath (Memory.ROMFilename, drive, dir, def, ext);

    snprintf (filename, PATH_MAX, "%s%s%s.%03d",
             S9xGetDirectory (SNAPSHOT_DIR), SLASH_STR, def,
             slot);

    if (file_exists (filename))
        S9xFreezeGame (S9xGetFilename (".undo", SNAPSHOT_DIR));

    if (S9xUnfreezeGame (filename))
    {
        snprintf (buf, PATH_MAX, "%s.%03d loaded", def, slot);
        S9xSetInfoString (buf);
        return;
    }

    static const char *digits = "t123456789";

    _splitpath (Memory.ROMFilename, drive, dir, def, ext);

    snprintf (filename, PATH_MAX, "%s%s%s.zs%c",
              S9xGetDirectory (SNAPSHOT_DIR), SLASH_STR,
              def, digits[slot]);

    if (file_exists (filename))
        S9xFreezeGame (S9xGetFilename (".undo", SNAPSHOT_DIR));

    if (S9xUnfreezeGame (filename))
    {
        snprintf (buf, PATH_MAX,
                  "Loaded ZSNES freeze file %s.zs%c",
                  def, digits [slot]);
        S9xSetInfoString (buf);
        return;
    }

    S9xMessage (S9X_ERROR,
                S9X_FREEZE_FILE_NOT_FOUND,
                "Freeze file not found");
}
示例#2
0
void PowerCallback (int unknown, int pwrflags)
{
	if (pwrflags & PSP_POWER_CB_HOLD_SWITCH)
	{
		extern bool8 g_bShowProfilerIno;
		g_bShowProfilerInfo = (! g_bShowProfilerInfo);
	}
	
	if (pwrflags & PSP_POWER_CB_POWER_SWITCH){
		if (g_bROMLoaded) {
			scePowerSetClockFrequency (222, 222, 111);
			S9xSetSoundMute           (TRUE);
			g_bSleep = true;
			save_config     ();
			Memory.SaveSRAM (S9xGetFilename ("srm"));
		}
	} else if (pwrflags & PSP_POWER_CB_RESUME_COMPLETE) {
		g_bSleep = false;
	}

	if (pwrflags & PSP_POWER_CB_BATTERY_LOW){
		scePowerSetClockFrequency (222,222,111);
		S9xSetInfoString          ("WARNING: PSP Battery is Low! (Automatically Throttling CPU)");
	}

	int cbid;
	cbid = sceKernelCreateCallback ("Power Callback", (SceKernelCallbackFunction)PowerCallback, NULL);
	scePowerRegisterCallback       (0, cbid);
}
示例#3
0
/* QuickSave/Load from S9x base controls.cpp */
void
S9xQuickSaveSlot (int slot)
{
    char def[PATH_MAX];
    char filename[PATH_MAX];
    char drive[_MAX_DRIVE];
    char dir[_MAX_DIR];
    char ext[_MAX_EXT];

    if (!gui_config->rom_loaded)
        return;

    _splitpath (Memory.ROMFilename, drive, dir, def, ext);

    snprintf (filename, PATH_MAX, "%s%s%s.%03d",
             S9xGetDirectory (SNAPSHOT_DIR), SLASH_STR, def,
             slot);

    if (S9xFreezeGame (filename))
    {
        snprintf (buf, PATH_MAX, "%s.%03d saved", def, slot);

        S9xSetInfoString (buf);
    }
}
示例#4
0
文件: sdl.cpp 项目: dtzWill/supernes
void S9xLoadState(int num)
{
  const char * file = S9xGetQuickSaveFilename(num);
  int result = S9xUnfreezeGame(file);
  S9xSetInfoString("Load slot %u: %s", num,
      (result ? "done" : "failed"));
}
示例#5
0
void updateBindingMessage()
{
  if ( keyBindingMode != NOT_BINDING )
  {
    //Hack. Should just have to reset the timer...
    S9xSetInfoString( bindingNames[keyBindingMode] );
  }
}
示例#6
0
void S9xMessage (int type, int number, const char *message)
{
	const int	max = 36 * 3;
	static char	buffer[max + 1];

	fprintf(stdout, "%s\n", message);
	strncpy(buffer, message, max + 1);
	buffer[max] = 0;
	S9xSetInfoString(buffer);
}
示例#7
0
void
S9xSaveState (const char *filename)
{
    if (S9xFreezeGame (filename))
    {
        sprintf (buf, "%s saved", filename);
        S9xSetInfoString (buf);
    }
    else
    {
        fprintf (stderr, "Couldn't save state file: %s\n", filename);
    }
}
示例#8
0
static void change_slot (int difference)
{
    static char buf[256];

    gui_config->current_save_slot += difference;
    gui_config->current_save_slot %= 1000;
    if (gui_config->current_save_slot < 0)
        gui_config->current_save_slot += 1000;
    if (!gui_config->rom_loaded)
        return;

    snprintf (buf, 256, "State Slot: %d", gui_config->current_save_slot);
    S9xSetInfoString (buf);
    GFX.InfoStringTimeout = 60;
}
示例#9
0
void
S9xLoadState (const char *filename)
{
    if (S9xUnfreezeGame (filename))
    {
        sprintf (buf, "%s loaded", filename);
        S9xSetInfoString (buf);
    }
    else
    {
        fprintf (stderr, "Failed to load state file: %s\n", filename);
    }

    return;
}
示例#10
0
void
S9xLoadState (const char *filename)
{
    S9xFreezeGame (S9xGetFilename (".undo", SNAPSHOT_DIR));

    if (S9xUnfreezeGame (filename))
    {
        sprintf (buf, "%s loaded", filename);
        S9xSetInfoString (buf);
    }
    else
    {
        fprintf (stderr, "Failed to load state file: %s\n", filename);
    }
}
示例#11
0
void S9xMessage (int type, int, const char *str)
{
#ifdef DEBUGGER
    static FILE *out = NULL;

    if (out == NULL)
        out = fopen ("out.txt", "w");

    fprintf (out, "%s\n", str);
#endif

    S9xSetInfoString (str);

	// if we can't draw on the screen, messagebox it
	// also send to stderr/stdout depending on message type
	switch(type)
	{
		case S9X_INFO:
			if(Settings.StopEmulation)
				fprintf(stdout, "%s\n", str);
			break;
		case S9X_WARNING:
			fprintf(stdout, "%s\n", str);
			if(Settings.StopEmulation)
				MessageBoxA(GUI.hWnd, str, "Warning",     MB_OK | MB_ICONWARNING);
			break;
		case S9X_ERROR:
			fprintf(stderr, "%s\n", str);
			if(Settings.StopEmulation)
				MessageBoxA(GUI.hWnd, str, "Error",       MB_OK | MB_ICONERROR);
			break;
		case S9X_FATAL_ERROR:
			fprintf(stderr, "%s\n", str);
			if(Settings.StopEmulation)
				MessageBoxA(GUI.hWnd, str, "Fatal Error", MB_OK | MB_ICONERROR);
			break;
		default:
				fprintf(stdout, "%s\n", str);
			break;
	}
}
示例#12
0
void VideoLogger(void *pixels, int width, int height, int depth, int bytes_per_line)
{
	int fc = S9xMovieGetFrameCounter();
	if (fc > 0)
		framecounter = fc;
	else
		framecounter++;
	
	if (video)
	{
		int i;
		char *data = (char*)pixels;
		static int lastwidth = width; // first resolution
		static int lastheight = height;
		if (lastwidth != width || lastheight != height) // this is just for informing the encoder that something has changed
		{
			printf("Frame %d, resolution changed from %dx%d to %dx%d!\n", fc, lastwidth, lastheight, width, height);
			lastwidth = width;
			lastheight = height;
		}
		for (i=0; i < height; i++)
			fwrite(data + i*bytes_per_line, depth, width, video);
		fflush(video);
		fflush(audio);
		drift++;

		if (maxframes > 0 && __builtin_expect((unsigned)framecounter >= maxframes, 0))
		{
			printf("-maxframes hit\ndrift:%d\n",drift);
			S9xExit();
		}

	}

	if (Settings.DisplayPressedKeys==1 || keypressscreen)
	{
		uint16 MovieGetJoypad(int i);

		int buttons = MovieGetJoypad(0);
		static char buffer[128];

		// This string spacing pattern is optimized for the 256 pixel wide screen.
                sprintf(buffer, "%s  %s  %s  %s  %s  %s  %c%c%c%c%c%c",
		buttons & SNES_START_MASK ? "Start" : "_____",
		buttons & SNES_SELECT_MASK ? "Select" : "______",
                buttons & SNES_UP_MASK ? "Up" : "__",
		buttons & SNES_DOWN_MASK ? "Down" : "____",
		buttons & SNES_LEFT_MASK ? "Left" : "____",
		buttons & SNES_RIGHT_MASK ? "Right" : "_____",
		buttons & SNES_A_MASK ? 'A':'_',
		buttons & SNES_B_MASK ? 'B':'_',
                buttons & SNES_X_MASK ? 'X':'_',
                buttons & SNES_Y_MASK ? 'Y':'_',
		buttons & SNES_TL_MASK ? 'L':'_',
		buttons & SNES_TR_MASK ? 'R':'_'
		/*framecounter*/);
		if (Settings.DisplayPressedKeys==1)
			fprintf(stderr, "%s %d           \r", buffer, framecounter);
		//if (keypressscreen)
                S9xSetInfoString(buffer);
	}

	if (__builtin_expect(messageframe >= 0 && framecounter == messageframe, 0))
	{
		S9xMessage(S9X_INFO, S9X_MOVIE_INFO, message);
		GFX.InfoStringTimeout = 300;
		messageframe = -1;
	}

/*	if (__builtin_expect(fastforwardpoint >= 0 && framecounter >= fastforwardpoint, 0))
	{
		Settings.FramesToSkip = fastforwarddistance;
		fastforwardpoint = -1;
	}*/
}
示例#13
0
bool keyboardBindingFilter( const SDL_Event& event )
{
  if (event.type != SDL_KEYDOWN ) return false;

  int key = event.key.keysym.sym;
  bool bindingKeyPressed = ( key == SDLK_EQUALS || key == SDLK_QUESTION );

  if ( keyBindingMode == NOT_BINDING )
  {
    if ( bindingKeyPressed )
    {
      //Enter key-binding mode.
      keyBindingMode = NOT_BINDING;
      keyBindingMode++;
      return true;
    } else
    {
      //We're not presently binding, and they're not trying to bind.
      //Carry on!
      return false;
    }
  }

  //We're in key-binding mode...
  if ( bindingKeyPressed )
  {
    //cancel;
    keyBindingMode = NOT_BINDING;
    S9xSetInfoString( "Cancelled binding!" );
  }

  //Check that this is a valid key.
  //XXX: right now we don't support
  //orange, shift, or sym as keys b/c they are meta keys.
  int valid = 0
    || ( key >= SDLK_a && key <= SDLK_z ) //Alpha
    || key == SDLK_BACKSPACE
    || key == SDLK_RETURN
    || key == SDLK_COMMA
    || key == SDLK_PERIOD
    || key == SDLK_SPACE
    || key == SDLK_AT;

  if ( valid )
  {
    //We're in binding mode, and they pressed a bindable key!
    bindingJoypad[keyBindingMode] = key;
    keyBindingMode++;
  }

  if ( keyBindingMode == BINDING_DONE )
  {
    //make this the current joy
    memcpy( Config.joypad1Mapping, bindingJoypad, sizeof(bindingJoypad) );
    
    //Save their settings...
    writeOptions( BINDING_CFG, controllerOptions,
        sizeof(controllerOptions)/sizeof(controllerOptions[0]), true );

    //Tell user we're done...
    updateBindingMessage();

    //we're done here!
    keyBindingMode = NOT_BINDING;
  }

  return true;
}
示例#14
0
void 
S9xMessage(int type, int message_no, const char *str)
{
	S9xSetInfoString (str);
}
示例#15
0
void S9xMessage(int /*type */, int /*number */, const char *message)
{
	static char buffer[MAX_MESSAGE_LEN + 1];
	snprintf(buffer, MAX_MESSAGE_LEN, "%s", message);
	S9xSetInfoString(buffer);
}
示例#16
0
void VideoLogger(void *pixels, int width, int height, int depth)
{
	int fc = S9xMovieGetFrameCounter();
	if (fc > 0)
		framecounter = fc;
	else
		framecounter++;	

	if (video)
	{
//		if (width != 256 || height != 224)
//		{
//			fprintf(stderr, "\nVideoLogger: Warning! width=%d, height=%d\n", width, height);
//			breakpoint();
//		}
		// This stuff is only good for unix code, but since nitsuja broke unix, I might as well break windows
		fwrite(pixels, 1024, 224, video);
		fflush(video);
		fflush(audio);
		drift++;

		if (maxframes > 0 && __builtin_expect(framecounter >= maxframes, 0))
		{
			printf("-maxframes hit\ndrift:%d\n",drift);
			S9xExit();
		}	
		
	}

	if (Settings.DisplayPressedKeys || keypressscreen)
	{
		static char buffer[128];
                sprintf(buffer, "%s  %s  %s  %s  %s  %s  %c%c%c%c%c%c",
		IPPU.Joypads[0] & SNES_START_MASK ? "Start" : "_____",
		IPPU.Joypads[0] & SNES_SELECT_MASK ? "Select" : "______",
                IPPU.Joypads[0] & SNES_UP_MASK ? "Up" : "__",
		IPPU.Joypads[0] & SNES_DOWN_MASK ? "Down" : "____",
		IPPU.Joypads[0] & SNES_LEFT_MASK ? "Left" : "____",
		IPPU.Joypads[0] & SNES_RIGHT_MASK ? "Right" : "_____",
		IPPU.Joypads[0] & SNES_A_MASK ? 'A':'_',
		IPPU.Joypads[0] & SNES_B_MASK ? 'B':'_',
                IPPU.Joypads[0] & SNES_X_MASK ? 'X':'_',
                IPPU.Joypads[0] & SNES_Y_MASK ? 'Y':'_',  
		IPPU.Joypads[0] & SNES_TL_MASK ? 'L':'_',
		IPPU.Joypads[0] & SNES_TR_MASK ? 'R':'_'
		/*framecounter*/);
		if (Settings.DisplayPressedKeys)
			fprintf(stderr, "%s %d           \r", buffer, framecounter);
		if (keypressscreen)
                    S9xSetInfoString(buffer);
	}
	
	if (__builtin_expect(messageframe >= 0 && framecounter == messageframe, 0))
	{
		S9xMessage(S9X_INFO, S9X_MOVIE_INFO, message);
		GFX.InfoStringTimeout = 300;
		messageframe = -1;
	}

	if (__builtin_expect(fastforwardpoint >= 0 && framecounter >= fastforwardpoint, 0))
	{
//		Settings.FramesToSkip = fastforwarddistance;
		fastforwardpoint = -1;
	}
}