Index: tools/configure
===================================================================
--- tools/configure	(revision 30811)
+++ tools/configure	(working copy)
@@ -1292,6 +1292,7 @@
  202) Nokia N8xx
  203) Nokia N900          ==ROCKCHIP==           ==HiFiMAN==
  204) Pandora             180) rk27xx generic    190) HM-60x
+ 205) Samsung YP-R0
 
 EOF
 
@@ -3163,7 +3164,7 @@
 
    204|pandora)
     application="yes"
-    target_id=77
+    target_id=78
     modelname="pandora"
     app_type="sdl-app"
     target="-DPANDORA"
@@ -3188,6 +3189,31 @@
     t_model="app"
     ;;
 
+   205|samsungypr0)
+    application="yes"
+    target_id=73
+    modelname="samsungypr0"
+    target="-DSAMSUNG_YPR0"
+    app_set_paths
+    app_set_lcd_size 240 320
+    memory=32
+    uname=`uname`
+    simcc "sdl-app"
+    tool="cp "
+    boottool="cp "
+    bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
+    bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
+    output="rockbox"
+    bootoutput="rockbox"
+    appextra="recorder:gui:radio"
+    plugins="yes"
+    swcodec="yes"
+    # architecture, manufacturer and model for the target-tree build
+    t_cpu="hosted"
+    t_manufacturer="ypr0"
+    t_model="app"
+    ;;
+
    *)
     echo "Please select a supported target platform!"
     exit 7
Index: apps/plugins/mp3_encoder.c
===================================================================
--- apps/plugins/mp3_encoder.c	(revision 30811)
+++ apps/plugins/mp3_encoder.c	(working copy)
@@ -2507,6 +2507,12 @@
 #define MP3ENC_DONE BUTTON_PLAYPAUSE
 #define MP3ENC_SELECT BUTTON_SELECT
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define MP3ENC_PREV BUTTON_UP
+#define MP3ENC_NEXT BUTTON_DOWN
+#define MP3ENC_DONE BUTTON_POWER
+#define MP3ENC_SELECT BUTTON_CENTER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/stats.c
===================================================================
--- apps/plugins/stats.c	(revision 30811)
+++ apps/plugins/stats.c	(working copy)
@@ -113,6 +113,9 @@
 #elif CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD
 #define STATS_STOP BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define STATS_STOP BUTTON_POWER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/superdom.c
===================================================================
--- apps/plugins/superdom.c	(revision 30811)
+++ apps/plugins/superdom.c	(working copy)
@@ -190,6 +190,14 @@
 #define SUPERDOM_RIGHT  BUTTON_RIGHT
 #define SUPERDOM_CANCEL BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define SUPERDOM_OK BUTTON_CENTER
+#define SUPERDOM_UP BUTTON_UP
+#define SUPERDOM_DOWN BUTTON_DOWN
+#define SUPERDOM_LEFT BUTTON_LEFT
+#define SUPERDOM_RIGHT BUTTON_RIGHT
+#define SUPERDOM_CANCEL BUTTON_POWER
+
 #endif
 
 #ifdef HAVE_TOUCHSCREEN
Index: apps/plugins/SOURCES.app_build
===================================================================
--- apps/plugins/SOURCES.app_build	(revision 30811)
+++ apps/plugins/SOURCES.app_build	(working copy)
@@ -1,3 +1,7 @@
+#ifndef HAVE_TOUCHSCREEN
+/* In devices running RockBox as an application, but having a keypad */
+#include "SOURCES"
+#else
 /* plugins common to all models */
 credits.c
 properties.c
@@ -39,3 +43,5 @@
 #endif
 test_viewports.c
 #endif /* HAVE_TEST_PLUGINS */
+
+#endif /* HAVE_TOUCHSCREEN */
Index: apps/plugins/sliding_puzzle.c
===================================================================
--- apps/plugins/sliding_puzzle.c	(revision 30811)
+++ apps/plugins/sliding_puzzle.c	(working copy)
@@ -254,6 +254,15 @@
 #define PUZZLE_SHUFFLE BUTTON_PLAYPAUSE
 #define PUZZLE_PICTURE BUTTON_SELECT
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define PUZZLE_QUIT    BUTTON_BACK
+#define PUZZLE_LEFT    BUTTON_LEFT
+#define PUZZLE_RIGHT   BUTTON_RIGHT
+#define PUZZLE_UP      BUTTON_UP
+#define PUZZLE_DOWN    BUTTON_DOWN
+#define PUZZLE_SHUFFLE BUTTON_CENTER
+#define PUZZLE_PICTURE BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
@@ -359,7 +368,7 @@
 static const char * initial_bmp_path=NULL;
 
 #ifdef HAVE_ALBUMART
-static const char * get_albumart_bmp_path(void)
+const char * get_albumart_bmp_path(void)
 {
     struct mp3entry* track = rb->audio_current_track();
 
@@ -374,12 +383,10 @@
 }
 #endif
 
-#if 0 /* unused */
-static const char * get_random_bmp_path(void)
+const char * get_random_bmp_path(void)
 {
     return(initial_bmp_path);
 }
