Beispiel #1
0
void emu_WriteConfig(void)
{
	FILE *f;

	getcwd(currentConfig.lastRomDir, MAXPATHLEN);
    printf("currentDir -> %s\n", currentConfig.lastRomDir);

	chdir(runPath); //change to dir where you launched app

	f = fopen("Potator2x.cfg", "wb");
	if (f) {
		fwrite(&currentConfig, 1, sizeof(currentConfig), f);
		fflush(f);
		fclose(f);
		sync();
	}

	chdir(currentConfig.lastRomDir); // change back to last dir (where you loaded the rom from)

	if(currentConfig.videoMode==2) 
		gp2x_video_RGB_setscaling(160, 160);
	else
		gp2x_video_RGB_setscaling(320, 240);

	CPUSetting(clocklist[currentConfig.CPUclock]);
	//gp2x_sound_rate(currentConfig.SoundRate);
	gp2x_sound_volume(currentConfig.volume,currentConfig.volume);
	gp2x_sound_pause(1^currentConfig.enable_sound);
}
Beispiel #2
0
void emu_ReadConfig(void)
{
	FILE *f;

	getcwd(currentConfig.lastRomDir, MAXPATHLEN);
    printf("currentDir -> %s\n", currentConfig.lastRomDir);

	chdir(runPath); //change to dir where you launched app

	// set default config
	memset(&currentConfig, 0, sizeof(currentConfig));
	//currentConfig.lastRomDir[0] = 0;
	currentConfig.videoMode = 0;
	currentConfig.show_fps = 0;
	currentConfig.enable_sound = 0;
	currentConfig.SoundRate = 11025;
	currentConfig.Frameskip = 0; // auto
	currentConfig.CPUclock = 1;
	currentConfig.volume = 255;
	gp2x_sound_volume(currentConfig.volume,currentConfig.volume);

	f = fopen("Potator2x.cfg", "rb");
	if (f) {
		fread(&currentConfig, 1, sizeof(currentConfig), f);
		fclose(f);
	}

	chdir(currentConfig.lastRomDir); // change back to last dir (where you loaded the rom from)

	if(currentConfig.videoMode==2) 
		gp2x_video_RGB_setscaling(160, 160);
	else
		gp2x_video_RGB_setscaling(320, 240);

	CPUSetting(clocklist[currentConfig.CPUclock]);
	//gp2x_sound_rate(currentConfig.SoundRate);
	gp2x_sound_volume(currentConfig.volume,currentConfig.volume);
	gp2x_sound_pause(1^currentConfig.enable_sound);
}
Beispiel #3
0
void emu_video_mode_change(int start_line, int line_count, int is_32cols)
{
	int scalex = 320, scaley = 240;
	int ln_offs = 0;

	if (doing_bg_frame)
		return;

	osd_fps_x = OSD_FPS_X;
	osd_y = 232;

	/* set up hwscaling here */
	PicoOpt &= ~POPT_DIS_32C_BORDER;
	if (is_32cols && currentConfig.scaling == EOPT_SCALE_HW) {
		scalex = 256;
		PicoOpt |= POPT_DIS_32C_BORDER;
		osd_fps_x = OSD_FPS_X - 64;
	}

	if (currentConfig.vscaling == EOPT_SCALE_HW) {
		ln_offs = start_line;
		scaley = line_count;
		osd_y = start_line + line_count - 8;
	}

	gp2x_video_RGB_setscaling(ln_offs, scalex, scaley);

	/* line doubling */
	if (currentConfig.vscaling == EOPT_SCALE_SW && line_count < 240) {
		ld_lines = ld_left = line_count / (240 - line_count);
		PicoDrawSetCallbacks(EmuScanBegin16_ld, EmuScanEnd16_ld);
	}

	// clear whole screen in all buffers
	if (!is_16bit_mode())
		gp2x_memset_all_buffers(0, 0xe0, 320*240);
	else
		gp2x_memset_all_buffers(0, 0, 320*240*2);
}
Beispiel #4
0
void handleMainMenu(void)
{

	BOOL isSelected = FALSE;
	int menuOption = 0;
		
	textClear();
	gp2x_video_RGB_setscaling(320, 240);
	while(!isSelected) {
		unsigned long pad = gp2x_joystick_read(0);
		printMenuOptions();
		gp2x_printf(0, 170, 1, "MenuOption = %d",menuOption);

		gp2x_printf(0, 0, (31 + (menuOption*8)), "->");

		gp2x_video_RGB_flip(0);

		if(pad & GP2X_RIGHT) {
			if((menuOption == MMOPTION_SAVESTATE) || (menuOption == MMOPTION_LOADSTATE))
				saveSlot++;
		}
			
		if(pad & GP2X_LEFT) {
			if((menuOption == MMOPTION_SAVESTATE) || (menuOption == MMOPTION_LOADSTATE))
				saveSlot--;
		}
			
		if(pad & GP2X_DOWN) {
			menuOption++;
			textClear();
		}
			
		if(pad & GP2X_UP) {
			menuOption--;
			textClear();
		}

		if(pad & GP2X_VOL_DOWN) if(pad & GP2X_START)
			exitMenu();
			
		if(pad & GP2X_X) {
			switch(menuOption){
			  case MMOPTION_CONTINUE: RESIZE(); textClear(); return;
			  case MMOPTION_RESTART: RESIZE(); supervision_reset(); textClear(); return;
			  case MMOPTION_SELECTOR: handleFileMenu(); return;
			  case MMOPTION_OPTIONS: handleOptionsMenu(); textClear(); return;
			  case MMOPTION_SAVESTATE: sv_saveState(romname,saveSlot); textClear();return;
			  case MMOPTION_LOADSTATE: sv_loadState(romname,saveSlot); textClear();return;
			  case MMOPTION_EXIT: exitMenu(); break;
			  default: return;
			}
		}

		/*if(pad & GP2X_B) {
			textClear(); 
			return;
		}*/
		
		if(menuOption < 0) menuOption = 0;			
		if(menuOption > 6) menuOption = 6;

		if(saveSlot < 0) saveSlot = 0;
		if(saveSlot > 9) saveSlot = 9;
		
		while(pad == gp2x_joystick_read(0));
		pad = gp2x_joystick_read(0);

		textClear();
	}
}
Beispiel #5
0
void handleOptionsMenu(void)
{

	BOOL isSelected = FALSE;
	int menuOption = 0;
		
	emu_ReadConfig();
	gp2x_video_RGB_setscaling(320, 240);
	textClear();
	while(!isSelected) {
		int clock = currentConfig.CPUclock;
		int frameskip = currentConfig.Frameskip;
		int videomode = currentConfig.videoMode;
		int vol = currentConfig.volume;
		unsigned long pad = gp2x_joystick_read(0);
		
		gp2x_printf(0, 1, 1, "Potator2x 1.0 by Normmatt\n\n");
		
		gp2x_printf(0, 15, 15 + 2*8, "videoMode      %s",videoMode);
		gp2x_printf(0, 15, 15 + 3*8, "show_fps       %d",currentConfig.show_fps);
		gp2x_printf(0, 15, 15 + 4*8, "enable_sound   %d",currentConfig.enable_sound);
		gp2x_printf(0, 15, 15 + 5*8, "SoundRate      %d",currentConfig.SoundRate);
		gp2x_printf(0, 15, 15 + 6*8, "Frameskip      %d",currentConfig.Frameskip);
		gp2x_printf(0, 15, 15 + 7*8, "CPUclock       %d",clocklist[currentConfig.CPUclock]);
		gp2x_printf(0, 15, 15 + 8*8, "volume         %d",currentConfig.volume);
		gp2x_printf(0, 15, 15 + 9*8, "Save and Exit");
		gp2x_printf(0, 15, 15 + 10*8, "Exit");

		gp2x_printf(0, 170, 1, "MenuOption = %d",menuOption);

		gp2x_printf(0, 0, (31 + (menuOption*8)), "->");

		gp2x_video_RGB_flip(0);

		if(pad & GP2X_RIGHT) {
			if(menuOption == OPTION_VIDEOMODE) if(videomode < 2) currentConfig.videoMode++;
			if(menuOption == OPTION_SHOWFPS) if(currentConfig.show_fps==0) currentConfig.show_fps=1; else currentConfig.show_fps=0;
			if(menuOption == OPTION_ENABLESOUND) if(currentConfig.enable_sound==0) currentConfig.enable_sound=1; else currentConfig.enable_sound=0;
			if(menuOption == OPTION_SOUNDRATE) currentConfig.SoundRate*=2;
			if(menuOption == OPTION_FRAMESKIP) if (frameskip < 9) frameskip++;
			if(menuOption == OPTION_CPUCLOCK) if(clock < sizeof(clocklist)) clock++;
			if(menuOption == OPTION_VOLUME) if (vol < 255) vol+= (pad & GP2X_RIGHT) ? 1 : 0;
		}
			
		if(pad & GP2X_LEFT) {
			if(menuOption == OPTION_VIDEOMODE) if(videomode > 0) currentConfig.videoMode--;
			if(menuOption == OPTION_SHOWFPS) if(currentConfig.show_fps==0) currentConfig.show_fps=1; else currentConfig.show_fps=0;
			if(menuOption == OPTION_ENABLESOUND) if(currentConfig.enable_sound==0) currentConfig.enable_sound=1; else currentConfig.enable_sound=0;
			if(menuOption == OPTION_SOUNDRATE) currentConfig.SoundRate/=2;
			if(menuOption == OPTION_FRAMESKIP) if (frameskip > 0) frameskip--;
			if(menuOption == OPTION_CPUCLOCK) if(clock > 0) clock--;
			if(menuOption == OPTION_VOLUME) if (vol > 0) vol-= (pad & GP2X_LEFT) ? 1 : 0;
		}
			
		if(pad & GP2X_DOWN) {
			menuOption++;
			textClear();
		}
			
		if(pad & GP2X_UP) {
			menuOption--;
			textClear();
		}

		if(pad & GP2X_VOL_DOWN) if(pad & GP2X_START)
			exitMenu();
			
		if(pad & GP2X_X) {
			switch(menuOption){
			  case OPTION_SAVEEXIT: 
				  emu_WriteConfig(); 
				  return;
			  case OPTION_EXIT: 
				  //gp2x_sound_rate(currentConfig.SoundRate); 
				  return;
			  default: break;
			}
		}

		switch(currentConfig.videoMode)
		{
			case 0: sprintf(videoMode,"Slow"); break;
			case 1: sprintf(videoMode,"Quick"); break;
			case 2: sprintf(videoMode,"Full Screen"); break;
			default: sprintf(videoMode,""); break;
		}

		if(currentConfig.SoundRate <= 11025) currentConfig.SoundRate = 11025;
		if(currentConfig.SoundRate >= 44100) currentConfig.SoundRate = 44100;

		currentConfig.Frameskip = frameskip;
		currentConfig.CPUclock  = clock;

		currentConfig.volume = vol;

		if(menuOption < 0) menuOption = 0;			
		if(menuOption > 8) menuOption = 8;
		
		while(pad == gp2x_joystick_read(0));
		pad = gp2x_joystick_read(0);

		textClear();
	}
}