diff -ru fceu.orig/Makefile.unixsdl fceu.c700/Makefile.unixsdl
--- fceu.orig/Makefile.unixsdl	Mon Aug 19 03:20:41 2002
+++ fceu.c700/Makefile.unixsdl	Wed Jan 22 00:08:39 2003
@@ -1,5 +1,5 @@
-CC	= gcc 
-TFLAGS  = -DNETWORK -DFPS `sdl-config --cflags` -mcpu=i686 -O2 -Izlib -fomit-frame-pointer -DC80x86 -DLSB_FIRST -DSDL -DUNIX -DPSS_STYLE=1 -DZLIB
+CC	= arm-linux-gcc 
+TFLAGS  = -DNETWORK -DFPS `sdl-config --cflags` -DFRAMESKIP -O2 -Izlib -fomit-frame-pointer -DLSB_FIRST -DSDL -DUNIX -DPSS_STYLE=1 -DZLIB -DDSPSOUND
 
 RM	= rm -f
 B	= drivers/cli/
@@ -8,8 +8,8 @@
 
 include zlib/Makefile
 
-OBJDRIVER	= ${B}sdl.o ${B}main.o ${B}throttle.o ${B}unix-netplay.o ${B}sdl-sound.o ${B}sdl-video.o ${B}sdl-joystick.o drivers/common/cheat.o drivers/common/config.o drivers/common/args.o drivers/common/vidblit.o ${UNZIPOBJS}
-LDRIVER		= -lm `sdl-config --libs` -lz
+OBJDRIVER	= ${B}sdl.o ${B}main.o ${B}throttle.o ${B}unix-netplay.o ${B}sdl-sound.o ${B}sdl-video.o ${B}sdl-joystick.o drivers/common/cheat.o drivers/common/config.o drivers/common/args.o drivers/common/vidblit.o drivers/common/unixdsp.o ${UNZIPOBJS}
+LDRIVER		= -lm `sdl-config --libs`
 
 include Makefile.base
 
diff -ru fceu.orig/drivers/cli/input.c fceu.c700/drivers/cli/input.c
--- fceu.orig/drivers/cli/input.c	Mon Aug 19 03:08:16 2002
+++ fceu.c700/drivers/cli/input.c	Tue Jan 21 22:40:51 2003
@@ -43,7 +43,7 @@
 
 static void DoCheatSeq(void)
 {
- #if defined(DOS) || defined(SDL)
+ #if defined(DOS) || (defined(SDL) && !defined(DSPSOUND))
  if(inited&1)
   SilenceSound(1);
  #endif
@@ -53,7 +53,7 @@
  DoConsoleCheatConfig();
  InitVideo();
  InitKeyboard();
- #if defined(DOS) || defined(SDL)
+ #if defined(DOS) || (defined(SDL) && !defined(DSPSOUND))
  if(inited&1)
   SilenceSound(0);
  #endif
@@ -97,7 +97,7 @@
 
   if(gametype==GIT_FDS)
   {
-   keyonly(S,DriverInterface(DES_FDSSELECT,0);)
+   keyonly(U,DriverInterface(DES_FDSSELECT,0);)
    keyonly(I,DriverInterface(DES_FDSINSERT,0);)
    keyonly(E,DriverInterface(DES_FDSEJECT,0);)
   }
@@ -106,8 +106,8 @@
  if(gametype!=GIT_NSF)
  {
   keyonly(F2,DoCheatSeq();)
-  keyonly(F5,FCEUI_SaveState();)
-  keyonly(F7,FCEUI_LoadState();)
+  keyonly(W,FCEUI_SaveState();)
+  keyonly(R,FCEUI_LoadState();)
  }
  else
  {
@@ -119,7 +119,7 @@
  }
 
  keyonly(F10,DriverInterface(DES_RESET,0);)
- keyonly(F11,DriverInterface(DES_POWER,0);)
+ keyonly(BACKSPACE,DriverInterface(DES_POWER,0);)
  if(KEY(F12) || KEY(ESCAPE)) FCEUI_CloseGame();
 
  if(gametype==GIT_VSUNI)
@@ -161,6 +161,7 @@
 static uint32 KeyboardDodo(void)
 {
  uint32 JS=0;
+ extern uint64 frcount;
 
  if(gametype!=GIT_NSF)
  {
@@ -174,8 +175,10 @@
                     FCEUI_DispMessage(tmp);
                    })
 
-  if(KEY(LEFTALT) || KEY(X))        JS|=JOY_A<<JoySwap;
-  if(KEY(LEFTCONTROL) || KEY(SPACE) || KEY(Z) ) JS |=JOY_B<<JoySwap;
+  if(KEY(LEFTALT) || KEY(X) || 
+     (KEY(S) && (frcount & 2))) JS|=JOY_A<<JoySwap;
+  if(KEY(LEFTCONTROL) || KEY(SPACE) || KEY(Z) ||
+     (KEY(A) && (frcount & 2))) JS |=JOY_B<<JoySwap;
   if(KEY(ENTER))       JS |= JOY_START<<JoySwap;
   if(KEY(TAB))         JS |= JOY_SELECT<<JoySwap;
   if(KEY(CURSORDOWN))  y|= JOY_DOWN;
diff -ru fceu.orig/drivers/cli/sdl-sound.c fceu.c700/drivers/cli/sdl-sound.c
--- fceu.orig/drivers/cli/sdl-sound.c	Mon Aug 19 03:08:16 2002
+++ fceu.c700/drivers/cli/sdl-sound.c	Tue Jan 21 22:48:50 2003
@@ -131,7 +131,7 @@
         {
          int rate;
          if(_sound==1)
-          _sound=48000;
+          _sound=12000;
          rate=_sound;
          if(InitUNIXDSPSound(&rate,_f8bit?0:1,8,8))
          {
diff -ru fceu.orig/drivers/cli/sdl-video.c fceu.c700/drivers/cli/sdl-video.c
--- fceu.orig/drivers/cli/sdl-video.c	Mon Aug 19 12:03:53 2002
+++ fceu.c700/drivers/cli/sdl-video.c	Tue Jan 21 23:14:53 2003
@@ -175,11 +175,27 @@
 
 void LockConsole(){}
 void UnlockConsole(){}
+#ifdef FPS
+#include <sys/time.h>
+#endif
 void BlitScreen(uint8 *XBuf)
 {
  uint8 *dest;
  int xo=0,yo=0;
 
+ #ifdef FRAMESKIP
+ struct timeval tv;
+ uint64 nowtime;
+ int w;
+ extern uint64 starttime,frcount;
+
+ gettimeofday(&tv,0);
+ nowtime=((uint64)tv.tv_sec*1000000)+tv.tv_usec;
+ if(frcount*1000000/(nowtime-starttime)<50 && (frcount & 3)) w=1; else w=0;
+ FCEUI_FrameSkip(w);
+ if(XBuf==0)return;
+ #endif
+
  if(paletterefresh)
  {
   RedoPalette();
diff -ru fceu.orig/fce.c fceu.c700/fce.c
--- fceu.orig/fce.c	Fri Aug 16 05:19:15 2002
+++ fceu.c700/fce.c	Tue Jan 21 18:49:55 2003
@@ -1484,12 +1484,12 @@
 
 #ifdef FPS
 #include <sys/time.h>
-uint64 frcount;
+uint64 starttime,frcount;
 #endif
 void FCEUI_Emulate(void)
 {
 	#ifdef FPS
-        uint64 starttime,end;
+        uint64 end;
         struct timeval tv;
 	frcount=0;
         gettimeofday(&tv,0);