-#endif
 
 static bool load_resize_bitmap(void)
 {
Index: apps/plugins/flipit.c
===================================================================
--- apps/plugins/flipit.c	(revision 30811)
+++ apps/plugins/flipit.c	(working copy)
@@ -368,6 +368,18 @@
 #define FLIPIT_STEP_BY_STEP (BUTTON_BACK|BUTTON_PLAYPAUSE)
 #define FLIPIT_TOGGLE       BUTTON_SELECT
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+
+#define FLIPIT_LEFT         BUTTON_LEFT
+#define FLIPIT_RIGHT        BUTTON_RIGHT
+#define FLIPIT_UP           BUTTON_UP
+#define FLIPIT_DOWN         BUTTON_DOWN
+#define FLIPIT_QUIT         BUTTON_POWER
+#define FLIPIT_SHUFFLE      BUTTON_MENU
+#define FLIPIT_SOLVE        BUTTON_USER
+#define FLIPIT_STEP_BY_STEP BUTTON_BACK
+#define FLIPIT_TOGGLE       BUTTON_CENTER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/SUBDIRS.app_build
===================================================================
--- apps/plugins/SUBDIRS.app_build	(revision 30811)
+++ apps/plugins/SUBDIRS.app_build	(working copy)
@@ -1,4 +1,11 @@
-/* For all targets with a bitmap display */
+#ifndef HAVE_TOUCHSCREEN
+/* This is for devices having a keypad, running RockBox as an application */
+#include "SUBDIRS"
+
+#else
+/* For all targets with a bitmap display and a touchscreen
+ * In fact, most of the plugins aren't supposed to be used on a touch(mouse) device
+ */
 #ifdef HAVE_LCD_BITMAP
 
 #ifdef HAVE_TAGCACHE
@@ -15,3 +22,4 @@
 #endif
 
 #endif /* CONFIG_CODEC == SWCODEC */
+#endif /* HAVE_TOUCHSCREEN */
\ No newline at end of file
Index: apps/plugins/chessbox/chessbox_pgn.h
===================================================================
--- apps/plugins/chessbox/chessbox_pgn.h	(revision 30811)
+++ apps/plugins/chessbox/chessbox_pgn.h	(working copy)
@@ -406,6 +406,16 @@
 #define CB_LEVEL   BUTTON_BACK
 #define CB_MENU    (BUTTON_PLAYPAUSE | BUTTON_REPEAT)
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define CB_SELECT  BUTTON_CENTER
+#define CB_UP      BUTTON_UP
+#define CB_DOWN    BUTTON_DOWN
+#define CB_LEFT    BUTTON_LEFT
+#define CB_RIGHT   BUTTON_RIGHT
+#define CB_PLAY    BUTTON_USER
+#define CB_LEVEL   BUTTON_BACK
+#define CB_MENU    BUTTON_MENU
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/oscilloscope.c
===================================================================
--- apps/plugins/oscilloscope.c	(revision 30811)
+++ apps/plugins/oscilloscope.c	(working copy)
@@ -331,6 +331,17 @@
 #define OSCILLOSCOPE_VOL_UP       BUTTON_VOL_UP
 #define OSCILLOSCOPE_VOL_DOWN     BUTTON_VOL_DOWN
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define OSCILLOSCOPE_QUIT         BUTTON_POWER
+#define OSCILLOSCOPE_DRAWMODE     BUTTON_CENTER
+#define OSCILLOSCOPE_ADVMODE      BUTTON_DOWN
+#define OSCILLOSCOPE_ORIENTATION  BUTTON_UP
+#define OSCILLOSCOPE_PAUSE        BUTTON_MENU
+#define OSCILLOSCOPE_SPEED_UP     BUTTON_RIGHT
+#define OSCILLOSCOPE_SPEED_DOWN   BUTTON_LEFT
+#define OSCILLOSCOPE_VOL_UP       BUTTON_BACK
+#define OSCILLOSCOPE_VOL_DOWN     BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
@@ -431,7 +442,7 @@
 
 /* implementation */
 
-static void anim_horizontal(int cur_left, int cur_right)
+void anim_horizontal(int cur_left, int cur_right)
 {
     int cur_x, x;
     int left, right, dl, dr;
@@ -609,7 +620,7 @@
     last_pos = cur_x;
 }
 
-static void anim_vertical(int cur_left, int cur_right)
+void anim_vertical(int cur_left, int cur_right)
 {
     int cur_y, y;
     int left, right, dl, dr;
@@ -784,7 +795,7 @@
     last_pos = cur_y;
 }
 
-static void cleanup(void)
+void cleanup(void)
 {
 #if LCD_DEPTH > 1
     rb->lcd_set_foreground(LCD_DEFAULT_FG);
Index: apps/plugins/starfield.c
===================================================================
--- apps/plugins/starfield.c	(revision 30811)
+++ apps/plugins/starfield.c	(working copy)
@@ -187,6 +187,14 @@
 #define STARFIELD_DECREASE_NB_STARS  BUTTON_RIGHT
 #define STARFIELD_TOGGLE_COLOR       BUTTON_PLAYPAUSE
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define STARFIELD_QUIT BUTTON_POWER
+#define STARFIELD_INCREASE_ZMOVE BUTTON_UP
+#define STARFIELD_DECREASE_ZMOVE BUTTON_DOWN
+#define STARFIELD_INCREASE_NB_STARS BUTTON_RIGHT
+#define STARFIELD_DECREASE_NB_STARS BUTTON_LEFT
+#define STARFIELD_TOGGLE_COLOR BUTTON_CENTER
+
 #endif
 
 #ifdef HAVE_TOUCHSCREEN
@@ -399,7 +407,7 @@
 
 static struct starfield starfield;
 
-static int plugin_main(void)
+int plugin_main(void)
 {
     int button, avg_peak, t_disp=0;
     int font_h, font_w;
Index: apps/plugins/snake2.c
===================================================================
--- apps/plugins/snake2.c	(revision 30811)
+++ apps/plugins/snake2.c	(working copy)
@@ -345,6 +345,15 @@
 #define SNAKE2_PLAYPAUSE BUTTON_PLAYPAUSE
 #define SNAKE2_PLAYPAUSE_TEXT "Play/Pause"
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define SNAKE2_LEFT      BUTTON_LEFT
+#define SNAKE2_RIGHT     BUTTON_RIGHT
+#define SNAKE2_UP        BUTTON_UP
+#define SNAKE2_DOWN      BUTTON_DOWN
+#define SNAKE2_QUIT      BUTTON_BACK
+#define SNAKE2_PLAYPAUSE BUTTON_CENTER
+#define SNAKE2_PLAYPAUSE_TEXT "Center"
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/clix.c
===================================================================
--- apps/plugins/clix.c	(revision 30811)
+++ apps/plugins/clix.c	(working copy)
@@ -194,6 +194,14 @@
 #define CLIX_BUTTON_RIGHT       BUTTON_RIGHT
 #define CLIX_BUTTON_CLICK       BUTTON_SELECT
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define CLIX_BUTTON_QUIT    BUTTON_BACK
+#define CLIX_BUTTON_LEFT    BUTTON_LEFT
+#define CLIX_BUTTON_RIGHT   BUTTON_RIGHT
+#define CLIX_BUTTON_CLICK   BUTTON_CENTER
+#define CLIX_BUTTON_UP      BUTTON_UP
+#define CLIX_BUTTON_DOWN    BUTTON_DOWN
+
 #else
 #error "no keymap"
 #endif
Index: apps/plugins/midi/midiplay.c
===================================================================
--- apps/plugins/midi/midiplay.c	(revision 30811)
+++ apps/plugins/midi/midiplay.c	(working copy)
@@ -225,6 +225,14 @@
 #define BTN_DOWN         BUTTON_DOWN
 #define BTN_PLAY         BUTTON_PLAYPAUSE
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define BTN_QUIT         BUTTON_BACK
+#define BTN_RIGHT        BUTTON_RIGHT
+#define BTN_LEFT         BUTTON_LEFT
+#define BTN_UP           BUTTON_UP
+#define BTN_DOWN         BUTTON_DOWN
+#define BTN_PLAY         BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/snake.c
===================================================================
--- apps/plugins/snake.c	(revision 30811)
+++ apps/plugins/snake.c	(working copy)
@@ -233,6 +233,14 @@
 #define SNAKE_DOWN BUTTON_DOWN
 #define SNAKE_PLAYPAUSE BUTTON_PLAYPAUSE
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define SNAKE_QUIT      BUTTON_BACK
+#define SNAKE_LEFT      BUTTON_LEFT
+#define SNAKE_RIGHT     BUTTON_RIGHT
+#define SNAKE_UP        BUTTON_UP
+#define SNAKE_DOWN      BUTTON_DOWN
+#define SNAKE_PLAYPAUSE BUTTON_CENTER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/bounce.c
===================================================================
--- apps/plugins/bounce.c	(revision 30811)
+++ apps/plugins/bounce.c	(working copy)
@@ -236,6 +236,14 @@
 #define BOUNCE_QUIT BUTTON_POWER
 #define BOUNCE_MODE BUTTON_PLAYPAUSE
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define BOUNCE_LEFT BUTTON_LEFT
+#define BOUNCE_RIGHT BUTTON_RIGHT
+#define BOUNCE_UP   BUTTON_UP
+#define BOUNCE_DOWN BUTTON_DOWN
+#define BOUNCE_QUIT BUTTON_POWER
+#define BOUNCE_MODE BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/cube.c
===================================================================
--- apps/plugins/cube.c	(revision 30811)
+++ apps/plugins/cube.c	(working copy)
@@ -319,6 +319,16 @@
 #define CUBE_PAUSE         BUTTON_PLAYPAUSE
 #define CUBE_HIGHSPEED     BUTTON_BACK
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define CUBE_QUIT          BUTTON_POWER
+#define CUBE_NEXT          BUTTON_RIGHT
+#define CUBE_PREV          BUTTON_LEFT
+#define CUBE_INC           BUTTON_UP
+#define CUBE_DEC           BUTTON_DOWN
+#define CUBE_MODE          BUTTON_MENU
+#define CUBE_PAUSE         BUTTON_CENTER
+#define CUBE_HIGHSPEED     BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/minesweeper.c
===================================================================
--- apps/plugins/minesweeper.c	(revision 30811)
+++ apps/plugins/minesweeper.c	(working copy)
@@ -297,6 +297,16 @@
 #   define MINESWP_DISCOVER BUTTON_PLAYPAUSE
 #   define MINESWP_INFO     BUTTON_BACK
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#   define MINESWP_LEFT     BUTTON_LEFT
+#   define MINESWP_RIGHT    BUTTON_RIGHT
+#   define MINESWP_UP       BUTTON_UP
+#   define MINESWP_DOWN     BUTTON_DOWN
+#   define MINESWP_QUIT     BUTTON_BACK
+#   define MINESWP_TOGGLE   BUTTON_USER
+#   define MINESWP_DISCOVER BUTTON_CENTER
+#   define MINESWP_INFO     BUTTON_MENU
+
 #else
 #error No keymap defined!
 #endif
@@ -381,28 +391,28 @@
 /* the height and width of the field */
 #define MAX_HEIGHT (LCD_HEIGHT/TileSize)
 #define MAX_WIDTH  (LCD_WIDTH/TileSize)
-static int height = MAX_HEIGHT;
-static int width = MAX_WIDTH;
-static int top;
-static int left;
+int height = MAX_HEIGHT;
+int width = MAX_WIDTH;
+int top;
+int left;
 
 /* The Minefield. Caution it is defined as Y, X! Not the opposite. */
-static tile minefield[MAX_HEIGHT][MAX_WIDTH];
+tile minefield[MAX_HEIGHT][MAX_WIDTH];
 
 /* total number of mines on the game */
-static int mine_num = 0;
+int mine_num = 0;
 
 /* percentage of mines on minefield used during generation */
-static int percent = 16;
+int percent = 16;
 
 /* number of tiles left on the game */
-static int tiles_left;
+int tiles_left;
 
 /* Because mines are set after the first move... */
-static bool no_mines = true;
+bool no_mines = true;
 
 /* We need a stack (created on discover()) for the cascade algorithm. */
-static int stack_pos = 0;
+int stack_pos = 0;
 
 #ifdef HAVE_TOUCHSCREEN
 
@@ -411,7 +421,7 @@
 #endif
 
 
-static void push( int *stack, int y, int x )
+void push( int *stack, int y, int x )
 {
     if( stack_pos <= height*width )
     {
@@ -421,7 +431,7 @@
 }
 
 /* Unveil tiles and push them to stack if they are empty. */
-static void unveil( int *stack, int y, int x )
+void unveil( int *stack, int y, int x )
 {
     if( x < 0 || y < 0 || x > width - 1 || y > height - 1
        || minefield[y][x].known
@@ -433,14 +443,14 @@
         push( stack, y, x );
 }
 
-static int is_flagged( int y, int x )
+int is_flagged( int y, int x )
 {
     if( x >= 0 && y >= 0 && x < width && y < height && minefield[y][x].flag )
         return 1;
     return 0;
 }
 
-static int neighbors_flagged( int y, int x )
+int neighbors_flagged( int y, int x )
 {
     return is_flagged( y-1, x-1 ) +
            is_flagged( y-1, x ) +
@@ -453,7 +463,7 @@
            is_flagged( y+1, x+1 );
 }
 
-static bool discover( int y, int x, bool explore_neighbors )
+bool discover( int y, int x, bool explore_neighbors )
 {
     /* Selected tile. */
     if( x < 0 || y < 0 || x > width - 1 || y > height - 1)
@@ -513,7 +523,7 @@
 }
 
 /* Reset the whole board for a new game. */
-static void minesweeper_init( void )
+void minesweeper_init( void )
 {
     rb->memset(minefield, 0, sizeof(minefield));
     no_mines = true;
@@ -524,7 +534,7 @@
 /* put mines on the mine field */
 /* there is p% chance that a tile is a mine */
 /* if the tile has coordinates (x,y), then it can't be a mine */
-static void minesweeper_putmines( int p, int x, int y )
+void minesweeper_putmines( int p, int x, int y )
 {
     int i,j;
 
@@ -585,7 +595,7 @@
 
 /* A function that will uncover all the board, when the user wins or loses.
    can easily be expanded, (just a call assigned to a button) as a solver. */
-static void mine_show( void )
+void mine_show( void )
 {
     int i, j, button;
 
@@ -622,7 +632,7 @@
 #endif
 }
 
-static int count_tiles_left( void )
+int count_tiles_left( void )
 {
     int tiles = 0;
     int i, j;
@@ -633,7 +643,7 @@
     return tiles;
 }
 
-static int count_flags( void )
+int count_flags( void )
 {
     int flags = 0;
     int i, j;
@@ -645,7 +655,7 @@
 }
 
 /* welcome screen where player can chose mine percentage */
-static enum minesweeper_status menu( void )
+enum minesweeper_status menu( void )
 {
     int selection = 0, result = MINESWEEPER_QUIT;
     bool menu_quit = false;
@@ -698,7 +708,7 @@
 }
 
 /* the big and ugly game function */
-static enum minesweeper_status minesweeper( void )
+enum minesweeper_status minesweeper( void )
 {
     int i, j;
     int button;
Index: apps/plugins/lib/pluginlib_actions.c
===================================================================
--- apps/plugins/lib/pluginlib_actions.c	(revision 30811)
+++ apps/plugins/lib/pluginlib_actions.c	(working copy)
@@ -115,7 +115,8 @@
     || (CONFIG_KEYPAD == SANSA_E200_PAD) \
     || (CONFIG_KEYPAD == SANSA_FUZE_PAD) \
     || (CONFIG_KEYPAD == SAMSUNG_YH_PAD) \
-    || (CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD))
+    || (CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD) \
+    || (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD))
     { PLA_UP,               BUTTON_UP,                          BUTTON_NONE },
     { PLA_DOWN,             BUTTON_DOWN,                        BUTTON_NONE },
     { PLA_LEFT,             BUTTON_LEFT,                        BUTTON_NONE },
@@ -403,6 +404,12 @@
     {PLA_SELECT,            BUTTON_SELECT,                      BUTTON_NONE},
     {PLA_SELECT_REL,        BUTTON_SELECT|BUTTON_REL,           BUTTON_SELECT},
     {PLA_SELECT_REPEAT,     BUTTON_SELECT|BUTTON_REPEAT,        BUTTON_NONE},
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)                                      
+    {PLA_CANCEL,            BUTTON_BACK,                        BUTTON_NONE},
+    {PLA_EXIT,              BUTTON_BACK|BUTTON_REPEAT,          BUTTON_NONE},
+    {PLA_SELECT,            BUTTON_CENTER,                      BUTTON_NONE},
+    {PLA_SELECT_REL,        BUTTON_CENTER|BUTTON_REL,           BUTTON_CENTER},
+    {PLA_SELECT_REPEAT,     BUTTON_CENTER|BUTTON_REPEAT,        BUTTON_NONE},
 #else
 #   ifndef HAVE_TOUCHSCREEN
 #       error pluginlib_actions: No actions defined
Index: apps/plugins/snow.c
===================================================================
--- apps/plugins/snow.c	(revision 30811)
+++ apps/plugins/snow.c	(working copy)
@@ -90,6 +90,9 @@
 #elif CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD
 #define SNOW_QUIT BUTTON_POWER
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define SNOW_QUIT BUTTON_POWER
+
 #else
 #define SNOW_QUIT BUTTON_OFF
 #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
Index: apps/plugins/spacerocks.c
===================================================================
--- apps/plugins/spacerocks.c	(revision 30811)
+++ apps/plugins/spacerocks.c	(working copy)
@@ -268,6 +268,15 @@
 #define AST_RIGHT BUTTON_RIGHT
 #define AST_FIRE BUTTON_SELECT
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define AST_PAUSE BUTTON_BACK
+#define AST_QUIT BUTTON_POWER
+#define AST_THRUST BUTTON_UP
+#define AST_HYPERSPACE BUTTON_DOWN
+#define AST_LEFT BUTTON_LEFT
+#define AST_RIGHT BUTTON_RIGHT
+#define AST_FIRE BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/reversi/reversi-gui.h
===================================================================
--- apps/plugins/reversi/reversi-gui.h	(revision 30811)
+++ apps/plugins/reversi/reversi-gui.h	(working copy)
@@ -251,6 +251,14 @@
 #define REVERSI_BUTTON_MAKE_MOVE BUTTON_PLAYPAUSE
 #define REVERSI_BUTTON_MENU BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define REVERSI_BUTTON_UP BUTTON_UP
+#define REVERSI_BUTTON_DOWN BUTTON_DOWN
+#define REVERSI_BUTTON_LEFT BUTTON_LEFT
+#define REVERSI_BUTTON_RIGHT BUTTON_RIGHT 
+#define REVERSI_BUTTON_MAKE_MOVE BUTTON_CENTER
+#define REVERSI_BUTTON_MENU BUTTON_MENU
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/logo.c
===================================================================
--- apps/plugins/logo.c	(revision 30811)
+++ apps/plugins/logo.c	(working copy)
@@ -221,6 +221,13 @@
 #define LP_DEC_Y BUTTON_DOWN
 #define LP_INC_Y BUTTON_UP
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define LP_QUIT BUTTON_POWER
+#define LP_DEC_X BUTTON_LEFT
+#define LP_INC_X BUTTON_RIGHT
+#define LP_DEC_Y BUTTON_DOWN
+#define LP_INC_Y BUTTON_UP
+
 #else
 #define LP_QUIT BUTTON_OFF
 #define LP_DEC_X BUTTON_LEFT
Index: apps/plugins/brickmania.c
===================================================================
--- apps/plugins/brickmania.c	(revision 30811)
+++ apps/plugins/brickmania.c	(working copy)
@@ -275,6 +275,14 @@
 #define UP BUTTON_UP
 #define DOWN BUTTON_DOWN
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define QUIT BUTTON_BACK
+#define LEFT BUTTON_LEFT
+#define RIGHT BUTTON_RIGHT
+#define SELECT BUTTON_CENTER
+#define UP BUTTON_UP
+#define DOWN BUTTON_DOWN
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/blackjack.c
===================================================================
--- apps/plugins/blackjack.c	(revision 30811)
+++ apps/plugins/blackjack.c	(working copy)
@@ -465,6 +465,22 @@
 #define BJACK_RIGHT         BUTTON_RIGHT
 #define BJACK_LEFT          BUTTON_LEFT
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define BJACK_SELECT_NAME    "CENTER"
+#define BJACK_STAY_NAME     "BACK"
+#define BJACK_QUIT_NAME     "POWER"
+#define BJACK_DOUBLE_NAME   "USER"
+#define BJACK_SELECT        BUTTON_CENTER
+#define BJACK_QUIT          BUTTON_POWER
+#define BJACK_MAX           (BUTTON_LEFT|BUTTON_UP)
+#define BJACK_MIN           (BUTTON_RIGHT|BUTTON_DOWN)
+#define BJACK_STAY          BUTTON_BACK
+#define BJACK_DOUBLEDOWN    BUTTON_USER
+#define BJACK_UP            BUTTON_UP
+#define BJACK_DOWN          BUTTON_DOWN
+#define BJACK_RIGHT         BUTTON_RIGHT
+#define BJACK_LEFT          BUTTON_LEFT
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/stopwatch.c
===================================================================
--- apps/plugins/stopwatch.c	(revision 30811)
+++ apps/plugins/stopwatch.c	(working copy)
@@ -255,6 +255,14 @@
 #define STOPWATCH_SCROLL_UP BUTTON_UP
 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define STOPWATCH_QUIT BUTTON_POWER
+#define STOPWATCH_START_STOP BUTTON_CENTER
+#define STOPWATCH_RESET_TIMER BUTTON_USER
+#define STOPWATCH_LAP_TIMER BUTTON_MENU
+#define STOPWATCH_SCROLL_UP BUTTON_UP
+#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/fractals/fractal.h
===================================================================
--- apps/plugins/fractals/fractal.h	(revision 30811)
+++ apps/plugins/fractals/fractal.h	(working copy)
@@ -366,6 +366,18 @@
 #define FRACTAL_PRECISION_DEC   (BUTTON_PLAYPAUSE|BUTTON_RIGHT)
 #define FRACTAL_RESET           BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define FRACTAL_QUIT            BUTTON_BACK
+#define FRACTAL_UP              BUTTON_UP
+#define FRACTAL_DOWN            BUTTON_DOWN
+#define FRACTAL_LEFT            BUTTON_LEFT
+#define FRACTAL_RIGHT           BUTTON_RIGHT
+#define FRACTAL_ZOOM_IN         (BUTTON_MENU|BUTTON_REL)
+#define FRACTAL_ZOOM_OUT        (BUTTON_USER|BUTTON_REL)
+#define FRACTAL_PRECISION_INC   (BUTTON_MENU|BUTTON_REPEAT)
+#define FRACTAL_PRECISION_DEC   (BUTTON_USER|BUTTON_REPEAT)
+#define FRACTAL_RESET           BUTTON_POWER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/jewels.c
===================================================================
--- apps/plugins/jewels.c	(revision 30811)
+++ apps/plugins/jewels.c	(working copy)
@@ -313,6 +313,16 @@
 #define HK_SELECT "SELECT"
 #define HK_CANCEL "BACK"
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define JEWELS_UP     BUTTON_UP
+#define JEWELS_DOWN   BUTTON_DOWN
+#define JEWELS_LEFT   BUTTON_LEFT
+#define JEWELS_RIGHT  BUTTON_RIGHT
+#define JEWELS_SELECT BUTTON_CENTER
+#define JEWELS_CANCEL BUTTON_BACK
+#define HK_SELECT "CENTER"
+#define HK_CANCEL "BACK"
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/calculator.c
===================================================================
--- apps/plugins/calculator.c	(revision 30811)
+++ apps/plugins/calculator.c	(working copy)
@@ -418,6 +418,17 @@
 #define CALCULATOR_CALC  BUTTON_PLAYPAUSE
 #define CALCULATOR_CLEAR BUTTON_BACK
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+
+#define CALCULATOR_LEFT BUTTON_LEFT
+#define CALCULATOR_RIGHT BUTTON_RIGHT
+#define CALCULATOR_UP   BUTTON_UP
+#define CALCULATOR_DOWN BUTTON_DOWN
+#define CALCULATOR_QUIT BUTTON_POWER
+#define CALCULATOR_INPUT BUTTON_CENTER
+#define CALCULATOR_CALC BUTTON_MENU
+#define CALCULATOR_CLEAR BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
@@ -546,7 +557,7 @@
 } calStatus;
 
 /* constant table for CORDIC algorithm */
-static const double cordicTable[51][2]= {
+double cordicTable[51][2]= {
  /* pow(2,0) - pow(2,-50)             atan(pow(2,0) - atan(pow(2,-50) */
     {1e+00,                                    7.853981633974483e-01},
     {5e-01,                                    4.636476090008061e-01},
@@ -601,21 +612,21 @@
     {8.8817841970012523233890533447265625e-16, 8.881784197001252e-16}
 };
 
-static void doMultiple(double* operandOne, int* powerOne,
-                       double  operandTwo, int  powerTwo);
-static void doAdd (double* operandOne, int* powerOne,
-                   double  operandTwo, int  powerTwo);
-static void printResult(void);
-static void formatResult(void);
-static void oneOperand(void);
+void doMultiple(double* operandOne, int* powerOne,
+                double  operandTwo, int  powerTwo);
+void doAdd (double* operandOne, int* powerOne,
+            double  operandTwo, int  powerTwo);
+void printResult(void);
+void formatResult(void);
+void oneOperand(void);
 
-static void drawLines(void);
-static void drawButtons(int group);
+void drawLines(void);
+void drawButtons(int group);
 
 /* -----------------------------------------------------------------------
-Handy functions
+Handy funtions
 ----------------------------------------------------------------------- */
-static void cleartypingbuf(void)
+void cleartypingbuf(void)
 {
     int k;
     for( k=1; k<=(DIGITLEN+1); k++)
@@ -623,21 +634,21 @@
     typingbuf[0] = ' ';
     typingbufPointer = typingbuf+1;
 }
-static void clearbuf(void)
+void clearbuf(void)
 {
     int k;
     for(k=0;k<18;k++)
         buf[k]=' ';
     buf[18] = 0;
 }
-static void clearResult(void)
+void clearResult(void)
 {
     result = 0;
     power = 0;
     modifier = 0.1;
 }
 
-static void clearInput(void)
+void clearInput(void)
 {
     calStatus = cal_normal;
     clearResult();
@@ -647,25 +658,25 @@
     drawLines();
 }
 
-static void clearOperand(void)
+void clearOperand(void)
 {
     operand = 0;
     operandPower = 0;
 }
 
-static void clearMemTemp(void)
+void clearMemTemp(void)
 {
     memTemp = 0;
     memTempPower = 0;
 }
 
-static void clearOper(void)
+void clearOper(void)
 {
     oper = ' ';
     operInputted = false;
 }
 
-static void clearMem(void)
+void clearMem(void)
 {
     clearInput();
     clearMemTemp();
@@ -674,7 +685,7 @@
     btn = BUTTON_NONE;
 }
 
-static void switchOperands(void)
+void switchOperands(void)
 {
     double tempr = operand;
     int tempp = operandPower;
@@ -684,7 +695,7 @@
     power = tempp;
 }
 
-static void drawLines(void)
+void drawLines(void)
 {
     int i;
     rb->lcd_hline(0, LCD_WIDTH, Y_1_POS-1);
@@ -694,7 +705,7 @@
         rb->lcd_vline(X_1_POS+i*REC_WIDTH, Y_1_POS, LCD_HEIGHT);
 }
 
-static void drawButtons(int group)
+void drawButtons(int group)
 {
     int i, j, w, h;
     for (i = 0; i <= 4; i++){
@@ -722,7 +733,7 @@
 /* -----------------------------------------------------------------------
 Initiate calculator
 ----------------------------------------------------------------------- */
-static void cal_initial (void)
+void cal_initial (void)
 {
     int w,h;
 
@@ -761,7 +772,7 @@
    in it's private case for sqrt.
    Thanks BlueChip for his intro text and Dave Straayer for the actual name.
    ----------------------------------------------------------------------- */
-static double mySqrt(double square)
+double mySqrt(double square)
 {
     int k = 0;
     double temp = 0;
@@ -781,7 +792,7 @@
    transcendFunc can do sin,cos,log,exp
    input parameter is angle
 ----------------------------------------------------------------------- */
-static void transcendFunc(char* func, double* tt, int* ttPower)
+void transcendFunc(char* func, double* tt, int* ttPower)
 {
     double t = (*tt)*M_PI/180; int tPower = *ttPower;
     int sign = 1;
@@ -861,8 +872,8 @@
 /* -----------------------------------------------------------------------
    add in scientific number format
 ----------------------------------------------------------------------- */
-static void doAdd (double* operandOne, int* powerOne,
-                   double  operandTwo, int  powerTwo)
+void doAdd (double* operandOne, int* powerOne,
+            double  operandTwo, int  powerTwo)
 {
     if ( *powerOne >= powerTwo ){
         if (*powerOne - powerTwo <= DIGITLEN+1){
@@ -891,8 +902,8 @@
 /* -----------------------------------------------------------------------
 multiple in scientific number format
 ----------------------------------------------------------------------- */
-static void doMultiple(double* operandOne, int* powerOne,
-                       double  operandTwo, int  powerTwo)
+void doMultiple(double* operandOne, int* powerOne,
+                double  operandTwo, int  powerTwo)
 {
     (*operandOne) *= operandTwo;
     (*powerOne) += powerTwo;
@@ -901,7 +912,7 @@
 /* -----------------------------------------------------------------------
 Handles all one operand calculations
 ----------------------------------------------------------------------- */
-static void oneOperand(void)
+void oneOperand(void)
 {
     int k = 0;
     if (buttonGroup == basicButtons){
@@ -988,7 +999,7 @@
 /* -----------------------------------------------------------------------
 Handles all two operands calculations
 ----------------------------------------------------------------------- */
-static void twoOperands(void)
+void twoOperands(void)
 {
     switch(oper){
         case '-':
@@ -1048,7 +1059,7 @@
 Print buttons when switching 1st and 2nd
 int group = {basicButtons, sciButtons}
 ----------------------------------------------------------------------- */
-static void printButtonGroups(int group)
+void printButtonGroups(int group)
 {
     drawButtons(group);
     drawLines();
@@ -1057,7 +1068,7 @@
 /* -----------------------------------------------------------------------
 flash the currently marked button
 ----------------------------------------------------------------------- */
-static void flashButton(void)
+void flashButton(void)
 {
     int k, w, h;
     for (k=2;k>0;k--)
@@ -1083,8 +1094,7 @@
 /* -----------------------------------------------------------------------
 pos is the position that needs animation. pos = [1~18]
 ----------------------------------------------------------------------- */
-#if defined(CALCULATOR_CLEAR) || defined(CALCULATOR_OPERATORS)
-static void deleteAnimation(int pos)
+void deleteAnimation(int pos)
 {
     int k, w, h, x;
     if (pos<1 || pos >18)
@@ -1103,7 +1113,6 @@
         rb->sleep(HZ/32);
     }
 }
-#endif
 
 /* -----------------------------------------------------------------------
 result may be one of these formats:
@@ -1116,7 +1125,7 @@
 if result is close to 0, let it be 0;
 if result is close to 1, let it be 0.1 and power++;
 ----------------------------------------------------------------------- */
-static void formatResult(void)
+void formatResult(void)
 {
     int resultsign = SIGN(result);
     result = ABS(result);
@@ -1162,7 +1171,7 @@
 case temppower >  0:  print '.' in the middle
 case temppower <= 0:  print '.' in the begining
 ----------------------------------------------------------------------- */
-static void result2typingbuf(void)
+void result2typingbuf(void)
 {
     bool haveDot = false;
     char tempchar = 0;
@@ -1246,7 +1255,7 @@
 /* -----------------------------------------------------------------------
 printResult() generates LCD display.
 ----------------------------------------------------------------------- */
-static void printResult(void)
+void printResult(void)
 {
     int k, w, h;
 
@@ -1323,7 +1332,7 @@
 Process typing buttons: 1-9, '.', sign
 main operand "result" and typingbuf are processed seperately here.
 ----------------------------------------------------------------------- */
-static void typingProcess(void){
+void typingProcess(void){
     switch( CAL_BUTTON ){
         case btn_sign:
             if (calStatus == cal_typing ||
@@ -1397,8 +1406,7 @@
 Handle delete operation
 main operand "result" and typingbuf are processed seperately here.
 ----------------------------------------------------------------------- */
-#ifdef CALCULATOR_CLEAR
-static void doDelete(void){
+void doDelete(void){
     deleteAnimation(18);
     switch(calStatus){
         case cal_dotted:
@@ -1437,11 +1445,10 @@
             break;
     }
 }
-#endif
 /* -----------------------------------------------------------------------
 Handle buttons on basic screen
 ----------------------------------------------------------------------- */
-static void basicButtonsProcess(void){
+void basicButtonsProcess(void){
     switch (btn) {
         case CALCULATOR_INPUT:
             if (calStatus == cal_error && (CAL_BUTTON != btn_C) ) break;
@@ -1542,7 +1549,7 @@
 /* -----------------------------------------------------------------------
 Handle buttons on scientific screen
 ----------------------------------------------------------------------- */
-static void sciButtonsProcess(void){
+void sciButtonsProcess(void){
     switch (btn) {
         case CALCULATOR_INPUT:
             if (calStatus == cal_error && (CAL_BUTTON != sci_sci) ) break;
@@ -1617,7 +1624,7 @@
 move button index
 Invert display new button, invert back previous button
 ----------------------------------------------------------------------- */
-static int handleButton(int button){
+int handleButton(int button){
     switch(button)
     {
         case CALCULATOR_INPUT:
@@ -1725,6 +1732,9 @@
     }
 
     return 0;
+
+    prev_btn_row = btn_row;
+    prev_btn_col = btn_col;
 }
 
 /* -----------------------------------------------------------------------
Index: apps/plugins/SUBDIRS
===================================================================
--- apps/plugins/SUBDIRS	(revision 30811)
+++ apps/plugins/SUBDIRS	(working copy)
@@ -73,7 +73,7 @@
 #if defined(IRIVER_H300_SERIES) || defined(IRIVER_H100_SERIES) || \
     (CONFIG_KEYPAD == SANSA_FUZE_PAD) || (CONFIG_KEYPAD == SANSA_E200_PAD) || \
     (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \
-    (CONFIG_KEYPAD == IPOD_1G2G_PAD)
+    (CONFIG_KEYPAD == IPOD_1G2G_PAD || CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
 /* PDBox is confirmed to run on these player models. */
 pdbox
 #endif
Index: apps/plugins/rockpaint.c
===================================================================
--- apps/plugins/rockpaint.c	(revision 30811)
+++ apps/plugins/rockpaint.c	(working copy)
@@ -221,6 +221,17 @@
 #define ROCKPAINT_LEFT      BUTTON_LEFT
 #define ROCKPAINT_RIGHT     BUTTON_RIGHT
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define ROCKPAINT_QUIT      BUTTON_POWER
+#define ROCKPAINT_DRAW      BUTTON_CENTER
+#define ROCKPAINT_MENU      BUTTON_MENU
+#define ROCKPAINT_TOOLBAR   BUTTON_USER
+#define ROCKPAINT_TOOLBAR2  ( BUTTON_USER | BUTTON_REPEAT )
+#define ROCKPAINT_UP        BUTTON_UP
+#define ROCKPAINT_DOWN      BUTTON_DOWN
+#define ROCKPAINT_LEFT      BUTTON_LEFT
+#define ROCKPAINT_RIGHT     BUTTON_RIGHT
+
 #else
 #error "Please define keys for this keypad"
 #endif
Index: apps/plugins/pacbox/pacbox.h
===================================================================
--- apps/plugins/pacbox/pacbox.h	(revision 30811)
+++ apps/plugins/pacbox/pacbox.h	(working copy)
@@ -254,6 +254,17 @@
 #define PACMAN_COIN     BUTTON_PLAYPAUSE
 #define PACMAN_MENU     BUTTON_POWER
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+
+#define PACMAN_UP       BUTTON_UP
+#define PACMAN_DOWN     BUTTON_DOWN
+#define PACMAN_LEFT     BUTTON_LEFT
+#define PACMAN_RIGHT    BUTTON_RIGHT
+#define PACMAN_1UP      BUTTON_CENTER
+#define PACMAN_2UP      BUTTON_BACK
+#define PACMAN_COIN     BUTTON_USER
+#define PACMAN_MENU     BUTTON_MENU
+
 #else
 
 #error Keymap not defined!
Index: apps/plugins/fft/fft.c
===================================================================
--- apps/plugins/fft/fft.c	(revision 30811)
+++ apps/plugins/fft/fft.c	(working copy)
@@ -248,6 +248,14 @@
 #   define FFT_AMP_SCALE    BUTTON_PLAYPAUSE
 #   define FFT_QUIT         BUTTON_POWER
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#   define FFT_PREV_GRAPH   BUTTON_LEFT
+#   define FFT_NEXT_GRAPH   BUTTON_RIGHT
+#   define FFT_ORIENTATION  BUTTON_USER
+#   define FFT_WINDOW       BUTTON_MENU
+#   define FFT_AMP_SCALE    BUTTON_CENTER
+#   define FFT_QUIT         BUTTON_BACK
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/xobox.c
===================================================================
--- apps/plugins/xobox.c	(revision 30811)
+++ apps/plugins/xobox.c	(working copy)
@@ -268,6 +268,15 @@
 #define DOWN  BUTTON_DOWN
 #define PAUSE BUTTON_PLAYPAUSE
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+
+#define QUIT BUTTON_POWER
+#define LEFT BUTTON_LEFT
+#define RIGHT BUTTON_RIGHT
+#define UP BUTTON_UP
+#define DOWN BUTTON_DOWN
+#define PAUSE BUTTON_BACK
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/pong.c
===================================================================
--- apps/plugins/pong.c	(revision 30811)
+++ apps/plugins/pong.c	(working copy)
@@ -243,6 +243,14 @@
 #define PONG_RIGHT_UP BUTTON_UP
 #define PONG_RIGHT_DOWN BUTTON_RIGHT
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define PONG_QUIT BUTTON_POWER
+#define PONG_PAUSE BUTTON_CENTER
+#define PONG_LEFT_UP BUTTON_UP
+#define PONG_LEFT_DOWN BUTTON_DOWN
+#define PONG_RIGHT_UP BUTTON_UP
+#define PONG_RIGHT_DOWN BUTTON_DOWN
+
 #else
 #error No keymap defined!
 #endif
@@ -288,7 +296,7 @@
     struct player player[2];
 };
 
-static void singlepad(int x, int y, int set)
+void singlepad(int x, int y, int set)
 {
     if(set) {
         rb->lcd_fillrect(x, y, PAD_WIDTH, PAD_HEIGHT);
@@ -300,7 +308,7 @@
     }
 }
 
-static void pad(struct pong *p, int pad)
+void pad(struct pong *p, int pad)
 {
     struct player *player = &p->player[pad];
     /* clear existing pad */
@@ -313,7 +321,7 @@
     player->e_pad = player->w_pad;
 }
 
-static bool wallcollide(struct pong *p, int pad)
+bool wallcollide(struct pong *p, int pad)
 {
     /* we have already checked for pad-collision, just check if this hits
        the wall */
@@ -332,7 +340,7 @@
 /* returns true if the ball has hit a pad, and then the info variable
    will have extra angle info */
 
-static bool padcollide(struct pong *p, int pad, int *info)
+bool padcollide(struct pong *p, int pad, int *info)
 {
     struct player *player = &p->player[pad];
     int x = p->ball.x/RES;
@@ -366,7 +374,7 @@
     return false; /* nah */
 }
 
-static void bounce(struct pong *p, int pad, int info)
+void bounce(struct pong *p, int pad, int info)
 {
     p->ball.speedx = -p->ball.speedx;
 
@@ -410,7 +418,7 @@
 #endif
 }
 
-static void score(struct pong *p, int pad)
+void score(struct pong *p, int pad)
 {
     if(pad)
         rb->splash(HZ/4, "right scores!");
@@ -436,7 +444,7 @@
     p->player[1].e_pad = -1;
 }
 
-static void ball(struct pong *p)
+void ball(struct pong *p)
 {
     int oldx = p->ball.x/RES;
     int oldy = p->ball.y/RES;
@@ -487,7 +495,7 @@
     rb->lcd_fillrect(newx, newy, BALL_WIDTH, BALL_HEIGHT);
 }
 
-static void padmove(int *pos, int dir)
+void padmove(int *pos, int dir)
 {
     *pos += dir;
     if(*pos > (LCD_HEIGHT-PAD_HEIGHT))
@@ -496,7 +504,7 @@
         *pos = 0;
 }
 
-static void key_pad(struct pong *p, int pad, int up, int down)
+void key_pad(struct pong *p, int pad, int up, int down)
 {
     struct player *player = &p->player[pad];
     if(player->iscpu) {
@@ -526,7 +534,7 @@
     }
 }
 
-static int keys(struct pong *p)
+int keys(struct pong *p)
 {
     int key;
 #ifdef PONG_PAUSE
@@ -609,7 +617,7 @@
     return 1; /* return 0 to exit game */
 }
 
-static void showscore(struct pong *p)
+void showscore(struct pong *p)
 {
     static char buffer[20];
     int w;
@@ -620,7 +628,7 @@
     rb->lcd_putsxy( (LCD_WIDTH / 2) - (w / 2), 0, (unsigned char *)buffer);
 }
 
-static void blink_demo(void)
+void blink_demo(void)
 {
     static char buffer[30];
     int w;
Index: apps/plugins/text_viewer/tv_button.h
===================================================================
--- apps/plugins/text_viewer/tv_button.h	(revision 30811)
+++ apps/plugins/text_viewer/tv_button.h	(working copy)
@@ -424,6 +424,16 @@
 #define TV_AUTOSCROLL   BUTTON_BACK
 #define TV_BOOKMARK     BUTTON_PLAYPAUSE
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define TV_QUIT         BUTTON_BACK
+#define TV_SCROLL_UP    BUTTON_UP
+#define TV_SCROLL_DOWN  BUTTON_DOWN
+#define TV_SCREEN_LEFT  BUTTON_LEFT
+#define TV_SCREEN_RIGHT BUTTON_RIGHT
+#define TV_MENU         BUTTON_MENU
+#define TV_AUTOSCROLL   BUTTON_USER
+#define TV_BOOKMARK     BUTTON_CENTER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/pegbox.c
===================================================================
--- apps/plugins/pegbox.c	(revision 30811)
+++ apps/plugins/pegbox.c	(working copy)
@@ -491,6 +491,24 @@
 #define LVL_DOWN_TEXT "Vol-"
 #define SELECT_TEXT "SELECT"
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define PEGBOX_SELECT   BUTTON_CENTER
+#define PEGBOX_QUIT     BUTTON_BACK
+#define PEGBOX_RESTART  BUTTON_MENU
+#define PEGBOX_LVL_UP   BUTTON_USER
+#define PEGBOX_LVL_DOWN BUTTON_POWER
+#define PEGBOX_UP       BUTTON_UP
+#define PEGBOX_DOWN     BUTTON_DOWN
+#define PEGBOX_RIGHT    BUTTON_RIGHT
+#define PEGBOX_LEFT     BUTTON_LEFT
+
+#define SAVE_TEXT "PLAYPAUSE"
+#define QUIT_TEXT "POWER"
+#define RESTART_TEXT "BACK"
+#define LVL_UP_TEXT "Vol+"
+#define LVL_DOWN_TEXT "Vol-"
+#define SELECT_TEXT "SELECT"
+
 #else
 #error Unsupported keymap!
 #endif
Index: apps/plugins/sudoku/sudoku.h
===================================================================
--- apps/plugins/sudoku/sudoku.h	(revision 30811)
+++ apps/plugins/sudoku/sudoku.h	(working copy)
@@ -318,6 +318,15 @@
 #define SUDOKU_BUTTON_TOGGLEBACK BUTTON_DOWN
 #define SUDOKU_BUTTON_POSSIBLE   BUTTON_PLAYPAUSE
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define SUDOKU_BUTTON_MENU       BUTTON_MENU
+#define SUDOKU_BUTTON_LEFT       BUTTON_LEFT
+#define SUDOKU_BUTTON_RIGHT      BUTTON_RIGHT
+#define SUDOKU_BUTTON_CHANGEDIR  BUTTON_CENTER
+#define SUDOKU_BUTTON_TOGGLE     BUTTON_UP
+#define SUDOKU_BUTTON_TOGGLEBACK BUTTON_DOWN
+#define SUDOKU_BUTTON_POSSIBLE   BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/zxbox/zxbox_keyb.c
===================================================================
--- apps/plugins/zxbox/zxbox_keyb.c	(revision 30811)
+++ apps/plugins/zxbox/zxbox_keyb.c	(working copy)
@@ -231,6 +231,24 @@
 #define KBD_UP     BUTTON_UP
 #define KBD_DOWN   BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == SANSA_FUZEPLUS_PAD
+
+#define KBD_SELECT BUTTON_CENTER
+#define KBD_ABORT  BUTTON_BACK
+#define KBD_LEFT   BUTTON_LEFT
+#define KBD_RIGHT  BUTTON_RIGHT
+#define KBD_UP     BUTTON_UP
+#define KBD_DOWN   BUTTON_DOWN
+
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+
+#define KBD_SELECT BUTTON_CENTER
+#define KBD_ABORT  BUTTON_BACK
+#define KBD_LEFT   BUTTON_LEFT
+#define KBD_RIGHT  BUTTON_RIGHT
+#define KBD_UP     BUTTON_UP
+#define KBD_DOWN   BUTTON_DOWN
+
 #endif
 
 #ifdef HAVE_TOUCHSCREEN
Index: apps/plugins/zxbox/keymaps.h
===================================================================
--- apps/plugins/zxbox/keymaps.h	(revision 30811)
+++ apps/plugins/zxbox/keymaps.h	(working copy)
@@ -225,6 +225,15 @@
 #define ZX_LEFT         BUTTON_LEFT
 #define ZX_RIGHT        BUTTON_RIGHT
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+
+#define ZX_MENU         BUTTON_MENU
+#define ZX_UP           BUTTON_UP
+#define ZX_DOWN         BUTTON_DOWN
+#define ZX_SELECT       BUTTON_CENTER
+#define ZX_LEFT         BUTTON_LEFT
+#define ZX_RIGHT        BUTTON_RIGHT
+
 #else
 #error Keymap not defined!
 
Index: apps/plugins/rockblox1d.c
===================================================================
--- apps/plugins/rockblox1d.c	(revision 30811)
+++ apps/plugins/rockblox1d.c	(working copy)
@@ -133,6 +133,10 @@
 #define ONEDROCKBLOX_DOWN              BUTTON_BOTTOMMIDDLE
 #define ONEDROCKBLOX_QUIT              BUTTON_POWER
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define ONEDROCKBLOX_DOWN              BUTTON_CENTER
+#define ONEDROCKBLOX_QUIT              BUTTON_POWER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/battery_bench.c
===================================================================
--- apps/plugins/battery_bench.c	(revision 30811)
+++ apps/plugins/battery_bench.c	(working copy)
@@ -235,6 +235,13 @@
 #define BATTERY_ON_TXT  "PLAYPAUSE - start"
 #define BATTERY_OFF_TXT "POWER"
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+
+#define BATTERY_ON  BUTTON_USER
+#define BATTERY_OFF BUTTON_POWER
+#define BATTERY_ON_TXT  "User Key - start"
+#define BATTERY_OFF_TXT "Power Key"
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/fireworks.c
===================================================================
--- apps/plugins/fireworks.c	(revision 30811)
+++ apps/plugins/fireworks.c	(working copy)
@@ -130,6 +130,10 @@
 #define BTN_MENU BUTTON_SELECT
 #define BTN_FIRE BUTTON_PLAYPAUSE
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define BTN_MENU BUTTON_MENU
+#define BTN_FIRE BUTTON_CENTER
+
 #elif defined(HAVE_TOUCHSCREEN)
     /* This is a touchscreen target */
 #else
@@ -320,7 +324,7 @@
                     "FPS (Speed)", "Playback Control", "Quit");
 
 /* called on startup. initializes all variables, etc */
-static void init_all(void)
+void init_all(void)
 {
     int j;
 
@@ -333,7 +337,7 @@
 
 /* called when a rocket hits its destination height.
  * prepares all associated fireworks to be expelled. */
-static void init_explode(int x, int y, int firework, int points)
+void init_explode(int x, int y, int firework, int points)
 {
     int i;
 
@@ -357,7 +361,7 @@
 
 /* called when a rocket is launched.
  * prepares said rocket to start moving towards its destination. */
-static void init_rocket(int rocket)
+void init_rocket(int rocket)
 {
     rb->srand(*rb->current_tick);
 
@@ -374,7 +378,7 @@
 }
 
 /* startup/configuration menu. */
-static void fireworks_menu(void)
+void fireworks_menu(void)
 {
     int selected = 0, result;
     bool menu_quit = false;
Index: apps/plugins/rockblox.c
===================================================================
--- apps/plugins/rockblox.c	(revision 30811)
+++ apps/plugins/rockblox.c	(working copy)
@@ -369,6 +369,18 @@
 #define ROCKBLOX_DROP          BUTTON_PLAYPAUSE
 #define ROCKBLOX_RESTART       BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+
+#define ROCKBLOX_OFF           BUTTON_BACK
+#define ROCKBLOX_ROTATE_CCW    BUTTON_MENU
+#define ROCKBLOX_ROTATE_CW     BUTTON_USER
+#define ROCKBLOX_ROTATE        BUTTON_UP
+#define ROCKBLOX_DOWN          BUTTON_DOWN
+#define ROCKBLOX_LEFT          BUTTON_LEFT
+#define ROCKBLOX_RIGHT         BUTTON_RIGHT
+#define ROCKBLOX_DROP          BUTTON_CENTER
+#define ROCKBLOX_RESTART       BUTTON_POWER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/mpegplayer/mpegplayer.c
===================================================================
--- apps/plugins/mpegplayer/mpegplayer.c	(revision 30811)
+++ apps/plugins/mpegplayer/mpegplayer.c	(working copy)
@@ -353,6 +353,15 @@
 #define MPEG_RW         BUTTON_LEFT
 #define MPEG_FF         BUTTON_RIGHT
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define MPEG_MENU       BUTTON_MENU
+#define MPEG_PAUSE      (BUTTON_CENTER | BUTTON_REL)
+#define MPEG_STOP       (BUTTON_CENTER | BUTTON_REPEAT)
+#define MPEG_VOLDOWN    BUTTON_DOWN
+#define MPEG_VOLUP      BUTTON_UP
+#define MPEG_RW         BUTTON_LEFT
+#define MPEG_FF         BUTTON_RIGHT
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/mpegplayer/mpeg_settings.c
===================================================================
--- apps/plugins/mpegplayer/mpeg_settings.c	(revision 30811)
+++ apps/plugins/mpegplayer/mpeg_settings.c	(working copy)
@@ -240,6 +240,14 @@
 #define MPEG_START_TIME_DOWN        BUTTON_DOWN
 #define MPEG_START_TIME_EXIT        BUTTON_POWER
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define MPEG_START_TIME_SELECT      BUTTON_CENTER
+#define MPEG_START_TIME_LEFT        BUTTON_LEFT
+#define MPEG_START_TIME_RIGHT       BUTTON_RIGHT
+#define MPEG_START_TIME_UP          BUTTON_UP
+#define MPEG_START_TIME_DOWN        BUTTON_DOWN
+#define MPEG_START_TIME_EXIT        BUTTON_BACK
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/solitaire.c
===================================================================
--- apps/plugins/solitaire.c	(revision 30811)
+++ apps/plugins/solitaire.c	(working copy)
@@ -526,6 +526,24 @@
 #   define HK_CUR2STACK      "DOUBLE SELECT"
 #   define HK_REM2STACK      "LEFT"
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#   define SOL_QUIT         BUTTON_POWER
+#   define SOL_UP           BUTTON_UP
+#   define SOL_DOWN         BUTTON_DOWN
+#   define SOL_LEFT         BUTTON_LEFT
+#   define SOL_RIGHT        BUTTON_RIGHT
+#   define SOL_MOVE_PRE     BUTTON_CENTER
+#   define SOL_MOVE         (BUTTON_CENTER | BUTTON_REL)
+#   define SOL_DRAW         BUTTON_MENU
+#   define SOL_REM2CUR      (BUTTON_LEFT | BUTTON_USER)
+#   define SOL_CUR2STACK    (BUTTON_CENTER | BUTTON_REPEAT)
+#   define SOL_REM2STACK    (BUTTON_RIGHT | BUTTON_USER)
+#   define HK_MOVE         "Center"
+#   define HK_DRAW         "Menu"
+#   define HK_REM2CUR      "A+LEFT"
+#   define HK_CUR2STACK    "Center.."
+#   define HK_REM2STACK    "A+RIGHT"
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/goban/goban.h
===================================================================
--- apps/plugins/goban/goban.h	(revision 30811)
+++ apps/plugins/goban/goban.h	(working copy)
@@ -351,6 +351,16 @@
 #define  GBN_BUTTON_PLAY               BUTTON_SELECT
 #define  GBN_BUTTON_MENU               BUTTON_POWER
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define  GBN_BUTTON_UP                 BUTTON_UP
+#define  GBN_BUTTON_DOWN               BUTTON_DOWN
+#define  GBN_BUTTON_LEFT               BUTTON_LEFT
+#define  GBN_BUTTON_RIGHT              BUTTON_RIGHT
+#define  GBN_BUTTON_RETREAT            BUTTON_BACK
+#define  GBN_BUTTON_ADVANCE            BUTTON_USER
+#define  GBN_BUTTON_PLAY               BUTTON_CENTER
+#define  GBN_BUTTON_MENU               BUTTON_MENU
+
 #else
 #error Unsupported keypad
 #endif
Index: apps/plugins/calendar.c
===================================================================
--- apps/plugins/calendar.c	(revision 30811)
+++ apps/plugins/calendar.c	(working copy)
@@ -298,6 +298,16 @@
 #define CALENDAR_NEXT_MONTH BUTTON_PLAYPAUSE
 #define CALENDAR_PREV_MONTH BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define CALENDAR_QUIT       BUTTON_POWER
+#define CALENDAR_SELECT     BUTTON_CENTER
+#define CALENDAR_NEXT_WEEK  BUTTON_DOWN
+#define CALENDAR_PREV_WEEK  BUTTON_UP
+#define CALENDAR_NEXT_DAY   BUTTON_RIGHT
+#define CALENDAR_PREV_DAY   BUTTON_LEFT
+#define CALENDAR_NEXT_MONTH BUTTON_BACK
+#define CALENDAR_PREV_MONTH BUTTON_USER
+
 #else
 #error "No keypad setting."
 #endif
Index: apps/plugins/star.c
===================================================================
--- apps/plugins/star.c	(revision 30811)
+++ apps/plugins/star.c	(working copy)
@@ -463,6 +463,23 @@
 #define STAR_LEVEL_DOWN_NAME "Vol-"
 #define STAR_LEVEL_REPEAT_NAME "BACK LONG"
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+
+#define STAR_QUIT           BUTTON_POWER
+#define STAR_LEFT           BUTTON_LEFT
+#define STAR_RIGHT          BUTTON_RIGHT
+#define STAR_UP             BUTTON_UP
+#define STAR_DOWN           BUTTON_DOWN
+#define STAR_TOGGLE_CONTROL BUTTON_CENTER
+#define STAR_LEVEL_UP       BUTTON_BACK
+#define STAR_LEVEL_DOWN     BUTTON_USER
+#define STAR_LEVEL_REPEAT   BUTTON_MENU
+#define STAR_TOGGLE_CONTROL_NAME "SELECT"
+#define STAR_QUIT_NAME      "POWER"
+#define STAR_LEVEL_UP_NAME  "VOL UP"
+#define STAR_LEVEL_DOWN_NAME "VOL DOWN"
+#define STAR_LEVEL_REPEAT_NAME "A"
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/doom/i_video.c
===================================================================
--- apps/plugins/doom/i_video.c	(revision 30811)
+++ apps/plugins/doom/i_video.c	(working copy)
@@ -414,6 +414,17 @@
 #define DOOMBUTTON_ENTER   (BUTTON_PLAYPAUSE|BUTTON_REPEAT)
 #define DOOMBUTTON_WEAPON  (BUTTON_SELECT|BUTTON_REPEAT)
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define DOOMBUTTON_UP      BUTTON_UP
+#define DOOMBUTTON_DOWN    BUTTON_DOWN
+#define DOOMBUTTON_LEFT    BUTTON_LEFT
+#define DOOMBUTTON_RIGHT   BUTTON_RIGHT
+#define DOOMBUTTON_SHOOT   BUTTON_CENTER
+#define DOOMBUTTON_OPEN    BUTTON_MENU
+#define DOOMBUTTON_ESC     BUTTON_BACK
+#define DOOMBUTTON_ENTER   BUTTON_POWER
+#define DOOMBUTTON_WEAPON  BUTTON_USER
+
 #else
 #error Keymap not defined!
 #endif
Index: apps/plugins/imageviewer/imageviewer_button.h
===================================================================
--- apps/plugins/imageviewer/imageviewer_button.h	(revision 30811)
+++ apps/plugins/imageviewer/imageviewer_button.h	(working copy)
@@ -364,6 +364,18 @@
 #define IMGVIEW_MENU        BUTTON_SELECT
 #define IMGVIEW_QUIT        BUTTON_POWER
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define IMGVIEW_ZOOM_IN     (BUTTON_UP|BUTTON_USER)
+#define IMGVIEW_ZOOM_OUT    (BUTTON_DOWN|BUTTON_USER)
+#define IMGVIEW_UP          BUTTON_UP
+#define IMGVIEW_DOWN        BUTTON_DOWN
+#define IMGVIEW_LEFT        BUTTON_LEFT
+#define IMGVIEW_RIGHT       BUTTON_RIGHT
+#define IMGVIEW_NEXT        BUTTON_MENU
+#define IMGVIEW_PREVIOUS    BUTTON_USER
+#define IMGVIEW_MENU        BUTTON_CENTER
+#define IMGVIEW_QUIT        BUTTON_BACK
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/vu_meter.c
===================================================================
--- apps/plugins/vu_meter.c	(revision 30811)
+++ apps/plugins/vu_meter.c	(working copy)
@@ -327,6 +327,17 @@
 #define LABEL_MENU "BACK"
 #define LABEL_VOLUME "UP/DOWN"
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define VUMETER_QUIT BUTTON_BACK
+#define VUMETER_HELP BUTTON_USER
+#define VUMETER_MENU BUTTON_MENU
+#define VUMETER_UP   BUTTON_UP
+#define VUMETER_DOWN BUTTON_DOWN
+#define LABEL_HELP   "User"
+#define LABEL_QUIT   "Back"
+#define LABEL_MENU   "Menu"
+#define LABEL_VOLUME "Up/Down"
+
 #else
 #error No keymap defined!
 #endif
@@ -433,7 +444,7 @@
     int digital_decay; 
 } vumeter_settings;
 
-static void reset_settings(void) {
+void reset_settings(void) {
     vumeter_settings.meter_type=ANALOG;
     vumeter_settings.analog_use_db_scale=true;
     vumeter_settings.digital_use_db_scale=true;
@@ -443,7 +454,7 @@
     vumeter_settings.digital_decay=0; 
 }
 
-static void calc_scales(void)
+void calc_scales(void)
 {
     unsigned int fx_log_factor = E_POW_5/half_width;
     unsigned int y,z;
@@ -477,7 +488,7 @@
     }
 }
 
-static void load_settings(void) {
+void load_settings(void) {
     int fp = rb->open(PLUGIN_DEMOS_DATA_DIR "/.vu_meter", O_RDONLY);
     if(fp>=0) {
             rb->read(fp, &vumeter_settings, sizeof(struct saved_settings));
@@ -489,7 +500,7 @@
     }
 }
 
-static void save_settings(void) {
+void save_settings(void) {
     int fp = rb->creat(PLUGIN_DEMOS_DATA_DIR "/.vu_meter", 0666);
     if(fp >= 0) {
         rb->write (fp, &vumeter_settings, sizeof(struct saved_settings));
@@ -497,7 +508,7 @@
     }
 }
 
-static void change_volume(int delta) {
+void change_volume(int delta) {
     int minvol = rb->sound_min(SOUND_VOLUME);
     int maxvol = rb->sound_max(SOUND_VOLUME);
     int vol = rb->global_settings->volume + delta;
@@ -602,7 +613,7 @@
     return exit;
 }
 
-static void draw_analog_minimeters(void) {
+void draw_analog_minimeters(void) {
     rb->lcd_mono_bitmap(sound_speaker, quarter_width-28, 12, 4, 8);
     rb->lcd_set_drawmode(DRMODE_FG);
     if(analog_mini_1<left_needle_top_x)
@@ -628,7 +639,7 @@
     rb->lcd_set_drawmode(DRMODE_SOLID);
 }
 
-static void draw_digital_minimeters(void) {
+void draw_digital_minimeters(void) {
 #ifdef HAVE_LCD_COLOR
     rb->lcd_set_foreground(LCD_RGBPACK(255, 255 - 23 * num_left_leds, 0));
 #endif
@@ -664,7 +675,7 @@
 #endif
 }
 
-static void analog_meter(void) {
+void analog_meter(void) {
 
 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
     int left_peak = rb->mas_codec_readreg(0xC);
@@ -723,7 +734,7 @@
     }
 }
 
-static void digital_meter(void) {
+void digital_meter(void) {
 #if (CONFIG_CODEC == MAS3587F) || (CONFIG_CODEC == MAS3539F)
     int left_peak = rb->mas_codec_readreg(0xC);
     int right_peak = rb->mas_codec_readreg(0xD);
Index: apps/plugins/rockboy/rockboy.c
===================================================================
--- apps/plugins/rockboy/rockboy.c	(revision 30811)
+++ apps/plugins/rockboy/rockboy.c	(working copy)
@@ -330,6 +330,18 @@
         options.SELECT = (BUTTON_PLAYPAUSE | BUTTON_REPEAT);
         options.MENU   = (BUTTON_SELECT | BUTTON_REPEAT);
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+        options.UP     = BUTTON_UP;
+        options.DOWN   = BUTTON_DOWN;
+        options.LEFT   = BUTTON_LEFT;
+        options.RIGHT  = BUTTON_RIGHT;
+
+        options.A      = BUTTON_CENTER;
+        options.B      = BUTTON_BACK;
+        options.START  = BUTTON_POWER;
+        options.SELECT = BUTTON_USER;
+        options.MENU   = BUTTON_MENU;
+
 #else
 #error No Keymap Defined!
 #endif
Index: apps/plugins/lamp.c
===================================================================
--- apps/plugins/lamp.c	(revision 30811)
+++ apps/plugins/lamp.c	(working copy)
@@ -140,6 +140,12 @@
 #   define LAMP_UP         BUTTON_UP
 #   define LAMP_DOWN       BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#   define LAMP_LEFT       BUTTON_LEFT
+#   define LAMP_RIGHT      BUTTON_RIGHT
+#   define LAMP_UP         BUTTON_UP
+#   define LAMP_DOWN       BUTTON_DOWN
+
 #else
 #   error Missing key definitions for this keypad
 #endif
Index: apps/plugins/sokoban.c
===================================================================
--- apps/plugins/sokoban.c	(revision 30811)
+++ apps/plugins/sokoban.c	(working copy)
@@ -511,6 +511,21 @@
 #define BUTTON_SAVE          (BUTTON_SELECT|BUTTON_REPEAT)
 #define BUTTON_SAVE_NAME "SELECT LONG"
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define SOKOBAN_LEFT BUTTON_LEFT
+#define SOKOBAN_RIGHT BUTTON_RIGHT
+#define SOKOBAN_UP BUTTON_UP
+#define SOKOBAN_DOWN BUTTON_DOWN
+#define SOKOBAN_MENU BUTTON_MENU
+#define SOKOBAN_UNDO BUTTON_BACK
+#define SOKOBAN_REDO BUTTON_USER
+//#define SOKOBAN_LEVEL_DOWN (BUTTON_POWER|BUTTON_REL)
+//#define SOKOBAN_LEVEL_REPEAT (BUTTON_CENTER|BUTTON_REPEAT)
+//#define SOKOBAN_LEVEL_UP (BUTTON_MENU|BUTTON_REPEAT)
+#define SOKOBAN_PAUSE (BUTTON_POWER|BUTTON_REPEAT)
+#define BUTTON_SAVE BUTTON_CENTER
+#define BUTTON_SAVE_NAME "CENTER"
+
 #else
 #error No keymap defined!
 #endif
@@ -1383,6 +1398,7 @@
 {
     int button;
     int selection = 0;
+    int i;
     bool menu_quit;
     int start_selected = 0;
     int prev_level = current_info.level.index;
Index: apps/plugins/chopper.c
===================================================================
--- apps/plugins/chopper.c	(revision 30811)
+++ apps/plugins/chopper.c	(working copy)
@@ -178,6 +178,11 @@
 #define ACTION BUTTON_SELECT
 #define ACTIONTEXT "SELECT"
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define QUIT BUTTON_BACK
+#define ACTION BUTTON_CENTER
+#define ACTIONTEXT "CENTER"
+
 #else
 #error No keymap defined!
 #endif
@@ -290,7 +295,8 @@
 static void chopDrawParticle(struct CParticle *mParticle);
 static void chopDrawBlock(struct CBlock *mBlock);
 static void chopRenderTerrain(struct CTerrain *ter, bool isground);
-static void chopper_load(bool newgame);
+void chopper_load(bool newgame);
+void cleanup_chopper(void);
 
 static void chopDrawPlayer(int x,int y) /* These are SCREEN coords, not world!*/
 {
@@ -334,7 +340,7 @@
 }
 
 
-static int iR(int low,int high)
+int iR(int low,int high)
 {
     return low+rb->rand()%(high-low+1);
 }
@@ -393,7 +399,7 @@
 
 }
 
-static int chopUpdateTerrainRecycling(struct CTerrain *ter)
+int chopUpdateTerrainRecycling(struct CTerrain *ter)
 {
     int i=1;
     int iNewNodePos,g,v;
@@ -424,7 +430,7 @@
     return 1;
 }
 
-static int chopTerrainHeightAtPoint(struct CTerrain *ter, int pX)
+int chopTerrainHeightAtPoint(struct CTerrain *ter, int pX)
 {
 
     int iNodeIndexOne=0,iNodeIndexTwo=0, h, terY1, terY2, terX2, a, b;
@@ -461,7 +467,7 @@
 
 }
 
-static int chopPointInTerrain(struct CTerrain *ter, int pX, int pY, int iTestType)
+int chopPointInTerrain(struct CTerrain *ter, int pX, int pY, int iTestType)
 {
     int h = chopTerrainHeightAtPoint(ter, pX);
 
@@ -989,7 +995,7 @@
     }
 }
 
-static void chopper_load(bool newgame)
+void chopper_load(bool newgame)
 {
 
     int i;
Index: apps/plugins/matrix.c
===================================================================
--- apps/plugins/matrix.c	(revision 30811)
+++ apps/plugins/matrix.c	(working copy)
@@ -175,6 +175,12 @@
 #define MATRIX_SLEEP_LESS BUTTON_DOWN
 #define MATRIX_PAUSE BUTTON_PLAYPAUSE
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define MATRIX_EXIT BUTTON_POWER
+#define MATRIX_SLEEP_MORE BUTTON_UP
+#define MATRIX_SLEEP_LESS BUTTON_DOWN
+#define MATRIX_PAUSE BUTTON_CENTER
+
 #else
 #error Unsupported keypad
 #endif
Index: apps/plugins/chip8.c
===================================================================
--- apps/plugins/chip8.c	(revision 30811)
+++ apps/plugins/chip8.c	(working copy)
@@ -1180,6 +1180,18 @@
 #define CHIP8_KEY8 BUTTON_VOL_DOWN
 #define CHIP8_KEY9 BUTTON_VOL_UP
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+#define CHIP8_OFF  (BUTTON_POWER|BUTTON_REPEAT)
+#define CHIP8_KEY1 BUTTON_MENU
+#define CHIP8_KEY2 BUTTON_UP
+#define CHIP8_KEY3 BUTTON_DOWN
+#define CHIP8_KEY4 BUTTON_LEFT
+#define CHIP8_KEY5 BUTTON_CENTER
+#define CHIP8_KEY6 BUTTON_RIGHT
+#define CHIP8_KEY7 BUTTON_BACK
+#define CHIP8_KEY8 BUTTON_POWER
+#define CHIP8_KEY9 BUTTON_USER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/chessclock.c
===================================================================
--- apps/plugins/chessclock.c	(revision 30811)
+++ apps/plugins/chessclock.c	(working copy)
@@ -316,6 +316,16 @@
 #define CHC_SETTINGS_OK BUTTON_SELECT
 #define CHC_SETTINGS_CANCEL BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define CHC_QUIT BUTTON_BACK
+#define CHC_STARTSTOP BUTTON_CENTER
+#define CHC_RESET BUTTON_USER
+#define CHC_MENU BUTTON_MENU
+#define CHC_SETTINGS_INC BUTTON_UP
+#define CHC_SETTINGS_DEC BUTTON_DOWN
+#define CHC_SETTINGS_OK BUTTON_CENTER
+#define CHC_SETTINGS_CANCEL BUTTON_BACK
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/mosaique.c
===================================================================
--- apps/plugins/mosaique.c	(revision 30811)
+++ apps/plugins/mosaique.c	(working copy)
@@ -188,6 +188,11 @@
 #define MOSAIQUE_SPEED BUTTON_PLAYPAUSE
 #define MOSAIQUE_RESTART BUTTON_BACK
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+#define MOSAIQUE_QUIT BUTTON_POWER
+#define MOSAIQUE_SPEED BUTTON_USER
+#define MOSAIQUE_RESTART BUTTON_CENTER
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/wormlet.c
===================================================================
--- apps/plugins/wormlet.c	(revision 30811)
+++ apps/plugins/wormlet.c	(working copy)
@@ -310,6 +310,16 @@
 #define BTN_QUIT BUTTON_POWER
 #define BTN_STOPRESET BUTTON_BACK
 
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+
+#define BTN_DIR_UP BUTTON_UP
+#define BTN_DIR_DOWN BUTTON_DOWN
+#define BTN_DIR_LEFT BUTTON_LEFT
+#define BTN_DIR_RIGHT BUTTON_RIGHT
+#define BTN_STARTPAUSE BUTTON_CENTER
+#define BTN_QUIT BUTTON_POWER
+#define BTN_STOPRESET BUTTON_MENU
+
 #else
 #error No keymap defined!
 #endif
Index: apps/plugins/invadrox.c
===================================================================
--- apps/plugins/invadrox.c	(revision 30811)
+++ apps/plugins/invadrox.c	(working copy)
@@ -227,6 +227,13 @@
 #define RIGHT BUTTON_RIGHT
 #define FIRE  BUTTON_SELECT
 
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+
+#define QUIT BUTTON_BACK
+#define LEFT BUTTON_LEFT
+#define RIGHT BUTTON_RIGHT
+#define FIRE BUTTON_CENTER
+
 #else
     #error INVADROX: Unsupported keypad
 #endif
@@ -740,7 +747,7 @@
 
 
 /* Draw "digits" least significant digits of num at (x,y) */
-static void draw_number(int x, int y, int num, int digits)
+void draw_number(int x, int y, int num, int digits)
 {
     int i;
     int d;
@@ -770,13 +777,13 @@
 }
 
 
-static void draw_level(void)
+void draw_level(void)
 {
     draw_number(LEVEL_X + 2 * NUM_SPACING, PLAYFIELD_Y + 2, level, 2);
 }
 
 
-static void draw_lives(void)
+void draw_lives(void)
 {
     int i;
     /* Lives num */
@@ -872,7 +879,7 @@
  * Set curr_alien to first alive.
  * Return false if no-one is left alive.
  */
-static bool first_alien(void)
+bool first_alien(void)
 {
     int i, y;
 
@@ -892,7 +899,7 @@
 }
 
 
-static bool move_aliens(void)
+bool move_aliens(void)
 {
     int x, y, old_x, old_y;
 
@@ -1023,7 +1030,7 @@
 }
 
 
-static void move_fire(void)
+void move_fire(void)
 {
     bool hit_green = false;
     bool hit_white = false;
@@ -1244,7 +1251,7 @@
 }
 
 
-static void move_bombs(void)
+void move_bombs(void)
 {
     int i, j, bomber;
     bool abort;
@@ -1410,7 +1417,7 @@
 
 
 /* Unidentified Flying Object */
-static void move_ufo(void)
+void move_ufo(void)
 {
     static int ufo_speed;
     static int counter;
@@ -1483,7 +1490,7 @@
 }
 
 
-static void draw_background(void)
+void draw_background(void)
 {
 
     rb->lcd_bitmap(invadrox_background, 0, 0, LCD_WIDTH, LCD_HEIGHT);
@@ -1491,7 +1498,7 @@
 }
 
 
-static void new_level(void)
+void new_level(void)
 {
     int i;
 
@@ -1604,7 +1611,7 @@
 }
 
 
-static void init_invadrox(void)
+void init_invadrox(void)
 {
     int i;
 
@@ -1756,7 +1763,7 @@
 }
 
 
-static void game_loop(void)
+void game_loop(void)
 {
     int i, end;
 
Index: apps/plugins/pdbox/pdbox.h
===================================================================
--- apps/plugins/pdbox/pdbox.h	(revision 30811)
+++ apps/plugins/pdbox/pdbox.h	(working copy)
@@ -89,7 +89,9 @@
 float rb_atan2(float, float);
 float rb_sinh(float);
 float rb_tan(float);
-#ifndef SIMULATOR
+//#ifndef SIMULATOR
+/*FIXME: is it a correct replacement??? */
+#if !(CONFIG_PLATFORM & PLATFORM_HOSTED)
 typedef struct
 {
     int quot;
@@ -165,7 +167,9 @@
 
 #define strncat rb_strncat
 
-#ifndef SIMULATOR
+//#ifndef SIMULATOR
+/*FIXME: is it a correct replacement??? */
+#if !(CONFIG_PLATFORM & PLATFORM_HOSTED)
 #define floor rb_floor
 #define atof rb_atof
 #define atol rb_atol
@@ -282,6 +286,15 @@
     #define PDPOD_WHEELLEFT (BUTTON_SCROLL_BACK)
     #define PDPOD_WHEELRIGHT (BUTTON_SCROLL_FWD)
     #define PDPOD_ACTION (BUTTON_SELECT)
+#elif (CONFIG_KEYPAD == SAMSUNG_YPR0_PAD)
+    #define PDPOD_QUIT      BUTTON_BACK
+    #define PDPOD_PLAY      BUTTON_USER
+    #define PDPOD_PREVIOUS  BUTTON_LEFT
+    #define PDPOD_NEXT      BUTTON_RIGHT
+    #define PDPOD_MENU      BUTTON_MENU
+    #define PDPOD_WHEELLEFT BUTTON_UP
+    #define PDPOD_WHEELRIGHT BUTTON_DOWN
+    #define PDPOD_ACTION    BUTTON_CENTER
 #else
     #warning "No keys defined for this architecture!"
 #endif
Index: apps/plugin.c
===================================================================
--- apps/plugin.c	(revision 30811)
+++ apps/plugin.c	(working copy)
@@ -434,6 +434,17 @@
 #endif
 #endif /* HAVE_ADJUSTABLE_CPU_FREQ */
 #endif /* PLATFORM_NATIVE */
+#if (CONFIG_PLATFORM & PLATFORM_YPR0)
+    &cpu_frequency,
+
+#ifdef HAVE_ADJUSTABLE_CPU_FREQ
+#ifdef CPU_BOOST_LOGGING
+    cpu_boost_,
+#else
+    cpu_boost,
+#endif
+#endif /* HAVE_ADJUSTABLE_CPU_FREQ */
+#endif /* PLATFORM_YPR0 */
 #ifdef HAVE_SCHEDULER_BOOSTCTRL
     trigger_cpu_boost,
     cancel_cpu_boost,
Index: apps/SOURCES
===================================================================
--- apps/SOURCES	(revision 30811)
+++ apps/SOURCES	(working copy)
@@ -327,5 +327,7 @@
 keymaps/keymap-rk27xx-generic.c
 #elif CONFIG_KEYPAD == HM60X_PAD
 keymaps/keymap-hm60x.c
+#elif CONFIG_KEYPAD == SAMSUNG_YPR0_PAD
+keymaps/keymap-ypr0.c
 #endif
 
Index: apps/plugin.h
===================================================================
--- apps/plugin.h	(revision 30811)
+++ apps/plugin.h	(working copy)
@@ -507,6 +507,16 @@
 #endif
 #endif /* HAVE_ADJUSTABLE_CPU_FREQ */
 #endif /* PLATFORM_NATIVE */
+#if (CONFIG_PLATFORM & PLATFORM_YPR0)
+    long *cpu_frequency;
+#ifdef HAVE_ADJUSTABLE_CPU_FREQ
+#ifdef CPU_BOOST_LOGGING
+    void (*cpu_boost_)(bool on_off,char*location,int line);
+#else
+    void (*cpu_boost)(bool on_off);
+#endif
+#endif /* HAVE_ADJUSTABLE_CPU_FREQ */
+#endif /* PLATFORM_YPR0 */
 #ifdef HAVE_SCHEDULER_BOOSTCTRL
     void (*trigger_cpu_boost)(void);
     void (*cancel_cpu_boost)(void);
Index: apps/keymaps/keymap-ypr0.c
===================================================================
--- apps/keymaps/keymap-ypr0.c	(revision 0)
+++ apps/keymaps/keymap-ypr0.c	(revision 0)
@@ -0,0 +1,271 @@
+/***************************************************************************
+ *             __________               __   ___.
+ *   Open      \______   \ ____   ____ |  | _\_ |__   _______  ___
+ *   Source     |       _//  _ \_/ ___\|  |/ /| __ \ /  _ \  \/  /
+ *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
+ *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
+ *                     \/            \/     \/    \/            \/
+ * $Id: keymap-sdl.c 28704 2010-11-29 11:28:53Z teru $
+ *
+ * Copyright (C) 2010 Maurus Cuelenaere
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+/* Button Code Definitions for Samsung YP-R0 target */
+
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "config.h"
+#include "action.h"
+#include "button.h"
+#include "settings.h"
+
+/*
+ * The format of the list is as follows
+ * { Action Code,   Button code,    Prereq button code }
+ * if there's no need to check the previous button's value, use BUTTON_NONE
+ * Insert LAST_ITEM_IN_LIST at the end of each mapping
+ */
+
+static const struct button_mapping button_context_standard[]  = {    
+    { ACTION_STD_PREV,        BUTTON_UP,                 BUTTON_NONE },
+    { ACTION_STD_PREVREPEAT,  BUTTON_UP|BUTTON_REPEAT,   BUTTON_NONE },
+    { ACTION_STD_NEXT,        BUTTON_DOWN,               BUTTON_NONE },
+    { ACTION_STD_NEXTREPEAT,  BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+
+    { ACTION_STD_OK,          BUTTON_CENTER|BUTTON_REL,  BUTTON_CENTER },
+    { ACTION_STD_OK,          BUTTON_RIGHT|BUTTON_REL,   BUTTON_RIGHT },
+    { ACTION_STD_CANCEL,      BUTTON_LEFT|BUTTON_REL,    BUTTON_LEFT },
+    { ACTION_STD_CANCEL,      BUTTON_BACK|BUTTON_REL,    BUTTON_BACK },
+
+    { ACTION_STD_CONTEXT,     BUTTON_MENU,               BUTTON_NONE },
+    { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT,   BUTTON_MENU },
+    { ACTION_STD_KEYLOCK,     BUTTON_POWER|BUTTON_REL,        BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST
+}; /* button_context_standard */
+
+static const struct button_mapping button_context_wps[]  = {
+    { ACTION_WPS_BROWSE,         BUTTON_BACK|BUTTON_REL,        BUTTON_NONE },
+    { ACTION_WPS_MENU,           BUTTON_BACK|BUTTON_REPEAT,     BUTTON_BACK },
+    { ACTION_WPS_VIEW_PLAYLIST,  BUTTON_USER|BUTTON_REL,        BUTTON_NONE },
+    //{ ACTION_WPS_MENU,          BUTTON_MENU|BUTTON_REL,      BUTTON_MENU },
+    { ACTION_WPS_CONTEXT,        BUTTON_MENU,                   BUTTON_NONE },
+    { ACTION_WPS_PLAY,           BUTTON_CENTER,                 BUTTON_NONE },
+
+    { ACTION_WPS_SKIPNEXT,       BUTTON_RIGHT|BUTTON_REL,       BUTTON_RIGHT },
+    { ACTION_WPS_SKIPPREV,       BUTTON_LEFT|BUTTON_REL,        BUTTON_LEFT },
+
+    { ACTION_WPS_SEEKBACK,       BUTTON_LEFT|BUTTON_REPEAT,     BUTTON_NONE },
+    { ACTION_WPS_SEEKFWD,        BUTTON_RIGHT|BUTTON_REPEAT,    BUTTON_NONE },
+    { ACTION_WPS_STOPSEEK,       BUTTON_LEFT|BUTTON_REL,        BUTTON_LEFT|BUTTON_REPEAT },
+    { ACTION_WPS_STOPSEEK,       BUTTON_RIGHT|BUTTON_REL,       BUTTON_RIGHT|BUTTON_REPEAT },
+
+    { ACTION_WPS_VOLDOWN,        BUTTON_DOWN|BUTTON_REL,        BUTTON_NONE },
+    { ACTION_WPS_VOLUP,          BUTTON_UP|BUTTON_REL,          BUTTON_NONE },
+    { ACTION_WPS_VOLDOWN,        BUTTON_DOWN|BUTTON_REPEAT,     BUTTON_NONE },
+    { ACTION_WPS_VOLUP,          BUTTON_UP|BUTTON_REPEAT,       BUTTON_NONE },
+    { ACTION_STD_KEYLOCK,        BUTTON_POWER|BUTTON_REL,       BUTTON_NONE },
+    //ACTION_WPS_STOP,
+
+   // ACTION_WPS_ID3SCREEN,/* optional */
+   // ACTION_WPS_QUICKSCREEN,/* optional */
+    LAST_ITEM_IN_LIST
+}; /* button_context_wps */
+
+static const struct button_mapping button_context_list[]  = {
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_list */
+
+static const struct button_mapping button_context_tree[]  = {
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
+}; /* button_context_tree */
+
+static const struct button_mapping button_context_listtree_scroll_with_combo[]  = {
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
+};
+
+static const struct button_mapping button_context_listtree_scroll_without_combo[]  = {
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
+};
+
+static const struct button_mapping button_context_settings[]  = {
+    { ACTION_SETTINGS_INC,          BUTTON_RIGHT,                BUTTON_NONE },
+    { ACTION_SETTINGS_INCREPEAT,    BUTTON_RIGHT|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_SETTINGS_DEC,          BUTTON_LEFT,                 BUTTON_NONE },
+    { ACTION_SETTINGS_DECREPEAT,    BUTTON_LEFT|BUTTON_REPEAT,   BUTTON_NONE },
+    { ACTION_STD_OK,                BUTTON_CENTER,               BUTTON_NONE },
+    { ACTION_STD_CANCEL,            BUTTON_BACK,                      BUTTON_NONE },
+    //{ ACTION_SETTINGS_INC,      BUTTON_SCROLL_FWD,                BUTTON_NONE },
+    //{ ACTION_SETTINGS_INCREPEAT,BUTTON_SCROLL_FWD|BUTTON_REPEAT,  BUTTON_NONE },
+    //{ ACTION_SETTINGS_DEC,      BUTTON_SCROLL_BACK,               BUTTON_NONE },
+    //{ ACTION_SETTINGS_DECREPEAT,BUTTON_SCROLL_BACK|BUTTON_REPEAT, BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_settings */
+
+static const struct button_mapping button_context_settings_right_is_inc[]  = {
+    { ACTION_SETTINGS_INC,       BUTTON_SCROLL_FWD,               BUTTON_NONE },
+    { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_FWD|BUTTON_REPEAT, BUTTON_NONE },
+    { ACTION_SETTINGS_DEC,       BUTTON_SCROLL_BACK,              BUTTON_NONE },
+    { ACTION_SETTINGS_DECREPEAT, BUTTON_SCROLL_BACK|BUTTON_REPEAT,BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_settingsgraphical */
+
+static const struct button_mapping button_context_yesno[]  = {
+    { ACTION_YESNO_ACCEPT,  BUTTON_CENTER,  BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_settings_yesno */
+
+static const struct button_mapping button_context_colorchooser[]  = {
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS),
+}; /* button_context_colorchooser */
+
+static const struct button_mapping button_context_eq[]  = {
+    { ACTION_SETTINGS_INC,       BUTTON_RIGHT,               BUTTON_NONE },
+    { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
+    { ACTION_SETTINGS_DEC,       BUTTON_LEFT,                BUTTON_NONE },
+    { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_STD_OK,             BUTTON_MENU,                BUTTON_NONE },
+    { ACTION_STD_OK,             BUTTON_CENTER,              BUTTON_NONE },
+    { ACTION_STD_CANCEL,         BUTTON_BACK,                BUTTON_NONE },
+    { ACTION_STD_PREV,           BUTTON_UP,                  BUTTON_NONE },
+    { ACTION_STD_PREVREPEAT,     BUTTON_UP|BUTTON_REPEAT,    BUTTON_NONE },
+    { ACTION_STD_NEXT,           BUTTON_DOWN,                BUTTON_NONE },
+    { ACTION_STD_NEXTREPEAT,     BUTTON_DOWN|BUTTON_REPEAT,  BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST
+}; /* button_context_eq */
+
+/** Bookmark Screen **/
+static const struct button_mapping button_context_bmark[]  = {
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
+}; /* button_context_bmark */
+
+static const struct button_mapping button_context_time[]  = {
+    { ACTION_SETTINGS_INC,          BUTTON_UP,                   BUTTON_NONE },
+    { ACTION_SETTINGS_INCREPEAT,    BUTTON_RIGHT|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_SETTINGS_DEC,          BUTTON_DOWN,                 BUTTON_NONE },
+    { ACTION_SETTINGS_DECREPEAT,    BUTTON_DOWN|BUTTON_REPEAT,   BUTTON_NONE },
+    { ACTION_STD_OK,                BUTTON_CENTER,               BUTTON_NONE },
+    { ACTION_STD_CANCEL,            BUTTON_BACK,                 BUTTON_NONE },
+    { ACTION_STD_PREV,              BUTTON_LEFT,                 BUTTON_NONE },
+    { ACTION_STD_PREVREPEAT,        BUTTON_LEFT|BUTTON_REPEAT,   BUTTON_NONE },
+    { ACTION_STD_NEXT,              BUTTON_RIGHT,                BUTTON_NONE },
+    { ACTION_STD_NEXTREPEAT,        BUTTON_RIGHT|BUTTON_REPEAT,  BUTTON_NONE },
+    //LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
+}; /* button_context_time */
+
+static const struct button_mapping button_context_quickscreen[]  = {
+    { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL,        BUTTON_NONE },
+    { ACTION_QS_TOP,     BUTTON_UP,                  BUTTON_NONE },
+    { ACTION_QS_TOP,     BUTTON_UP|BUTTON_REPEAT,    BUTTON_NONE },
+    { ACTION_QS_DOWN,    BUTTON_DOWN,                BUTTON_NONE },
+    { ACTION_QS_DOWN,    BUTTON_DOWN|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_QS_LEFT,    BUTTON_LEFT,                BUTTON_NONE },
+    { ACTION_QS_LEFT,    BUTTON_LEFT|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_QS_RIGHT,   BUTTON_RIGHT,               BUTTON_NONE },
+    { ACTION_QS_RIGHT,   BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
+    { ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REL,     BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_quickscreen */
+
+static const struct button_mapping button_context_pitchscreen[]  = {
+
+    { ACTION_PS_INC_SMALL, BUTTON_RIGHT,                BUTTON_NONE },
+    { ACTION_PS_INC_BIG,   BUTTON_RIGHT|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_PS_DEC_SMALL, BUTTON_LEFT,                 BUTTON_NONE },
+    { ACTION_PS_DEC_BIG,   BUTTON_LEFT|BUTTON_REPEAT,   BUTTON_NONE },
+    { ACTION_PS_EXIT,      BUTTON_BACK,                      BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_pitchcreen */
+
+static const struct button_mapping button_context_keyboard[]  = {
+    { ACTION_KBD_PAGE_FLIP,    BUTTON_MENU,                   BUTTON_NONE },
+    //{ ACTION_KBD_CURSOR_LEFT,  BUTTON_LEFT,                   BUTTON_NONE },
+    //{ ACTION_KBD_CURSOR_LEFT,  BUTTON_LEFT|BUTTON_REPEAT,     BUTTON_NONE },
+    //{ ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT,                  BUTTON_NONE },
+    //{ ACTION_KBD_CURSOR_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT,    BUTTON_NONE },
+    { ACTION_KBD_SELECT,       BUTTON_CENTER,                 BUTTON_NONE },
+    { ACTION_KBD_ABORT,        BUTTON_BACK,                  BUTTON_NONE },
+    { ACTION_KBD_DONE,         BUTTON_USER,                   BUTTON_NONE },
+    { ACTION_KBD_UP,           BUTTON_UP,                     BUTTON_NONE },
+    { ACTION_KBD_UP,           BUTTON_UP|BUTTON_REPEAT,       BUTTON_NONE },
+    { ACTION_KBD_DOWN,         BUTTON_DOWN,                   BUTTON_NONE },
+    { ACTION_KBD_DOWN,         BUTTON_DOWN|BUTTON_REPEAT,     BUTTON_NONE },
+    { ACTION_KBD_LEFT,           BUTTON_LEFT,                     BUTTON_NONE },
+    { ACTION_KBD_LEFT,           BUTTON_LEFT|BUTTON_REPEAT,       BUTTON_NONE },
+    { ACTION_KBD_RIGHT,         BUTTON_RIGHT,                   BUTTON_NONE },
+    { ACTION_KBD_RIGHT,         BUTTON_RIGHT|BUTTON_REPEAT,     BUTTON_NONE },
+    { ACTION_KBD_BACKSPACE,    BUTTON_USER,                   BUTTON_NONE },
+
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_keyboard */
+
+static const struct button_mapping button_context_radio[]  = {
+    LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
+}; /* button_context_radio */
+
+const struct button_mapping* get_context_mapping(int context)
+{
+    switch (context)
+    {
+        case CONTEXT_STD:
+            return button_context_standard;
+        case CONTEXT_WPS:
+            return button_context_wps;
+
+        case CONTEXT_LIST:
+            return button_context_list;
+        case CONTEXT_MAINMENU:
+        case CONTEXT_TREE:
+            if (global_settings.hold_lr_for_scroll_in_list)
+                return button_context_listtree_scroll_without_combo;
+            else
+                return button_context_listtree_scroll_with_combo;
+        case CONTEXT_CUSTOM|CONTEXT_TREE:
+            return button_context_tree;
+
+        case CONTEXT_SETTINGS:
+            return button_context_settings;
+        case CONTEXT_CUSTOM|CONTEXT_SETTINGS:
+        case CONTEXT_SETTINGS_RECTRIGGER:
+            return button_context_settings_right_is_inc;
+
+        case CONTEXT_SETTINGS_COLOURCHOOSER:
+            return button_context_colorchooser;
+        case CONTEXT_SETTINGS_EQ:
+            return button_context_eq;
+
+        case CONTEXT_SETTINGS_TIME:
+            return button_context_time;
+
+        case CONTEXT_YESNOSCREEN:
+            return button_context_yesno;
+        case CONTEXT_FM:
+            return button_context_radio;
+        case CONTEXT_BOOKMARKSCREEN:
+            return button_context_bmark;
+        case CONTEXT_QUICKSCREEN:
+            return button_context_quickscreen;
+        case CONTEXT_PITCHSCREEN:
+            return button_context_pitchscreen;
+        case CONTEXT_KEYBOARD:
+            return button_context_keyboard;
+    }
+    return button_context_standard;
+}
Index: firmware/export/rbpaths.h
===================================================================
--- firmware/export/rbpaths.h	(revision 30811)
+++ firmware/export/rbpaths.h	(working copy)
@@ -57,6 +57,18 @@
 #define PLAYLIST_CATALOG_DEFAULT_DIR "/Playlists"
 
 #define paths_init()
+
+#elif (CONFIG_PLATFORM & PLATFORM_YPR0)
+#undef ROCKBOX_LIBRARY_PATH
+#define ROCKBOX_LIBRARY_PATH ROCKBOX_DIR
+
+#define PLUGIN_DIR          ROCKBOX_DIR "/rocks"
+#define CODECS_DIR          ROCKBOX_DIR "/codecs"
+
+#define REC_BASE_DIR        ROCKBOX_DIR "/"
+#define PLAYLIST_CATALOG_DEFAULT_DIR ROCKBOX_DIR "/Playlists"
+#define paths_init()
+
 #else /* application */
 
 #define PLUGIN_DIR          ROCKBOX_LIBRARY_PATH "/rockbox/rocks"
@@ -80,7 +92,13 @@
 #define PLUGIN_DEMOS_DIR    PLUGIN_DIR "/demos"
 #define VIEWERS_DIR         PLUGIN_DIR "/viewers"
 
-#ifdef APPLICATION
+#if (CONFIG_PLATFORM & PLATFORM_YPR0)
+#define PLUGIN_DATA_DIR          PLUGIN_DIR
+#define PLUGIN_GAMES_DATA_DIR    PLUGIN_DATA_DIR
+#define PLUGIN_APPS_DATA_DIR     PLUGIN_DATA_DIR
+#define PLUGIN_DEMOS_DATA_DIR    PLUGIN_DATA_DIR
+#define VIEWERS_DATA_DIR         PLUGIN_DATA_DIR
+#elif defined(APPLICATION)
 #define PLUGIN_DATA_DIR          "/.rockbox/rocks.data"
 #define PLUGIN_GAMES_DATA_DIR    PLUGIN_DATA_DIR
 #define PLUGIN_APPS_DATA_DIR     PLUGIN_DATA_DIR
Index: firmware/export/config.h
===================================================================
--- firmware/export/config.h	(revision 30811)
+++ firmware/export/config.h	(working copy)
@@ -89,6 +89,7 @@
 #define PLATFORM_MAEMO5  (1<<5)
 #define PLATFORM_MAEMO   (PLATFORM_MAEMO4|PLATFORM_MAEMO5)
 #define PLATFORM_PANDORA (1<<6)
+#define PLATFORM_YPR0    (1<<7)
 
 /* CONFIG_KEYPAD */
 #define PLAYER_PAD          1
@@ -141,6 +142,7 @@
 #define SANSA_FUZEPLUS_PAD 48
 #define RK27XX_GENERIC_PAD 49
 #define HM60X_PAD          50
+#define SAMSUNG_YPR0_PAD   51
 
 /* CONFIG_REMOTE_KEYPAD */
 #define H100_REMOTE   1
@@ -473,6 +475,8 @@
 #include "config/nokian900.h"
 #elif defined(PANDORA)
 #include "config/pandora.h"
+#elif defined(SAMSUNG_YPR0)
+#include "config/ypr0.h"
 #else
 /* no known platform */
 #endif
Index: firmware/export/config/ypr0.h
===================================================================
--- firmware/export/config/ypr0.h	(revision 0)
+++ firmware/export/config/ypr0.h	(revision 0)
@@ -0,0 +1,160 @@
+/*
+ * This config file is for the RockBox as application on the Samsung YP-R0 player.
+ * The target name is: SAMSUNG_YPR0
+ */
+
+#define TARGET_TREE /* this target is using the target tree system */
+//#define DEBUG
+//#undef NDEBUG
+
+/* We don't run on hardware directly */
+/* YP-R0 need it too of course */
+#define CONFIG_PLATFORM (PLATFORM_HOSTED|PLATFORM_SDL|PLATFORM_YPR0)
+
+/* For Rolo and boot loader */
+#define MODEL_NUMBER 100
+
+#define MODEL_NAME   "Samsung YP-R0"
+
+/* Indeed to check that */
+/*TODO: R0 should charge battery automatically, no software stuff to manage that. Just to know about some as3543 registers, that should be set after loading samsung's afe.ko module 
+ */
+#define USB_NONE
+
+/* Hardware controlled charging with monitoring */
+//#define CONFIG_CHARGING CHARGING_MONITOR
+
+/* There is only USB charging */
+//#define HAVE_USB_POWER
+
+/* define this if you have a bitmap LCD display */
+#define HAVE_LCD_BITMAP
+
+/* define this if you have a colour LCD */
+#define HAVE_LCD_COLOR
+
+/* define this if you want album art for this target */
+#define HAVE_ALBUMART
+
+/* define this to enable bitmap scaling */
+#define HAVE_BMP_SCALING
+
+/* define this to enable JPEG decoding */
+#define HAVE_JPEG
+
+/* define this if you have access to the quickscreen */
+#define HAVE_QUICKSCREEN
+
+/* define this if you have access to the pitchscreen */
+#define HAVE_PITCHSCREEN
+
+/* define this if you would like tagcache to build on this target */
+#define HAVE_TAGCACHE
+
+/* LCD dimensions
+ *
+ * overriden by configure for application builds */
+#ifndef LCD_WIDTH
+#define LCD_WIDTH  240
+#endif
+
+#ifndef LCD_HEIGHT
+#define LCD_HEIGHT 320
+#endif
+
+#define LCD_DEPTH  16
+/* Check that but should not matter */
+#define LCD_PIXELFORMAT 565
+
+/* YP-R0 has the backlight */
+#define HAVE_BACKLIGHT
+
+/* Define this for LCD backlight brightness available */
+#define HAVE_BACKLIGHT_BRIGHTNESS
+
+/* Main LCD backlight brightness range and defaults */
+#define MIN_BRIGHTNESS_SETTING          1
+#define MAX_BRIGHTNESS_SETTING          15
+#define DEFAULT_BRIGHTNESS_SETTING      4
+
+/* Which backlight fading type? */
+#define CONFIG_BACKLIGHT_FADING BACKLIGHT_FADING_SW_SETTING
+
+/* define this to indicate your device's keypad */
+//#define HAVE_TOUCHSCREEN
+//#define HAVE_BUTTON_DATA
+
+/* define this if you have RTC RAM available for settings */
+//#define HAVE_RTC_RAM
+
+/* define this if you have a real-time clock */
+/* TODO: We have that on as3543...To fix! */
+#define CONFIG_RTC APPLICATION
+//#define CONFIG_RTC RTC_AS3514
+
+/* The number of bytes reserved for loadable codecs */
+#define CODEC_SIZE 0x100000
+
+/* The number of bytes reserved for loadable plugins */
+#define PLUGIN_BUFFER_SIZE 0x80000
+
+#define AB_REPEAT_ENABLE
+
+/* Define this if you do software codec */
+#define CONFIG_CODEC SWCODEC
+
+/* Our R0 KeyPad configuration */
+#define CONFIG_KEYPAD SAMSUNG_YPR0_PAD
+/* It's better to close /dev/r0Btn at shutdown */
+#define BUTTON_DRIVER_CLOSE
+
+/* Use SDL audio/pcm in a SDL app build */
+#define HAVE_SDL
+#define HAVE_SDL_AUDIO
+/* On our YPR0 we need to have a better contol also on this device */
+#define HAVE_AS3543
+
+#define HAVE_SW_TONE_CONTROLS
+
+/* FM Tuner */
+//#define CONFIG_TUNER SI47xx
+//#define HAVE_TUNER_PWR_CTRL
+
+/* In R0 there should be an irq somewhere for this */
+//#define HAVE_HEADPHONE_DETECTION
+
+/* Define current usage levels. */
+#define CURRENT_NORMAL     88 /* 18 hours from a 1600 mAh battery */  
+#define CURRENT_BACKLIGHT  30 /* TBD */ 
+#define CURRENT_RECORD     0  /* no recording yet */ 
+
+
+/* Offset ( in the firmware file's header ) to the file CRC */
+#define FIRMWARE_OFFSET_FILE_CRC 0
+
+/* Offset ( in the firmware file's header ) to the real data */
+#define FIRMWARE_OFFSET_FILE_DATA 8
+
+#define CONFIG_LCD LCD_COWOND2
+
+/* Define this if a programmable hotkey is mapped */
+#define HAVE_HOTKEY
+
+/* Define this if you have a software controlled poweroff */
+#define HAVE_SW_POWEROFF
+
+/* Define this if a hold button is present */
+#define HAS_BUTTON_HOLD
+
+/* Define this if you have adjustable CPU frequency */
+#define HAVE_ADJUSTABLE_CPU_FREQ
+/* Define this to the CPU frequency */
+#define CPU_FREQ            532000000
+/* 0.8Vcore using 200 MHz */
+#define CPUFREQ_DEFAULT     200000000
+/* This is 400 MHz -> not so powersaving-ful */
+#define CPUFREQ_NORMAL      400000000
+/* Max IMX37 Cpu Frequency */
+#define CPUFREQ_MAX         CPU_FREQ
+
+#define BOOTDIR "/mnt/mmc/rockbox"
\ No newline at end of file
Index: firmware/system.c
===================================================================
--- firmware/system.c	(revision 30811)
+++ firmware/system.c	(working copy)
@@ -26,7 +26,7 @@
 #include "string.h"
 #include "file.h"
 
-#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
+#if ((CONFIG_PLATFORM & PLATFORM_NATIVE) || (CONFIG_PLATFORM & PLATFORM_YPR0))
 long cpu_frequency SHAREDBSS_ATTR = CPU_FREQ;
 #endif
 
Index: firmware/SOURCES
===================================================================
--- firmware/SOURCES	(revision 30811)
+++ firmware/SOURCES	(working copy)
@@ -30,7 +30,7 @@
 #endif /* PLATFORM_NATIVE */
 panic.c
 
-#ifdef HAVE_SDL
+#if (defined(HAVE_SDL) && !(CONFIG_PLATFORM & PLATFORM_YPR0))
 target/hosted/sdl/button-sdl.c
 target/hosted/sdl/kernel-sdl.c
 #ifdef HAVE_LCD_BITMAP
@@ -57,6 +57,32 @@
 #endif
 #endif
 
+#if (CONFIG_PLATFORM & PLATFORM_YPR0)
+target/hosted/ypr0/button-sdl.c
+target/hosted/ypr0/kernel-sdl.c
+#ifdef HAVE_LCD_BITMAP
+target/hosted/ypr0/lcd-bitmap.c
+#elif defined(HAVE_LCD_CHARCELLS)
+target/hosted/ypr0/lcd-charcells.c
+#endif
+#ifdef HAVE_REMOTE_LCD
+target/hosted/ypr0/lcd-remote-bitmap.c
+#endif
+target/hosted/ypr0/lcd-sdl.c
+target/hosted/ypr0/system-sdl.c
+#ifdef HAVE_SDL_THREADS
+target/hosted/ypr0/thread-sdl.c
+#else
+thread.c
+#endif
+target/hosted/ypr0/timer-sdl.c
+#ifdef HAVE_BACKLIGHT
+target/hosted/ypr0/backlight-target.c
+#endif
+target/hosted/ypr0/app/button-application.c
+target/hosted/ypr0/ascodec-ypr0.c
+#endif
+
 /* Maemo specific files */
 #if (CONFIG_PLATFORM & PLATFORM_MAEMO)
 target/hosted/maemo/maemo-thread.c
Index: firmware/common/rbpaths.c
===================================================================
--- firmware/common/rbpaths.c	(revision 30811)
+++ firmware/common/rbpaths.c	(working copy)
@@ -71,6 +71,9 @@
 #if (CONFIG_PLATFORM & PLATFORM_ANDROID)
     mkdir("/sdcard/rockbox");
     mkdir("/sdcard/rockbox/rocks.data");
+#elif (CONFIG_PLATFORM & PLATFORM_YPR0)
+    /* We don't need to create some special folders on R0 */
+    return;
 #else
     char config_dir[MAX_PATH];
 
@@ -91,6 +94,7 @@
 #endif
 }
 
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
 static bool try_path(const char* filename, unsigned flags)
 {
     if (flags & IS_FILE)
@@ -105,7 +109,9 @@
     }
     return false;
 }
+#endif /* !(CONFIG_PLATFORM & PLATFORM_YPR0) */
 
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
 static const char* _get_user_file_path(const char *path,
                                        unsigned flags,
                                        char* buf,
@@ -143,13 +149,14 @@
 
     return ret;
 }
+#endif /* !(CONFIG_PLATFORM & PLATFORM_YPR0) */
 
 int app_open(const char *name, int o, ...)
 {
-    char realpath[MAX_PATH];
     va_list ap;
     int fd;
-    
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
+    char realpath[MAX_PATH];
     if (!strncmp(ROCKBOX_DIR, name, ROCKBOX_DIR_LEN))
     {
         int flags = IS_FILE;
@@ -157,6 +164,7 @@
             flags |= NEED_WRITE;
         name = _get_user_file_path(name, flags, realpath, sizeof(realpath));
     }
+#endif
     va_start(ap, o);
     fd = open(name, o, va_arg(ap, unsigned int));
     va_end(ap);
@@ -171,64 +179,73 @@
 
 int app_remove(const char *name)
 {
+    const char *fname = name;
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
     char realpath[MAX_PATH];
-    const char *fname = name;
     if (!strncmp(ROCKBOX_DIR, name, ROCKBOX_DIR_LEN))
     {
         fname = _get_user_file_path(name, NEED_WRITE, realpath, sizeof(realpath));
     }
-
+#endif
     return remove(fname);
 }
 
 int app_rename(const char *old, const char *new)
 {
-    char realpath_old[MAX_PATH], realpath_new[MAX_PATH];
-
     const char *final_old = old;
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
+    char realpath_old[MAX_PATH];
     if (!strncmp(ROCKBOX_DIR, old, ROCKBOX_DIR_LEN))
     {
         final_old = _get_user_file_path(old, NEED_WRITE, realpath_old, sizeof(realpath_old));
     }
-
+#endif
     const char *final_new = new;
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
+    char realpath_new[MAX_PATH];
     if (!strncmp(ROCKBOX_DIR, new, ROCKBOX_DIR_LEN))
     {
         final_new = _get_user_file_path(new, NEED_WRITE, realpath_new, sizeof(realpath_new));
     }
-
+#endif
     return rename(final_old, final_new);
 }
 
 DIR *app_opendir(const char *name)
 {
+    const char *fname = name;
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
     char realpath[MAX_PATH];
-    const char *fname = name;
     if (!strncmp(ROCKBOX_DIR, name, ROCKBOX_DIR_LEN))
     {
         fname = _get_user_file_path(name, 0, realpath, sizeof(realpath));
     }
+#endif
     return opendir(fname);
 }
 
 int app_mkdir(const char* name)
 {
+    const char *fname = name;
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
     char realpath[MAX_PATH];
-    const char *fname = name;
     if (!strncmp(ROCKBOX_DIR, name, ROCKBOX_DIR_LEN))
     {
         fname = _get_user_file_path(name, NEED_WRITE, realpath, sizeof(realpath));
     }
+#endif
     return mkdir(fname);
 }
 
 int app_rmdir(const char* name)
 {
+    const char *fname = name;
+#if !(CONFIG_PLATFORM & PLATFORM_YPR0)
     char realpath[MAX_PATH];
-    const char *fname = name;
     if (!strncmp(ROCKBOX_DIR, name, ROCKBOX_DIR_LEN))
     {
         fname = _get_user_file_path(name, NEED_WRITE, realpath, sizeof(realpath));
     }
+#endif
     return rmdir(fname);
-}
+}
\ No newline at end of file
