u64 last_frame_interval_timestamp;
u32 gp2x_fps_debug = 0;
+void gp2x_init(void);
void gp2x_quit(void);
#else
u32 synchronize_flag = 1;
u32 update_backup_flag = 1;
+#ifdef GP2X_BUILD
+u32 clock_speed = 200;
+#else
u32 clock_speed = 333;
+#endif
u8 main_path[512];
void trigger_ext_event();
u8 load_filename[512];
u8 bios_filename[512];
-#ifdef GP2X_BUILD
- if(gp2x_load_mmuhack() == -1)
- delay_us(2500000);
-#endif
-
#ifdef PSP_BUILD
sceKernelRegisterSubIntrHandler(PSP_VBLANK_INT, 0,
vblank_interrupt_handler, NULL);
sceKernelEnableSubIntr(PSP_VBLANK_INT, 0);
-#else
+#elif !defined(GP2X_BUILD)
freopen("CON", "wb", stdout);
#endif
delay_us(2500000);
#endif
- init_video();
-
#ifdef GP2X_BUILD
// Overclocking GP2X and MMU patch goes here
- gp2x_overclock();
+ gp2x_init();
#endif
+ init_video();
+
#ifdef GP2X_BUILD
sprintf(bios_filename, "%s/%s", main_path, "gba_bios.bin");
if(load_bios(bios_filename) == -1)
exit(-1);
}
+ set_clock_speed();
set_gba_resolution(screen_scale);
video_resolution_small();
current_savestate_filename);
load_state(current_savestate_filename); */
- debug_on();
+// debug_on();
if(argc > 2)
{
event_number++;
}
+static u32 fps = 60;
+static u32 frames_drawn = 60;
+
u32 update_gba()
{
irq_type irq_raised = IRQ_NONE;
continue;
update_gbc_sound(cpu_ticks);
- synchronize();
+
+ if(gp2x_fps_debug)
+ {
+ char print_buffer[32];
+ sprintf(print_buffer, "%d (%d)", fps, frames_drawn);
+ print_string(print_buffer, 0xFFFF, 0x000, 0, 0);
+ }
update_screen();
+ synchronize();
+
if(update_backup_flag)
update_backup();
u32 interval_skipped_frames;
u32 frames;
-u32 skipped_frames = 0;
-u32 ticks_needed_total = 0;
const u32 frame_interval = 60;
void synchronize()
{
u64 new_ticks;
u64 time_delta;
- static u32 fps = 60;
- static u32 frames_drawn = 60;
-
- if(gp2x_fps_debug)
- {
- char print_buffer[128];
- sprintf(print_buffer, "%d (%d)", fps, frames_drawn);
- print_string(print_buffer, 0xFFFF, 0x000, 0, 0);
- }
get_ticks_us(&new_ticks);
time_delta = new_ticks - last_screen_timestamp;
last_screen_timestamp = new_ticks;
- ticks_needed_total += time_delta;
skip_next_frame = 0;
virtual_frame_count++;
num_skipped_frames = 0;
}
}
- else
- {
- if((synchronize_flag) &&
- ((time_delta < frame_speed) && synchronize_flag))
- {
- delay_us(frame_speed - time_delta);
- }
- }
frames++;
last_frame_interval_timestamp = new_ticks;
interval_skipped_frames = 0;
- ticks_needed_total = 0;
frames = 0;
}
void delay_us(u32 us_count)
{
- usleep(us_count);
+ //usleep(us_count);
+ SDL_Delay(us_count / 1000);
}
void get_ticks_us(u64 *ticks_return)
{
printf(str, val);
}
+
+void set_clock_speed()
+{
+ static u32 clock_speed_old = default_clock_speed;
+ if (clock_speed != clock_speed_old)
+ {
+ printf("about to set CPU clock to %iMHz\n", clock_speed);
+ #ifdef PSP_BUILD
+ scePowerSetClockFrequency(clock_speed, clock_speed, clock_speed / 2);
+ #elif defined(GP2X_BUILD)
+ set_FCLK(clock_speed);
+ #endif
+ clock_speed_old = clock_speed;
+ }
+}
+