X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=main.c;h=bd66c06d01ba05560ab5e705c368c6dceec7c169;hb=ee0a3871f9982215361cd6bb4758eb9a7c7d8413;hp=ac891cb8edd49608c740e655493bc0d5cdd2ca6e;hpb=90206450327a222607119b04f34cf1853faf37f8;p=gpsp.git diff --git a/main.c b/main.c index ac891cb..bd66c06 100644 --- a/main.c +++ b/main.c @@ -41,14 +41,15 @@ debug_state current_debug_state = RUN; frameskip_type current_frameskip_type = auto_frameskip; u32 global_cycles_per_instruction = 1; u32 random_skip = 0; +u32 fps_debug = 0; #ifdef GP2X_BUILD u32 frameskip_value = 2; u64 frame_count_initial_timestamp = 0; u64 last_frame_interval_timestamp; -u32 gp2x_fps_debug = 0; +void gp2x_init(void); void gp2x_quit(void); #else @@ -192,17 +193,10 @@ int main(int argc, char *argv[]) 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 - freopen("CON", "wb", stdout); #endif extern char *cpu_mode_names[]; @@ -225,13 +219,13 @@ int main(int argc, char *argv[]) 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) @@ -330,6 +324,7 @@ int main(int argc, char *argv[]) exit(-1); } + set_clock_speed(); set_gba_resolution(screen_scale); video_resolution_small(); @@ -498,6 +493,9 @@ void trigger_ext_event() event_number++; } +static u32 fps = 60; +static u32 frames_drawn = 60; + u32 update_gba() { irq_type irq_raised = IRQ_NONE; @@ -612,10 +610,18 @@ u32 update_gba() continue; update_gbc_sound(cpu_ticks); - synchronize(); + + if(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(); @@ -762,28 +768,16 @@ u32 num_skipped_frames = 0; 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++; @@ -806,14 +800,6 @@ void synchronize() num_skipped_frames = 0; } } - else - { - if((synchronize_flag) && - ((time_delta < frame_speed) && synchronize_flag)) - { - delay_us(frame_speed - time_delta); - } - } frames++; @@ -833,7 +819,6 @@ void synchronize() last_frame_interval_timestamp = new_ticks; interval_skipped_frames = 0; - ticks_needed_total = 0; frames = 0; } @@ -1056,3 +1041,19 @@ void printout(void *str, u32 val) { 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; + } +} +