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; }
/* 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; }
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; }
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(); } } }
void gp2x_timer_delay(unsigned long ticks) { unsigned long ini=gp2x_timer_read(); while (gp2x_timer_read()-ini<ticks); }
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*/}; }