perfect vsync, bugfixes
[fceu.git] / drivers / gp2x / gp2x.c
index 0c48ad4..92103c0 100644 (file)
 #include "cpuctrl.h"
 #include "squidgehack.h"
 
-int CLImain(int argc, char *argv[]);
+int GP2X_PORT_REV =
+#include "rev.h"
+;
 
-//#define SOUND_RATE 44100
-#define SOUND_RATE 22050
+extern uint8 PAL;
+
+int CLImain(int argc, char *argv[]);
 
 DSETTINGS Settings;
 CFGSTRUCT DriverConfig[]={
@@ -87,9 +90,10 @@ static void SetDefaults(void)
  Settings.cpuclock = 150;
  Settings.frameskip = -1; // auto
  Settings.mmuhack = 1;
- Settings.sound_rate = SOUND_RATE;
+ 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
@@ -101,6 +105,9 @@ 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)
@@ -116,37 +123,6 @@ void DoDriverArgs(void)
        #endif
 }
 
-int InitMouse(void)
-{
- return(0);
-}
-
-void KillMouse(void){}
-
-void GetMouseData(uint32 *d)
-{
-}
-
-int InitKeyboard(void)
-{
- return(1);
-}
-
-int UpdateKeyboard(void)
-{
- return(1);
-}
-
-void KillKeyboard(void)
-{
-
-}
-
-char *GetKeyboard(void)
-{
- return NULL;
-}
-
 
 char **g_argv;
 int mmuhack_status = 0;
@@ -158,10 +134,10 @@ int main(int argc, char *argv[])
        int ret;
        g_argv = argv;
 
-        puts("Starting GPFCE - Port version " GP2X_PORT_VERSION " (" __DATE__ ")");
-        puts("Based on FCE Ultra "VERSION_STRING"...");
-        puts("Ported by Zheng Zhu");
-        puts("Additional optimization/misc work by notaz\n");
+        printf("Starting GPFCE - Port version " GP2X_PORT_VERSION " r%i (" __DATE__ ")\n", GP2X_PORT_REV);
+        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");
 
        gp2x_init();
        cpuctrl_init();
@@ -170,8 +146,8 @@ int main(int argc, char *argv[])
 
         ret = CLImain(argc,argv);
 
-        // unscale the screen, in case this is bad.
-        gp2x_video_RGB_setscaling(0, 320, 240);
+        // unscale the screen, in case it is bad.
+        gp2x_video_RGB_setscaling(320, 240);
 
        if (mmuhack_status > 0)
                mmuunhack();
@@ -201,9 +177,9 @@ void gp2x_opt_setup(void)
        }
 }
 
-void gp2x_cpuclock_gamma_update(void)
+void gp2x_opt_update(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);
@@ -215,6 +191,20 @@ 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;
+       }
 }