X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fgp2x%2Fgp2x.c;h=ac8bb920a503498561d87a7cfaaf1fa393741fe4;hb=HEAD;hp=58bf931da1883911566fc6d34f03d8996465bfb0;hpb=e6ee752982da44a60a9a6b5916d7642ba2dd8b9e;p=fceu.git diff --git a/drivers/gp2x/gp2x.c b/drivers/gp2x/gp2x.c index 58bf931..ac8bb92 100644 --- a/drivers/gp2x/gp2x.c +++ b/drivers/gp2x/gp2x.c @@ -5,7 +5,9 @@ #include "../../driver.h" #include "../common/config.h" #include "../common/args.h" -#include "gp2x.h" +#include "../common/platform.h" +#include "../common/settings.h" +#include "../common/revision.h" #include "gp2x-video.h" #ifdef NETWORK #include "unix-netplay.h" @@ -15,68 +17,21 @@ #include "cpuctrl.h" #include "squidgehack.h" -int GP2X_PORT_REV = -#include "rev.h" -; - -int CLImain(int argc, char *argv[]); - -DSETTINGS Settings; -CFGSTRUCT DriverConfig[]={ - ACA(Settings.KeyBinds), - ACA(Settings.JoyBinds), - AC(Settings.turbo_rate_add), - AC(Settings.sound_rate), - AC(Settings.showfps), - AC(Settings.scaling), - AC(Settings.frameskip), - AC(Settings.sstate_confirm), - AC(Settings.region_force), - AC(Settings.cpuclock), - AC(Settings.mmuhack), - AC(Settings.ramtimings), - AC(Settings.gamma), - // TODO - ENDCFGSTRUCT -}; - +extern uint8 PAL; char *DriverUsage= -"-joyx y Use joystick y as virtual joystick x.\n\ --sound x Sound.\n\ - 0 = Disabled.\n\ - Otherwise, x = playback rate.\n\ --showfps x Display fps counter if x is nonzero\n\ --mmuhack x Enable squidge's MMU hack if x is nonzero (GP2X).\n\ +"-mmuhack x Enable squidge's MMU hack if x is nonzero (GP2X).\n\ -ramtimings x Enable RAM overclocking if x is nonzero (GP2X).\n\ -" -#ifdef NETWORK -"-connect s Connect to server 's' for TCP/IP network play.\n\ --server Be a host/server for TCP/IP network play.\n\ --netport x Use TCP/IP port x for network play." -#endif -; +"; -#ifdef NETWORK -static int docheckie[2]={0,0}; -#endif ARGPSTRUCT DriverArgs[]={ - {"-sound",0,&Settings.sound_rate,0}, - {"-showfps",0,&Settings.showfps,0}, {"-mmuhack",0,&Settings.mmuhack,0}, {"-ramtimings",0,&Settings.ramtimings,0}, {"-menu",0,&ext_menu,0x4001}, {"-menustate",0,&ext_state,0x4001}, - #ifdef NETWORK - {"-connect",&docheckie[0],&netplayhost,0x4001}, - {"-server",&docheckie[1],0,0}, - {"-netport",0,&Port,0}, - #endif {0,0,0,0} }; - - void GetBaseDirectory(char *BaseDirectory) { strcpy(BaseDirectory, "fceultra"); @@ -91,6 +46,7 @@ static void SetDefaults(void) Settings.sound_rate = 22050; Settings.turbo_rate_add = (8*2 << 24) / 60 + 1; // 8Hz turbofire Settings.gamma = 100; + Settings.sstate_confirm = 1; // default controls, RLDU SEBA Settings.KeyBinds[ 0] = 0x010; // GP2X_UP Settings.KeyBinds[ 4] = 0x020; // GP2X_DOWN @@ -102,33 +58,22 @@ static void SetDefaults(void) Settings.KeyBinds[15] = 0x200; // GP2X_Y Settings.KeyBinds[ 8] = 0x008; // GP2X_START Settings.KeyBinds[ 9] = 0x004; // GP2X_SELECT + Settings.KeyBinds[10] = 0x80000000; // GP2X_L + Settings.KeyBinds[11] = 0x40000000; // GP2X_R + Settings.KeyBinds[27] = 0xc0000000; // GP2X_PUSH } void DoDriverArgs(void) { - #ifdef NETWORK - if(docheckie[0]) - netplay=2; - else if(docheckie[1]) - netplay=1; - - if(netplay) - FCEUI_SetNetworkPlay(netplay); - #endif } -char **g_argv; int mmuhack_status = 0; -// TODO: cleanup -int main(int argc, char *argv[]) +void platform_init(void) { - int ret; - g_argv = argv; - - printf("Starting GPFCE - Port version " GP2X_PORT_VERSION " r%i (" __DATE__ ")\n", GP2X_PORT_REV); + printf("Starting GPFCE " REV " (" __DATE__ ")\n"); puts("Based on FCE Ultra "VERSION_STRING" and 0.98.1x versions"); puts("Original port by Zheng Zhu"); puts("Menu/optimization/misc work by notaz\n"); @@ -137,11 +82,12 @@ int main(int argc, char *argv[]) cpuctrl_init(); SetDefaults(); +} - ret = CLImain(argc,argv); - - // unscale the screen, in case this is bad. - gp2x_video_RGB_setscaling(0, 320, 240); +void platform_finish(void) +{ + // unscale the screen, in case it is bad. + gp2x_video_RGB_setscaling(320, 240); if (mmuhack_status > 0) mmuunhack(); @@ -153,9 +99,13 @@ int main(int argc, char *argv[]) return(ret?0:-1); } +void platform_set_volume(int val) // 0-100 +{ + platform_set_volume(val, val); +} /* optional GP2X stuff to be done after config is loaded */ -void gp2x_opt_setup(void) +void platform_late_init(void) { if (Settings.mmuhack) { int ret = mmuhack(); @@ -171,9 +121,9 @@ void gp2x_opt_setup(void) } } -void gp2x_cpuclock_gamma_update(void) +void platform_apply_config(void) { - static int prev_cpuclock = 200, prev_gamma = 100; + static int prev_cpuclock = 200, prev_gamma = 100, prev_vsync = 0, prev_pal = 0; if (Settings.cpuclock != 0 && Settings.cpuclock != prev_cpuclock) { set_FCLK(Settings.cpuclock); @@ -185,6 +135,28 @@ void gp2x_cpuclock_gamma_update(void) set_gamma(Settings.gamma); prev_gamma = Settings.gamma; } + + if (Settings.perfect_vsync != prev_vsync || (Settings.perfect_vsync && prev_pal != PAL)) + { + if (Settings.perfect_vsync) + { + set_LCD_custom_rate(PAL ? LCDR_100_02 : LCDR_120_20); + prev_pal = PAL; + } + else + { + unset_LCD_custom_rate(); + } + prev_vsync = Settings.perfect_vsync; + } + + gp2x_video_changemode(Settings.scaling == 3 ? 15 : 8); + switch (Settings.scaling & 3) { + case 0: gp2x_video_set_offs(0); gp2x_video_RGB_setscaling(320, 240); break; + case 1: gp2x_video_set_offs(32); gp2x_video_RGB_setscaling(256, 240); break; + case 2: gp2x_video_set_offs(32+srendline*320); gp2x_video_RGB_setscaling(256, erendline-srendline); break; + case 3: gp2x_video_set_offs(32); gp2x_video_RGB_setscaling(320, 240); break; + } }