X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=gp2x%2Femu.c;h=b1b314eeade50a8b88832a73a0acd3e621887f0e;hb=d2f29611d1379a249c8f3f955ed16a336f9290cd;hp=77e33f28ea85c14ceeb8096c7c961b2c39f4d1a5;hpb=ab8a8d36598061ddae8741c6585fbaa3e257c037;p=libpicofe.git diff --git a/gp2x/emu.c b/gp2x/emu.c index 77e33f2..b1b314e 100644 --- a/gp2x/emu.c +++ b/gp2x/emu.c @@ -40,21 +40,6 @@ static int osd_fps_x, osd_y; extern void *gp2x_screens[4]; -int plat_get_root_dir(char *dst, int len) -{ - extern char **g_argv; - int j; - - strncpy(dst, g_argv[0], len); - len -= 32; // reserve - if (len < 0) len = 0; - dst[len] = 0; - for (j = strlen(dst); j > 0; j--) - if (dst[j] == '/') { dst[j+1] = 0; break; } - - return j + 1; -} - static void scaling_update(void) { @@ -76,19 +61,7 @@ void pemu_prep_defconfig(void) { gp2x_soc_t soc; - memset(&defaultConfig, 0, sizeof(defaultConfig)); - defaultConfig.EmuOpt = 0x9d | EOPT_RAM_TIMINGS|EOPT_CONFIRM_SAVE|EOPT_EN_CD_LEDS; - defaultConfig.s_PicoOpt = 0x0f | POPT_EN_MCD_PCM|POPT_EN_MCD_CDDA|POPT_EN_SVP_DRC|POPT_ACC_SPRITES; - defaultConfig.s_PsndRate = 44100; - defaultConfig.s_PicoRegion = 0; // auto - defaultConfig.s_PicoAutoRgnOrder = 0x184; // US, EU, JP - defaultConfig.s_PicoCDBuffers = 0; - defaultConfig.Frameskip = -1; // auto defaultConfig.CPUclock = default_cpu_clock; - defaultConfig.volume = 50; - defaultConfig.gamma = 100; - defaultConfig.scaling = 0; - defaultConfig.turbo_rate = 15; soc = soc_detect(); if (soc == SOCID_MMSP2) @@ -97,6 +70,23 @@ void pemu_prep_defconfig(void) defaultConfig.EmuOpt |= EOPT_WIZ_TEAR_FIX|EOPT_SHOW_RTC; } +void pemu_validate_config(void) +{ + gp2x_soc_t soc; + + soc = soc_detect(); + if (soc != SOCID_MMSP2) + PicoOpt &= ~POPT_EXT_FM; + if (soc != SOCID_POLLUX) + currentConfig.EmuOpt &= ~EOPT_WIZ_TEAR_FIX; + + if (currentConfig.gamma < 10 || currentConfig.gamma > 300) + currentConfig.gamma = 100; + + if (currentConfig.CPUclock < 10 || currentConfig.CPUclock > 1024) + currentConfig.CPUclock = default_cpu_clock; +} + static void (*osd_text)(int x, int y, const char *text); static void osd_text8(int x, int y, const char *text) @@ -327,7 +317,7 @@ void pemu_update_display(const char *fps, const char *notice) gp2x_video_setpalette(localPal, ret); } // a hack for VR - if (PicoRead16Hook == PicoSVPRead16) + if (PicoAHW & PAHW_SVP) memset32((int *)(PicoDraw2FB+328*8+328*223), 0xe0e0e0e0, 328); // do actual copy vidcpyM2(g_screen_ptr, PicoDraw2FB+328*8, @@ -344,13 +334,13 @@ void pemu_update_display(const char *fps, const char *notice) } } - if (notice || (emu_opt & 2)) { + if (notice || (emu_opt & EOPT_SHOW_FPS)) { if (notice) osd_text(4, osd_y, notice); if (emu_opt & 2) osd_text(osd_fps_x, osd_y, fps); } - if ((emu_opt & 0x400) && (PicoAHW & PAHW_MCD)) + if ((PicoAHW & PAHW_MCD) && (emu_opt & EOPT_EN_CD_LEDS)) draw_cd_leds(); if (PicoAHW & PAHW_PICO) draw_pico_ptr(); @@ -498,10 +488,14 @@ static void vidResetMode(void) make_local_pal = (PicoAHW & PAHW_SMS) ? make_local_pal_sms : make_local_pal_md; } -void plat_video_toggle_renderer(int is_next, int is_menu) +void plat_video_toggle_renderer(int is_next, int force_16bpp, int is_menu) { + if (force_16bpp) { + PicoOpt &= ~POPT_ALT_RENDERER; + currentConfig.EmuOpt |= EOPT_16BPP; + } /* alt, 16bpp, 8bpp */ - if (PicoOpt & POPT_ALT_RENDERER) { + else if (PicoOpt & POPT_ALT_RENDERER) { PicoOpt &= ~POPT_ALT_RENDERER; if (is_next) currentConfig.EmuOpt |= EOPT_16BPP;