예제 #1
0
파일: video.cpp 프로젝트: xobs/chumby-mame
int osd_update_frameskip(void)
{
	static int cuantos=0;
	unsigned ahora=gp2x_timer_read();

	calculate_framerate(ahora);
	proximo_frameskip+=frameskip_umbral;
	mame4all_totalframes++;
	if ((ahora-frameskip_medio)>proximo_frameskip)
	{
		cuantos++;
		if (cuantos>3) //5)
		{
			proximo_frameskip=ahora+2;
			cuantos=0;
			return 0;
		}
		else
		{
#ifdef DEBUG_FRAMERATE
			mame4all_frameskipped++;
#endif
			return 1;
		}
	}
	else
	{
		if ((ahora+frameskip_medio)<proximo_frameskip)
		{
			if (!cuantos)
			{
#ifdef DEBUG_FRAMERATE
				mame4all_frameswaiting++;
#endif
				gp2x_timer_delay(proximo_frameskip-ahora);
				proximo_frameskip=gp2x_timer_read();
			}
		}
		cuantos=0;
	}
	return 0;
}
예제 #2
0
파일: video.cpp 프로젝트: xobs/chumby-mame
/* Wait for correct synchronization */
INLINE void update_timing (void)
{
	unsigned long curr=gp2x_timer_read();
	unsigned long previ=prev;
	unsigned long interval=((frameskip+1) * 1000)/(Machine->drv->frames_per_second);

	/* now wait until it's time to update the screen */
	if ((curr-previ)<interval) {
		/* Auto-Frameskip -> frameskip-- */
		if (gp2x_frameskip_auto && frameskip>0)
			frameskip--;
		//if (gp2x_vsync!=-1 && ((!gp2x_frameskip_auto) || (!frameskip) || (gp2x_vsync==1)))
		{
			while ((curr - previ) < interval) {
				curr = gp2x_timer_read();
			}
		}
	} else if ((curr-previ)>(interval)) {
		/* Auto-Frameskip -> frameskip++ */
		if (gp2x_frameskip_auto && frameskip<gp2x_frameskip)
			frameskip++;
	}
	prev = curr;
}
예제 #3
0
파일: video.cpp 프로젝트: xobs/chumby-mame
void osd_reset_frameskip(void)
{
	unsigned t;
	proximo_frameskip=gp2x_timer_read();
	frameskip_umbral=1000/Machine->drv->frames_per_second;
	t=10000/Machine->drv->frames_per_second;
	t=t-(frameskip_umbral*10);
	if (t>5)
		frameskip_umbral++;
	frameskip_medio=frameskip_umbral>>1;
#ifdef DREAMCAST
	frameskip_medio+=1; //2;
	frameskip_umbral+=1; //3;
#endif
#ifdef DEBUG_FRAMERATE
	printf("Trying to framerate %i fps\n",(Machine->drv->frames_per_second));
	mame4all_frameskipped=0;
	mame4all_frameswaiting=0;
	mame4all_framerate=0.0;
	mame4all_real_framerate=0.0;
	mame4all_real_totalframes=0;
#endif
	mame4all_totalframes=0;
}
예제 #4
0
static void select_game(char *emu, char *game)
{
	extern int kiosk_mode;

	unsigned long keytimer=0;
	int keydirection=0, last_keydirection=0;

	/* No Selected game */
	strcpy(game,"builtinn");

	/* Clean screen */
	FE_DisplayScreen();

	gp2x_joystick_clear();	

	/* Wait until user selects a game */
	while(1)
	{
		game_list_view(&last_game_selected);
		FE_DisplayScreen();
       	gp2x_timer_delay(70000);

		while(1)
		{
            usleep(10000);
			gp2x_joystick_read();	

			last_keydirection=keydirection;
			keydirection=0;

			//Any keyboard key pressed?
			if(osd_is_sdlkey_pressed(pi_key[LEFT_1]) || osd_is_sdlkey_pressed(pi_key[RIGHT_1]) ||
			   osd_is_sdlkey_pressed(pi_key[UP_1]) || osd_is_sdlkey_pressed(pi_key[DOWN_1]) )
			{
				keydirection=1;
				break;
			}

			if(osd_is_sdlkey_pressed(pi_key[START_1]) || osd_is_sdlkey_pressed(pi_key[A_1]) ||
			   osd_is_sdlkey_pressed(pi_key[QUIT]) || osd_is_sdlkey_pressed(pi_key[SELECT_1]) )
			{
				break;
			}

			//Any stick direction?
			if(is_joy_axis_pressed (joyaxis_LR, 1, 0) || is_joy_axis_pressed (joyaxis_LR, 2, 0) ||
			   is_joy_axis_pressed (joyaxis_UD, 1, 0) || is_joy_axis_pressed (joyaxis_UD, 2, 0) )
			{
				keydirection=1;
				break;
			}

			//Any joy buttons pressed?
			if (ExKey1)
			{
				break;
			}

			//Used to delay the initial key press, but 
			//once pressed and held the delay will clear
			keytimer = gp2x_timer_read() + (TICKS_PER_SEC/2);

		}

		//Key delay
		if(keydirection && last_keydirection && gp2x_timer_read() < keytimer) {
			continue;
		}

		int updown=0;
		if(is_joy_axis_pressed (joyaxis_UD, 1, 0)) {last_game_selected--; updown=1;};
		if(is_joy_axis_pressed (joyaxis_UD, 2, 0)) {last_game_selected++; updown=1;};

		// Stop diagonals on game selection
		if(!updown) {
			if(is_joy_axis_pressed (joyaxis_LR, 1, 0)) last_game_selected-=21;
			if(is_joy_axis_pressed (joyaxis_LR, 2, 0)) last_game_selected+=21;
		}

		if (osd_is_sdlkey_pressed(pi_key[UP_1])) last_game_selected--;
		if (osd_is_sdlkey_pressed(pi_key[DOWN_1])) last_game_selected++;
		if (osd_is_sdlkey_pressed(pi_key[LEFT_1])) last_game_selected-=21;
		if (osd_is_sdlkey_pressed(pi_key[RIGHT_1])) last_game_selected+=21;

		if (!kiosk_mode)
		{
			if( osd_is_sdlkey_pressed(pi_key[QUIT]) || 
			    	(is_joy_button_pressed(pi_joy[START_1], ExKey1) && is_joy_button_pressed(pi_joy[SELECT_1], ExKey1)) ) {
				gp2x_exit();
			}
		}

		if (is_joy_button_pressed(pi_joy[A_1], ExKey1) || 
			osd_is_sdlkey_pressed(pi_key[A_1]) || 
			osd_is_sdlkey_pressed(pi_key[START_1]) )
		{
			/* Select the game */
			game_list_select(last_game_selected, game, emu);

			break;
		}

		if (is_joy_button_pressed(pi_joy[SELECT_1], ExKey1) || osd_is_sdlkey_pressed(pi_key[SELECT_1]) )
		{
           //Check if the game is already a favorite
            game_list_select(last_game_selected, game, emu);

            int foundfav=0;
            int counter=0;
            while(true) {
                if (favarray[counter][0] == '\0') break;    //Null is the array terminator
                if (strcasecmp(favarray[counter], game) == 0) {
                    foundfav=1;
                    break;
                }
                counter++;
            }

            if(foundfav) {
                favorites_remove(game);
            } else {
                favorites_add(game);
            }

			//Redraw and pause slightly
	        game_list_view(&last_game_selected);
			FE_DisplayScreen();
			usleep(300000);
			gp2x_joystick_clear();

		}
	}
}
예제 #5
0
void gp2x_timer_delay(unsigned long ticks)
{
	unsigned long ini=gp2x_timer_read();
	while (gp2x_timer_read()-ini<ticks);
}
예제 #6
0
파일: minimal.cpp 프로젝트: Dipri/imame4all
void gp2x_timer_delay(unsigned long ticks)
{
	unsigned long long ini=gp2x_timer_read();
	//printf("ini %ld %ld %d\n",gp2x_timer_read(),ini,(gp2x_timer_read()-ini));
	while (gp2x_timer_read()-ini<ticks){/*nope*/};
}