Add MPIO HD200 port - changed files


git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25724 a1c6a512-1295-4272-9138-f99709370657
diff --git a/apps/SOURCES b/apps/SOURCES
index 66f2a7d..ef81f0c 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -279,4 +279,6 @@
 keymaps/keymap-mini2440.c
 #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
 keymaps/keymap-vibe500.c
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+keymaps/keymap-mpio-hd200.c
 #endif
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 5b41359..867ac1f 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -1000,6 +1000,9 @@
 #elif (CONFIG_KEYPAD == PBELL_VIBE500_PAD)
 #   define DEBUG_CANCEL  BUTTON_CANCEL
 
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+#   define DEBUG_CANCEL  BUTTON_REC
+
 #endif /* key definitions */
 
 /* Test code!!! */
diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c
index e4e399f..5c04892 100644
--- a/apps/plugins/battery_bench.c
+++ b/apps/plugins/battery_bench.c
@@ -210,6 +210,12 @@
 #define BATTERY_ON_TXT  "PLAY - start"
 #define BATTERY_OFF_TXT "REC"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BATTERY_ON  BUTTON_PLAY
+#define BATTERY_OFF BUTTON_REC
+#define BATTERY_ON_TXT  "PLAY - start"
+#define BATTERY_OFF_TXT "REC"
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES
index 506ecc9..6d32576 100644
--- a/apps/plugins/bitmaps/native/SOURCES
+++ b/apps/plugins/bitmaps/native/SOURCES
@@ -98,6 +98,9 @@
 #elif LCD_WIDTH >= 138
 brickmania_ball.5x5x2.bmp
 brickmania_bricks.138x110x2.bmp
+#elif LCD_WIDTH >= 128
+brickmania_ball.4x4x2.bmp
+brickmania_bricks.128x128x2.bmp
 #else /* M3 currently */
 brickmania_ball.4x4x2.bmp
 brickmania_bricks.128x96x2.bmp
@@ -251,6 +254,14 @@
 clock_smallsegments.132x80x16.bmp
 clock_logo.132x80x16.bmp
 clock_messages.132x80x16.bmp
+#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) && (LCD_DEPTH >= 2)
+clock_binary.128x128x2.bmp
+clock_digits.128x128x2.bmp
+clock_smalldigits.128x128x2.bmp
+clock_segments.128x128x2.bmp
+clock_smallsegments.128x128x2.bmp
+clock_logo.128x128x2.bmp
+clock_messages.128x128x2.bmp
 #elif (LCD_WIDTH >= 112) && (LCD_HEIGHT >= 64) && (LCD_DEPTH >= 1)
 clock_binary.112x64x1.bmp
 clock_digits.112x64x1.bmp
@@ -494,6 +505,8 @@
 rockblox_background.160x128x2.bmp
 #elif (LCD_WIDTH == 138) && (LCD_HEIGHT == 110)
 rockblox_background.138x110x2.bmp
+#elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 128)
+rockblox_background.128x128x2.bmp
 #elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 96)
 rockblox_background.128x96x2.bmp
 #endif
@@ -698,6 +711,10 @@
 sudoku_start.128x96x2.bmp
 sudoku_normal.128x96x2.bmp
 sudoku_inverse.128x96x2.bmp
+#elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 128) && (LCD_DEPTH == 2)
+sudoku_start.128x128x2.bmp
+sudoku_normal.128x128x2.bmp
+sudoku_inverse.128x128x2.bmp
 #elif (LCD_WIDTH == 138) && (LCD_HEIGHT == 110) && (LCD_DEPTH >= 2)
 sudoku_start.138x110x2.bmp
 sudoku_normal.138x110x2.bmp
@@ -861,6 +878,8 @@
 pitch_notes.160x128x2.bmp
 #elif (LCD_WIDTH >= 132) && (LCD_HEIGHT >= 80) && (LCD_DEPTH >= 16)
 pitch_notes.132x80x16.bmp
+#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) && (LCD_DEPTH >= 2)
+pitch_notes.128x128x2.bmp
 #elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 96) && (LCD_DEPTH >= 2)
 pitch_notes.128x96x2.bmp
 #elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 64)
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index a8f92b9..1af26f2 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -404,6 +404,21 @@
 #define BJACK_RIGHT         BUTTON_NEXT
 #define BJACK_LEFT          BUTTON_PREV
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BJACK_SELECT_NAME    "SELECT"
+#define BJACK_STAY_NAME     "RIGHT"
+#define BJACK_RESUME_NAME   "PLAY"
+#define BJACK_QUIT_NAME     "REC+PLAY"
+#define BJACK_DOUBLE_NAME   "LEFT"
+#define BJACK_SELECT        BUTTON_SELECT
+#define BJACK_QUIT          (BUTTON_REC|BUTTON_PLAY)
+#define BJACK_STAY          BUTTON_VOL_UP
+#define BJACK_DOUBLEDOWN    BUTTON_VOL_DOWN
+#define BJACK_UP            BUTTON_PREV
+#define BJACK_DOWN          BUTTON_NEXT
+#define BJACK_RIGHT         BUTTON_VOL_UP
+#define BJACK_LEFT          BUTTON_VOL_DOWN
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c
index a7f8e18..f193818 100644
--- a/apps/plugins/bounce.c
+++ b/apps/plugins/bounce.c
@@ -204,6 +204,14 @@
 #define BOUNCE_QUIT  BUTTON_REC
 #define BOUNCE_MODE  BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BOUNCE_LEFT BUTTON_VOL_DOWN
+#define BOUNCE_RIGHT BUTTON_VOL_UP
+#define BOUNCE_UP   BUTTON_PREV
+#define BOUNCE_DOWN BUTTON_NEXT
+#define BOUNCE_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define BOUNCE_MODE BUTTON_SELECT
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index bc446df..60e8f38 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -243,6 +243,14 @@
 #define UP       BUTTON_UP
 #define DOWN     BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define QUIT (BUTTON_REC|BUTTON_PLAY)
+#define LEFT BUTTON_VOL_DOWN
+#define RIGHT BUTTON_VOL_UP
+#define SELECT BUTTON_SELECT
+#define UP BUTTON_PREV
+#define DOWN BUTTON_NEXT
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index 4e40625..942f031 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -374,6 +374,13 @@
 #define CALCULATOR_CALC  BUTTON_PLAY
 #define CALCULATOR_CLEAR BUTTON_CANCEL
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CALCULATOR_LEFT  BUTTON_PREV
+#define CALCULATOR_RIGHT BUTTON_NEXT
+#define CALCULATOR_QUIT  (BUTTON_REC|BUTTON_PLAY)
+#define CALCULATOR_INPUT BUTTON_SELECT
+#define CALCULATOR_CALC  BUTTON_PLAY
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c
index 9327ac6..d6a1a9a 100644
--- a/apps/plugins/calendar.c
+++ b/apps/plugins/calendar.c
@@ -258,6 +258,16 @@
 #define CALENDAR_NEXT_MONTH BUTTON_PLAY
 #define CALENDAR_PREV_MONTH BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CALENDAR_QUIT       (BUTTON_REC|BUTTON_PLAY)
+#define CALENDAR_SELECT     BUTTON_SELECT
+#define CALENDAR_NEXT_WEEK  BUTTON_NEXT
+#define CALENDAR_PREV_WEEK  BUTTON_PREV
+#define CALENDAR_NEXT_DAY   BUTTON_VOL_UP
+#define CALENDAR_PREV_DAY   BUTTON_VOL_DOWN
+#define CALENDAR_NEXT_MONTH BUTTON_PLAY
+#define CALENDAR_PREV_MONTH BUTTON_REC
+
 #else
 #error "No keypad setting."
 #endif
diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h
index 64cf3a5..ee28a4f 100644
--- a/apps/plugins/chessbox/chessbox_pgn.h
+++ b/apps/plugins/chessbox/chessbox_pgn.h
@@ -366,6 +366,16 @@
 #define CB_LEVEL   BUTTON_CANCEL
 #define CB_MENU    BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CB_SELECT  BUTTON_SELECT
+#define CB_UP      BUTTON_PREV
+#define CB_DOWN    BUTTON_NEXT
+#define CB_LEFT    BUTTON_VOL_DOWN
+#define CB_RIGHT   BUTTON_VOL_UP
+#define CB_PLAY    BUTTON_PLAY
+#define CB_LEVEL   BUTTON_REC
+#define CB_MENU    (BUTTON_SELECT | BUTTON_REPEAT)
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index f0a63f6..3afa705 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -276,6 +276,16 @@
 #define CHC_SETTINGS_OK      BUTTON_OK
 #define CHC_SETTINGS_CANCEL  BUTTON_CANCEL
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CHC_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define CHC_STARTSTOP BUTTON_PLAY
+#define CHC_RESET BUTTON_PREV
+#define CHC_MENU BUTTON_SELECT
+#define CHC_SETTINGS_INC BUTTON_VOL_UP
+#define CHC_SETTINGS_DEC BUTTON_VOL_DOWN
+#define CHC_SETTINGS_OK BUTTON_SELECT
+#define CHC_SETTINGS_CANCEL BUTTON_REC
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index 4aa1912..edc3bf0 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -1136,6 +1136,15 @@
 #define CHIP8_KEY6 BUTTON_NEXT
 #define CHIP8_KEY8 BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define CHIP8_OFF  (BUTTON_REC|BUTTON_PLAY)
+#define CHIP8_KEY2 BUTTON_PREV
+#define CHIP8_KEY4 BUTTON_NEXT
+#define CHIP8_KEY5 BUTTON_PLAY
+#define CHIP8_KEY6 BUTTON_VOL_DOWN
+#define CHIP8_KEY8 BUTTON_VOL_UP
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c
index 1217ea7..67cb9ee 100644
--- a/apps/plugins/chopper.c
+++ b/apps/plugins/chopper.c
@@ -157,6 +157,11 @@
 #define ACTION2 BUTTON_UP
 #define ACTIONTEXT "PLAY"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define QUIT (BUTTON_REC|BUTTON_PLAY)
+#define ACTION BUTTON_SELECT
+#define ACTIONTEXT "SELECT"
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index 014bcfc..5c6f993 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -274,6 +274,16 @@
 #define CUBE_PAUSE         BUTTON_PLAY
 #define CUBE_HIGHSPEED     BUTTON_OK
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CUBE_QUIT          (BUTTON_REC | BUTTON_PLAY)
+#define CUBE_NEXT          BUTTON_NEXT
+#define CUBE_PREV          BUTTON_PREV
+#define CUBE_INC           BUTTON_VOL_UP
+#define CUBE_DEC           BUTTON_VOL_DOWN
+#define CUBE_MODE          BUTTON_REC
+#define CUBE_PAUSE         BUTTON_PLAY
+#define CUBE_HIGHSPEED     BUTTON_SELECT
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/dict.c b/apps/plugins/dict.c
index bb98df7..cdd4c65 100644
--- a/apps/plugins/dict.c
+++ b/apps/plugins/dict.c
@@ -150,6 +150,8 @@
 #define LP_QUIT BUTTON_LEFT
 #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
 #define LP_QUIT BUTTON_CANCEL
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define LP_QUIT (BUTTON_REC|BUTTON_PLAY)
 #else
 #define LP_QUIT BUTTON_OFF
 #endif
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index fbe8369..dc0374f 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -360,6 +360,16 @@
 #define DOOMBUTTON_ESC     BUTTON_REC
 #define DOOMBUTTON_ENTER   BUTTON_POWER
 #define DOOMBUTTON_WEAPON  BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define DOOMBUTTON_UP      BUTTON_PREV
+#define DOOMBUTTON_DOWN    BUTTON_NEXT
+#define DOOMBUTTON_LEFT    BUTTON_VOL_DOWN
+#define DOOMBUTTON_RIGHT   BUTTON_VOL_UP
+#define DOOMBUTTON_SHOOT   BUTTON_SELECT
+#define DOOMBUTTON_OPEN    (BUTTON_SELECT|BUTTON_PLAY)
+#define DOOMBUTTON_ESC     BUTTON_REC
+#define DOOMBUTTON_ENTER   BUTTON_PLAY
+#define DOOMBUTTON_WEAPON  (BUTTON_PLAY|BUTTON_REPEAT)
 #else
 #error Keymap not defined!
 #endif
diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c
index e62c919..ae07179 100644
--- a/apps/plugins/fft/fft.c
+++ b/apps/plugins/fft/fft.c
@@ -195,6 +195,14 @@
 #   define FFT_SCALE            BUTTON_PLAY
 #   define FFT_QUIT             BUTTON_REC
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#   define FFT_PREV_GRAPH       BUTTON_PREV
+#   define FFT_NEXT_GRAPH       BUTTON_NEXT
+#   define FFT_ORIENTATION      BUTTON_REC
+#   define FFT_WINDOW           BUTTON_SELECT
+#   define FFT_SCALE            BUTTON_PLAY
+#   define FFT_QUIT             (BUTTON_REC | BUTTON_PLAY)
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/fireworks.c b/apps/plugins/fireworks.c
index 263c057..1ad5f9a 100644
--- a/apps/plugins/fireworks.c
+++ b/apps/plugins/fireworks.c
@@ -114,6 +114,10 @@
 #define BTN_MENU BUTTON_MENU
 #define BTN_FIRE BUTTON_OK
 
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+#define BTN_MENU BUTTON_REC
+#define BTN_FIRE BUTTON_SELECT
+
 #elif defined(HAVE_TOUCHSCREEN)
     /* This is a touchscreen target */
 #else
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index b706b63..d4c5702 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -320,6 +320,18 @@
 #define FLIPIT_STEP_BY_STEP BUTTON_CANCEL
 #define FLIPIT_TOGGLE       BUTTON_OK
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define FLIPIT_LEFT         BUTTON_VOL_DOWN
+#define FLIPIT_RIGHT        BUTTON_VOL_UP
+#define FLIPIT_UP           BUTTON_PREV
+#define FLIPIT_DOWN         BUTTON_NEXT
+#define FLIPIT_QUIT         (BUTTON_REC|BUTTON_PLAY)
+#define FLIPIT_SHUFFLE      BUTTON_SELECT
+#define FLIPIT_SOLVE        BUTTON_REC
+#define FLIPIT_STEP_BY_STEP (BUTTON_PLAY|BUTTON_PREV)
+#define FLIPIT_TOGGLE       (BUTTON_PLAY|BUTTON_NEXT)
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h
index 2bcee1d..557dde4 100644
--- a/apps/plugins/fractals/fractal.h
+++ b/apps/plugins/fractals/fractal.h
@@ -318,6 +318,18 @@
 #define FRACTAL_PRECISION_DEC   BUTTON_CANCEL
 #define FRACTAL_RESET           (BUTTON_CANCEL | BUTTON_REPEAT)
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define FRACTAL_QUIT            (BUTTON_REC | BUTTON_PLAY)
+#define FRACTAL_UP              BUTTON_PREV
+#define FRACTAL_DOWN            BUTTON_NEXT
+#define FRACTAL_LEFT            BUTTON_VOL_DOWN
+#define FRACTAL_RIGHT           BUTTON_VOL_UP
+#define FRACTAL_ZOOM_IN         (BUTTON_PLAY|BUTTON_NEXT)
+#define FRACTAL_ZOOM_OUT        (BUTTON_PLAY|BUTTON_PREV)
+#define FRACTAL_PRECISION_INC   (BUTTON_PLAY | BUTTON_VOL_UP)
+#define FRACTAL_PRECISION_DEC   (BUTTON_PLAY | BUTTON_VOL_DOWN)
+#define FRACTAL_RESET           BUTTON_REC
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h
index 6bc1e83..978812a 100644
--- a/apps/plugins/goban/goban.h
+++ b/apps/plugins/goban/goban.h
@@ -309,6 +309,16 @@
 #define  GBN_BUTTON_CONTEXT            BUTTON_OK
 #define  GBN_BUTTON_NEXT_VAR           BUTTON_CANCEL
 
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+#define  GBN_BUTTON_UP                 BUTTON_PREV
+#define  GBN_BUTTON_DOWN               BUTTON_NEXT
+#define  GBN_BUTTON_LEFT               BUTTON_VOL_DOWN
+#define  GBN_BUTTON_RIGHT              BUTTON_VOL_UP
+#define  GBN_BUTTON_RETREAT            BUTTON_REC
+#define  GBN_BUTTON_ADVANCE            BUTTON_PLAY
+#define  GBN_BUTTON_PLAY               BUTTON_SELECT | BUTTON_REL
+#define  GBN_BUTTON_MENU               BUTTON_SELECT | BUTTON_REPEAT
+
 #else
 #error Unsupported keypad
 #endif
diff --git a/apps/plugins/imageviewer/imageviewer.h b/apps/plugins/imageviewer/imageviewer.h
index a2e1291..b704701 100644
--- a/apps/plugins/imageviewer/imageviewer.h
+++ b/apps/plugins/imageviewer/imageviewer.h
@@ -316,6 +316,18 @@
 #define IMGVIEW_MENU        BUTTON_MENU
 #define IMGVIEW_QUIT        BUTTON_CANCEL
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define IMGVIEW_ZOOM_IN     (BUTTON_REC|BUTTON_VOL_UP)
+#define IMGVIEW_ZOOM_OUT    (BUTTON_REC|BUTTON_VOL_DOWN)
+#define IMGVIEW_UP          BUTTON_PREV
+#define IMGVIEW_DOWN        BUTTON_NEXT
+#define IMGVIEW_LEFT        BUTTON_VOL_DOWN
+#define IMGVIEW_RIGHT       BUTTON_VOL_UP
+#define IMGVIEW_NEXT        (BUTTON_REC | BUTTON_NEXT)
+#define IMGVIEW_PREVIOUS    (BUTTON_REC | BUTTON_PREV)
+#define IMGVIEW_MENU        BUTTON_SELECT
+#define IMGVIEW_QUIT        (BUTTON_REC | BUTTON_PLAY)
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index 74e8d6e..6bed9bf 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -277,6 +277,16 @@
 #define HK_SELECT "OK"
 #define HK_CANCEL "REC"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define JEWELS_LEFT   BUTTON_VOL_DOWN
+#define JEWELS_RIGHT  BUTTON_VOL_UP
+#define JEWELS_UP     BUTTON_PREV
+#define JEWELS_DOWN   BUTTON_NEXT
+#define JEWELS_SELECT BUTTON_SELECT
+#define JEWELS_CANCEL BUTTON_REC
+#define HK_SELECT "SELECT"
+#define HK_CANCEL "REC"
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index 20e7bd7..29c9430 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -199,6 +199,16 @@
     { PLA_DOWN_REPEAT,       BUTTON_DOWN,                       BUTTON_NONE},
     { PLA_LEFT_REPEAT,       BUTTON_PREV|BUTTON_REPEAT,         BUTTON_NONE},
     { PLA_RIGHT_REPEAT,      BUTTON_NEXT|BUTTON_REPEAT,         BUTTON_NONE},
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+    { PLA_UP,                BUTTON_PREV,                       BUTTON_NONE},
+    { PLA_DOWN,              BUTTON_NEXT,                       BUTTON_NONE},
+    { PLA_LEFT,              BUTTON_VOL_DOWN,                   BUTTON_NONE},
+    { PLA_RIGHT,             BUTTON_VOL_UP,                     BUTTON_NONE},
+    { PLA_UP_REPEAT,         BUTTON_PREV|BUTTON_REPEAT,         BUTTON_NONE},
+    { PLA_DOWN_REPEAT,       BUTTON_NEXT|BUTTON_REPEAT,         BUTTON_NONE},
+    { PLA_LEFT_REPEAT,       BUTTON_VOL_DOWN|BUTTON_REPEAT,     BUTTON_NONE},
+    { PLA_RIGHT_REPEAT,      BUTTON_VOL_UP|BUTTON_REPEAT,       BUTTON_NONE},
+
 #else
     #error pluginlib_actions: Unsupported keypad
 #endif
@@ -342,6 +352,15 @@
     { PLA_RIGHT_REPEAT,      BUTTON_NEXT|BUTTON_REPEAT,  BUTTON_NONE},
     { PLA_FIRE,              BUTTON_OK,                  BUTTON_NONE},
     { PLA_FIRE_REPEAT,       BUTTON_OK|BUTTON_REPEAT,    BUTTON_NONE},
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+    { PLA_LEFT,              BUTTON_VOL_DOWN,                   BUTTON_NONE},
+    { PLA_RIGHT,             BUTTON_VOL_UP,                     BUTTON_NONE},
+    { PLA_LEFT_REPEAT,       BUTTON_VOL_DOWN|BUTTON_REPEAT,     BUTTON_NONE},
+    { PLA_RIGHT_REPEAT,      BUTTON_VOL_UP|BUTTON_REPEAT,       BUTTON_NONE},
+    { PLA_FIRE,              BUTTON_SELECT,                     BUTTON_NONE},
+    { PLA_FIRE_REPEAT,       BUTTON_SELECT|BUTTON_REPEAT,       BUTTON_NONE},
+
+
 #else
     #error pluginlib_actions: Unsupported keypad
 #endif
@@ -521,6 +540,13 @@
     {PLA_MENU,          BUTTON_MENU,                    BUTTON_NONE},
     {PLA_FIRE,          BUTTON_OK,                      BUTTON_NONE},
     {PLA_FIRE_REPEAT,   BUTTON_OK|BUTTON_REPEAT,        BUTTON_NONE},
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+    {PLA_QUIT,          (BUTTON_REC|BUTTON_PLAY),       BUTTON_NONE},
+    {PLA_START,         BUTTON_PLAY,                    BUTTON_NONE},
+    {PLA_MENU,          BUTTON_REC,                     BUTTON_NONE},
+    {PLA_FIRE,          BUTTON_SELECT,                  BUTTON_NONE},
+    {PLA_FIRE_REPEAT,   BUTTON_SELECT|BUTTON_REPEAT,    BUTTON_NONE},
+
 #else
     #error pluginlib_actions: Unsupported keypad
 #endif
@@ -616,6 +642,12 @@
     {PLA_DEC,             BUTTON_DOWN,                         BUTTON_NONE},
     {PLA_INC_REPEAT,      BUTTON_UP,                           BUTTON_NONE},
     {PLA_DEC_REPEAT,      BUTTON_DOWN,                         BUTTON_NONE},
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+    {PLA_INC,             BUTTON_VOL_UP,                           BUTTON_NONE},
+    {PLA_DEC,             BUTTON_VOL_DOWN,                         BUTTON_NONE},
+    {PLA_INC_REPEAT,      BUTTON_VOL_UP|BUTTON_REPEAT,             BUTTON_NONE},
+    {PLA_DEC_REPEAT,      BUTTON_VOL_DOWN|BUTTON_REPEAT,           BUTTON_NONE},
+
 #else
     #error pluginlib_actions: Unsupported keypad
 #endif
diff --git a/apps/plugins/logo.c b/apps/plugins/logo.c
index b232023..59baa2d 100644
--- a/apps/plugins/logo.c
+++ b/apps/plugins/logo.c
@@ -193,6 +193,13 @@
 #define LP_DEC_Y BUTTON_DOWN
 #define LP_INC_Y BUTTON_UP
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define LP_QUIT  (BUTTON_REC|BUTTON_PLAY)
+#define LP_DEC_X BUTTON_VOL_DOWN
+#define LP_INC_X BUTTON_VOL_UP
+#define LP_DEC_Y BUTTON_PREV
+#define LP_INC_Y BUTTON_NEXT
+
 #else
 #define LP_QUIT BUTTON_OFF
 #define LP_DEC_X BUTTON_LEFT
diff --git a/apps/plugins/matrix.c b/apps/plugins/matrix.c
index e7326ea..5a13b3a 100644
--- a/apps/plugins/matrix.c
+++ b/apps/plugins/matrix.c
@@ -156,6 +156,12 @@
 #define MATRIX_SLEEP_LESS BUTTON_NEXT
 #define MATRIX_PAUSE      BUTTON_PLAY
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MATRIX_EXIT (BUTTON_REC|BUTTON_PLAY)
+#define MATRIX_SLEEP_MORE BUTTON_VOL_UP
+#define MATRIX_SLEEP_LESS BUTTON_VOL_DOWN
+#define MATRIX_PAUSE BUTTON_PLAY
+
 #else
 #error Unsupported keypad
 #endif
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index 69c137e..b225014 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -195,6 +195,14 @@
 #define BTN_DOWN         BUTTON_DOWN
 #define BTN_PLAY         BUTTON_PLAY
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BTN_QUIT         (BUTTON_REC | BUTTON_PLAY)
+#define BTN_RIGHT        BUTTON_VOL_DOWN
+#define BTN_LEFT         BUTTON_VOL_UP
+#define BTN_UP           BUTTON_PREV
+#define BTN_DOWN         BUTTON_NEXT
+#define BTN_PLAY         BUTTON_PLAY
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 7b26169..dbf3271 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -259,6 +259,16 @@
 #   define MINESWP_DISCOVER BUTTON_OK
 #   define MINESWP_INFO     BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#   define MINESWP_LEFT     BUTTON_VOL_DOWN
+#   define MINESWP_RIGHT    BUTTON_VOL_UP
+#   define MINESWP_UP       BUTTON_PREV
+#   define MINESWP_DOWN     BUTTON_NEXT
+#   define MINESWP_QUIT     (BUTTON_REC|BUTTON_PLAY)
+#   define MINESWP_TOGGLE   BUTTON_PLAY
+#   define MINESWP_DISCOVER BUTTON_SELECT
+#   define MINESWP_INFO     BUTTON_REC
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/mosaique.c b/apps/plugins/mosaique.c
index d6fc11d..6506c85 100644
--- a/apps/plugins/mosaique.c
+++ b/apps/plugins/mosaique.c
@@ -169,6 +169,11 @@
 #define MOSAIQUE_SPEED   BUTTON_PLAY
 #define MOSAIQUE_RESTART BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MOSAIQUE_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define MOSAIQUE_SPEED BUTTON_SELECT
+#define MOSAIQUE_RESTART BUTTON_PLAY
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index 070bdb1..50aa99b 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -2511,6 +2511,12 @@
 #define MP3ENC_DONE BUTTON_REC
 #define MP3ENC_SELECT BUTTON_OK
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MP3ENC_PREV BUTTON_PREV
+#define MP3ENC_NEXT BUTTON_NEXT
+#define MP3ENC_DONE BUTTON_PLAY
+#define MP3ENC_SELECT BUTTON_SELECT
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index 49d7f8b..6c8a2b8 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -206,6 +206,14 @@
 #define MPEG_START_TIME_RIGHT2      BUTTON_CANCEL
 #define MPEG_START_TIME_EXIT        BUTTON_REC
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MPEG_START_TIME_SELECT      BUTTON_SELECT
+#define MPEG_START_TIME_LEFT        BUTTON_PREV
+#define MPEG_START_TIME_RIGHT       BUTTON_NEXT
+#define MPEG_START_TIME_UP          BUTTON_VOL_UP
+#define MPEG_START_TIME_DOWN        BUTTON_VOL_DOWN
+#define MPEG_START_TIME_EXIT        BUTTON_REC
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 015aae4..4c7245d 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -317,6 +317,15 @@
 #define MPEG_RW         BUTTON_PREV
 #define MPEG_FF         BUTTON_NEXT
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MPEG_MENU       BUTTON_SELECT
+#define MPEG_PAUSE      (BUTTON_PLAY | BUTTON_REL)
+#define MPEG_STOP       (BUTTON_PLAY | BUTTON_REPEAT)
+#define MPEG_VOLDOWN    BUTTON_VOL_DOWN
+#define MPEG_VOLUP      BUTTON_VOL_UP
+#define MPEG_RW         BUTTON_PREV
+#define MPEG_FF         BUTTON_NEXT
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 69ae8bc..4195d96 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -287,6 +287,17 @@
 #define OSCILLOSCOPE_VOL_UP       BUTTON_UP
 #define OSCILLOSCOPE_VOL_DOWN     BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define OSCILLOSCOPE_QUIT         (BUTTON_REC | BUTTON_PLAY)
+#define OSCILLOSCOPE_DRAWMODE     BUTTON_SELECT
+#define OSCILLOSCOPE_ADVMODE      BUTTON_REC
+#define OSCILLOSCOPE_ORIENTATION  (BUTTON_SELECT|BUTTON_REPEAT)
+#define OSCILLOSCOPE_PAUSE        BUTTON_PLAY
+#define OSCILLOSCOPE_SPEED_UP     BUTTON_NEXT
+#define OSCILLOSCOPE_SPEED_DOWN   BUTTON_PREV
+#define OSCILLOSCOPE_VOL_UP       BUTTON_VOL_UP
+#define OSCILLOSCOPE_VOL_DOWN     BUTTON_VOL_DOWN
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c
index f80b163..a429b00 100644
--- a/apps/plugins/pegbox.c
+++ b/apps/plugins/pegbox.c
@@ -418,6 +418,25 @@
 #define LVL_DOWN_TEXT "CANCEL"
 #define SELECT_TEXT "PLAY"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PEGBOX_SAVE     (BUTTON_PLAY|BUTTON_SELECT)
+#define PEGBOX_QUIT     (BUTTON_REC|BUTTON_PLAY)
+#define PEGBOX_RESTART  BUTTON_REC
+#define PEGBOX_LVL_UP   (BUTTON_PLAY|BUTTON_PREV)
+#define PEGBOX_LVL_DOWN (BUTTON_PLAY|BUTTON_NEXT)
+#define PEGBOX_UP       BUTTON_PREV
+#define PEGBOX_DOWN     BUTTON_NEXT
+#define PEGBOX_RIGHT    BUTTON_VOL_UP
+#define PEGBOX_LEFT     BUTTON_VOL_DOWN
+#define PEGBOX_SELECT   BUTTON_SELECT
+
+#define SAVE_TEXT "PLAY + SELECT"
+#define QUIT_TEXT "REC + PLAY"
+#define RESTART_TEXT "REC"
+#define LVL_UP_TEXT "PREV"
+#define LVL_DOWN_TEXT "NEXT"
+#define SELECT_TEXT "SELECT"
+
 #else
 #error Unsupported keymap!
 #endif
diff --git a/apps/plugins/plasma.c b/apps/plugins/plasma.c
index f91242e..adf7ab5 100644
--- a/apps/plugins/plasma.c
+++ b/apps/plugins/plasma.c
@@ -170,6 +170,12 @@
 #define PLASMA_DECREASE_FREQUENCY BUTTON_DOWN
 #define PLASMA_REGEN_COLORS       BUTTON_PLAY
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PLASMA_QUIT               (BUTTON_REC|BUTTON_PLAY)
+#define PLASMA_INCREASE_FREQUENCY BUTTON_VOL_DOWN
+#define PLASMA_DECREASE_FREQUENCY BUTTON_VOL_UP
+#define PLASMA_REGEN_COLORS       BUTTON_PLAY
+
 #endif
 
 #ifdef HAVE_TOUCHSCREEN
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index d14db5f..08899d7 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -213,6 +213,13 @@
 #define PONG_RIGHT_UP    BUTTON_PLAY
 #define PONG_RIGHT_DOWN  BUTTON_NEXT
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PONG_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define PONG_LEFT_UP BUTTON_PREV
+#define PONG_LEFT_DOWN BUTTON_NEXT
+#define PONG_RIGHT_UP BUTTON_VOL_UP
+#define PONG_RIGHT_DOWN BUTTON_VOL_DOWN
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h
index 145335c..9b4c43c 100644
--- a/apps/plugins/reversi/reversi-gui.h
+++ b/apps/plugins/reversi/reversi-gui.h
@@ -216,6 +216,16 @@
 #define REVERSI_BUTTON_MAKE_MOVE BUTTON_OK
 #define REVERSI_BUTTON_MENU      BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define REVERSI_BUTTON_UP BUTTON_PREV
+#define REVERSI_BUTTON_DOWN BUTTON_NEXT
+#define REVERSI_BUTTON_LEFT BUTTON_VOL_DOWN
+#define REVERSI_BUTTON_RIGHT BUTTON_VOL_UP 
+#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT
+#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS 
+#define REVERSI_BUTTON_MENU BUTTON_SELECT
+#define REVERSI_BUTTON_MENU_LONGPRESS 
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index 891b79b..f1ad839 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -326,6 +326,16 @@
 #define ROCKBLOX_DROP          BUTTON_OK
 #define ROCKBLOX_RESTART       BUTTON_CANCEL
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define ROCKBLOX_OFF           (BUTTON_REC|BUTTON_PLAY)
+#define ROCKBLOX_ROTATE_CCW    BUTTON_PREV
+#define ROCKBLOX_ROTATE_CW     BUTTON_NEXT
+#define ROCKBLOX_DOWN          BUTTON_SELECT
+#define ROCKBLOX_LEFT          BUTTON_VOL_DOWN
+#define ROCKBLOX_RIGHT         BUTTON_VOL_UP
+#define ROCKBLOX_DROP          BUTTON_PLAY
+#define ROCKBLOX_RESTART       BUTTON_REC
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/rockblox1d.c b/apps/plugins/rockblox1d.c
index d34087a..5006d88 100644
--- a/apps/plugins/rockblox1d.c
+++ b/apps/plugins/rockblox1d.c
@@ -117,6 +117,10 @@
 #define ONEDROCKBLOX_DOWN              BUTTON_DOWN
 #define ONEDROCKBLOX_QUIT              BUTTON_REC
 
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+#define ONEDROCKBLOX_DOWN              BUTTON_SELECT
+#define ONEDROCKBLOX_QUIT              (BUTTON_REC | BUTTON_PLAY)
+
 #elif defined(HAVE_TOUCHSCREEN)
 
 #define ONEDROCKBLOX_DOWN              BUTTON_BOTTOMMIDDLE
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index f6ba83e..7bf49c1 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -221,6 +221,15 @@
 #define PUZZLE_SHUFFLE BUTTON_CANCEL
 #define PUZZLE_PICTURE BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PUZZLE_QUIT    (BUTTON_REC | BUTTON_PLAY)
+#define PUZZLE_LEFT BUTTON_VOL_DOWN
+#define PUZZLE_RIGHT BUTTON_VOL_UP
+#define PUZZLE_UP      BUTTON_PREV
+#define PUZZLE_DOWN    BUTTON_NEXT
+#define PUZZLE_SHUFFLE BUTTON_REC
+#define PUZZLE_PICTURE BUTTON_PLAY
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index 1d14efe..c3fe84e 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -208,6 +208,14 @@
 #define SNAKE_DOWN      BUTTON_DOWN
 #define SNAKE_PLAYPAUSE BUTTON_PLAY
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SNAKE_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define SNAKE_LEFT BUTTON_VOL_DOWN
+#define SNAKE_RIGHT BUTTON_VOL_UP
+#define SNAKE_UP   BUTTON_PREV
+#define SNAKE_DOWN BUTTON_NEXT
+#define SNAKE_PLAYPAUSE BUTTON_PLAY
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index 1369525..d9b6542 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -317,6 +317,15 @@
 #define SNAKE2_PLAYPAUSE   BUTTON_PLAY
 #define SNAKE2_PLAYPAUSE_TEXT "Play"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SNAKE2_LEFT BUTTON_VOL_DOWN
+#define SNAKE2_RIGHT BUTTON_VOL_UP
+#define SNAKE2_UP   BUTTON_PREV
+#define SNAKE2_DOWN BUTTON_NEXT
+#define SNAKE2_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define SNAKE2_PLAYPAUSE BUTTON_PLAY
+#define SNAKE2_PLAYPAUSE_TEXT "Play"
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c
index a81e12b..eb8870e 100644
--- a/apps/plugins/snow.c
+++ b/apps/plugins/snow.c
@@ -82,6 +82,9 @@
 #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
 #define SNOW_QUIT BUTTON_REC
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SNOW_QUIT (BUTTON_REC|BUTTON_PLAY)
+
 #else
 #define SNOW_QUIT BUTTON_OFF
 #if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index e7b2219..838b4de 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -437,6 +437,21 @@
 #define BUTTON_SAVE          BUTTON_MENU
 #define BUTTON_SAVE_NAME "MENU"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SOKOBAN_LEFT         BUTTON_VOL_DOWN
+#define SOKOBAN_RIGHT        BUTTON_VOL_UP
+#define SOKOBAN_UP           BUTTON_PREV
+#define SOKOBAN_DOWN         BUTTON_NEXT
+#define SOKOBAN_MENU         BUTTON_SELECT
+#define SOKOBAN_UNDO         (BUTTON_PLAY | BUTTON_PREV)
+#define SOKOBAN_REDO         (BUTTON_PLAY | BUTTON_NEXT)
+#define SOKOBAN_LEVEL_DOWN   (BUTTON_PLAY | BUTTON_VOL_DOWN)
+#define SOKOBAN_LEVEL_REPEAT BUTTON_REC
+#define SOKOBAN_LEVEL_UP     (BUTTON_PLAY | BUTTON_VOL_UP)
+#define SOKOBAN_PAUSE        BUTTON_PLAY
+#define BUTTON_SAVE          (BUTTON_PLAY|BUTTON_SELECT)
+#define BUTTON_SAVE_NAME "PLAY+SELECT"
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 8737275..cf4e647 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -457,6 +457,24 @@
 #   define HK_CUR2STACK      "PLAY"
 #   define HK_REM2STACK      "PLAY..."
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#   define SOL_QUIT         (BUTTON_REC | BUTTON_PLAY)
+#   define SOL_UP           BUTTON_PREV
+#   define SOL_DOWN         BUTTON_NEXT
+#   define SOL_LEFT         BUTTON_VOL_DOWN
+#   define SOL_RIGHT        BUTTON_VOL_UP
+#   define SOL_MOVE_PRE      BUTTON_SELECT
+#   define SOL_MOVE         (BUTTON_SELECT | BUTTON_REL)
+#   define SOL_DRAW         BUTTON_REC
+#   define SOL_REM2CUR      (BUTTON_REC | BUTTON_REPEAT)
+#   define SOL_CUR2STACK    BUTTON_PLAY
+#   define SOL_REM2STACK    (BUTTON_PLAY | BUTTON_REPEAT)
+#   define HK_MOVE         "SELECT"
+#   define HK_DRAW         "REC"
+#   define HK_REM2CUR      "REC.."
+#   define HK_CUR2STACK    "PLAY"
+#   define HK_REM2STACK    "PLAY...."
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index 586beb3..0ade406 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -229,6 +229,16 @@
 #define AST_RIGHT      BUTTON_NEXT
 #define AST_FIRE       BUTTON_OK
 
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+
+#define AST_PAUSE (BUTTON_PLAY|BUTTON_SELECT)
+#define AST_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define AST_THRUST BUTTON_REC
+#define AST_HYPERSPACE BUTTON_PLAY
+#define AST_LEFT BUTTON_PREV
+#define AST_RIGHT BUTTON_NEXT
+#define AST_FIRE BUTTON_SELECT
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index 1e8eb86..d11e318 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -393,6 +393,24 @@
 #define STAR_LEVEL_DOWN_NAME "CANCEL"
 #define STAR_LEVEL_REPEAT_NAME "MENU"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define STAR_QUIT           (BUTTON_REC | BUTTON_PLAY)
+#define STAR_LEFT           BUTTON_VOL_DOWN
+#define STAR_RIGHT          BUTTON_VOL_UP
+#define STAR_UP             BUTTON_PREV
+#define STAR_DOWN           BUTTON_NEXT
+#define STAR_TOGGLE_CONTROL_PRE BUTTON_SELECT
+#define STAR_TOGGLE_CONTROL (BUTTON_SELECT | BUTTON_REL)
+#define STAR_LEVEL_UP       BUTTON_PLAY
+#define STAR_LEVEL_DOWN     BUTTON_REC
+#define STAR_LEVEL_REPEAT   (BUTTON_SELECT | BUTTON_REPEAT)
+#define STAR_TOGGLE_CONTROL_NAME "SELECT"
+#define STAR_QUIT_NAME      "REC + PLAY"
+#define STAR_LEVEL_UP_NAME  "PLAY"
+#define STAR_LEVEL_DOWN_NAME "REC"
+#define STAR_LEVEL_REPEAT_NAME "SELECT LONG"
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c
index 4b3b087..1ae0f28 100644
--- a/apps/plugins/starfield.c
+++ b/apps/plugins/starfield.c
@@ -158,6 +158,14 @@
 #define STARFIELD_DECREASE_NB_STARS  BUTTON_PREV
 #define STARFIELD_TOGGLE_COLOR       BUTTON_PLAY
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define STARFIELD_QUIT               (BUTTON_REC|BUTTON_PLAY)
+#define STARFIELD_INCREASE_ZMOVE     BUTTON_VOL_UP
+#define STARFIELD_DECREASE_ZMOVE     BUTTON_VOL_DOWN
+#define STARFIELD_INCREASE_NB_STARS  BUTTON_NEXT
+#define STARFIELD_DECREASE_NB_STARS  BUTTON_PREV
+#define STARFIELD_TOGGLE_COLOR       BUTTON_PLAY
+
 #endif
 
 #ifdef HAVE_TOUCHSCREEN
diff --git a/apps/plugins/stats.c b/apps/plugins/stats.c
index ae29784..eaa1055 100644
--- a/apps/plugins/stats.c
+++ b/apps/plugins/stats.c
@@ -105,6 +105,9 @@
 #elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
 #define STATS_STOP BUTTON_REC
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define STATS_STOP BUTTON_REC
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index ad3b285..cb85e36 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -223,6 +223,14 @@
 #define STOPWATCH_SCROLL_UP   BUTTON_UP
 #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define STOPWATCH_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define STOPWATCH_START_STOP BUTTON_PLAY
+#define STOPWATCH_RESET_TIMER BUTTON_PREV
+#define STOPWATCH_LAP_TIMER BUTTON_NEXT
+#define STOPWATCH_SCROLL_UP BUTTON_VOL_UP
+#define STOPWATCH_SCROLL_DOWN BUTTON_VOL_DOWN
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h
index 63e0718..8974bd8 100644
--- a/apps/plugins/sudoku/sudoku.h
+++ b/apps/plugins/sudoku/sudoku.h
@@ -281,6 +281,15 @@
 #define SUDOKU_BUTTON_MENU     BUTTON_MENU
 #define SUDOKU_BUTTON_POSSIBLE BUTTON_PLAY
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SUDOKU_BUTTON_MENU       BUTTON_REC
+#define SUDOKU_BUTTON_LEFT       BUTTON_VOL_DOWN
+#define SUDOKU_BUTTON_RIGHT      BUTTON_VOL_UP
+#define SUDOKU_BUTTON_CHANGEDIR  BUTTON_SELECT
+#define SUDOKU_BUTTON_TOGGLE     BUTTON_NEXT
+#define SUDOKU_BUTTON_TOGGLEBACK BUTTON_PREV
+#define SUDOKU_BUTTON_POSSIBLE   BUTTON_PLAY
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/test_fps.c b/apps/plugins/test_fps.c
index f7706f6..52a56d5 100644
--- a/apps/plugins/test_fps.c
+++ b/apps/plugins/test_fps.c
@@ -35,6 +35,8 @@
 #define FPS_QUIT BUTTON_PLAY
 #elif CONFIG_KEYPAD == SANSA_FUZE_PAD
 #define FPS_QUIT (BUTTON_HOME|BUTTON_REPEAT)
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define FPS_QUIT (BUTTON_REC|BUTTON_PLAY)
 #elif defined(BUTTON_OFF)
 #define FPS_QUIT BUTTON_OFF
 #else
diff --git a/apps/plugins/test_grey.c b/apps/plugins/test_grey.c
index a1189dd..c2adaf0 100644
--- a/apps/plugins/test_grey.c
+++ b/apps/plugins/test_grey.c
@@ -83,6 +83,14 @@
 #define GREY_UP   BUTTON_UP
 #define GREY_DOWN BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define GREY_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define GREY_OK   BUTTON_SELECT
+#define GREY_PREV BUTTON_PREV
+#define GREY_NEXT BUTTON_NEXT
+#define GREY_UP   BUTTON_VOL_UP
+#define GREY_DOWN BUTTON_VOL_DOWN
+
 #else
 #error unsupported keypad
 #endif
diff --git a/apps/plugins/test_greylib_bitmap_scale.c b/apps/plugins/test_greylib_bitmap_scale.c
index 7b226d4..892f3dc 100644
--- a/apps/plugins/test_greylib_bitmap_scale.c
+++ b/apps/plugins/test_greylib_bitmap_scale.c
@@ -30,6 +30,8 @@
 #define GBS_QUIT BUTTON_RC_REC
 #elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
 #define GBS_QUIT BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define GBS_QUIT (BUTTON_REC|BUTTON_PLAY)
 #elif defined(BUTTON_OFF)
 #define GBS_QUIT BUTTON_OFF
 #else
diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c
index 5f1e3ca..fb59193 100644
--- a/apps/plugins/test_scanrate.c
+++ b/apps/plugins/test_scanrate.c
@@ -71,6 +71,13 @@
 #define SCANRATE_INC     BUTTON_UP
 #define SCANRATE_DEC     BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SCANRATE_DONE    BUTTON_PLAY
+#define SCANRATE_FASTINC BUTTON_NEXT
+#define SCANRATE_FASTDEC BUTTON_PREV
+#define SCANRATE_INC     BUTTON_VOL_UP
+#define SCANRATE_DEC     BUTTON_VOL_DOWN
+
 #endif
 
 /* Default refresh rates in 1/10 Hz */
diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c
index 9ebc1d9..ed84d26 100644
--- a/apps/plugins/viewer.c
+++ b/apps/plugins/viewer.c
@@ -486,6 +486,16 @@
 #define VIEWER_AUTOSCROLL   BUTTON_PLAY
 #define VIEWER_BOOKMARK     BUTTON_POWER
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define VIEWER_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define VIEWER_PAGE_UP BUTTON_PREV
+#define VIEWER_PAGE_DOWN BUTTON_NEXT
+#define VIEWER_SCREEN_LEFT BUTTON_VOL_DOWN
+#define VIEWER_SCREEN_RIGHT BUTTON_VOL_UP
+#define VIEWER_MENU BUTTON_SELECT
+#define VIEWER_AUTOSCROLL BUTTON_PLAY
+#define VIEWER_BOOKMARK BUTTON_REC
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index f3473c8..7cf5a5f 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -283,6 +283,17 @@
 #define LABEL_MENU "MENU"
 #define LABEL_VOLUME "UP/DOWN"
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define VUMETER_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define VUMETER_HELP BUTTON_PLAY
+#define VUMETER_MENU BUTTON_SELECT
+#define VUMETER_UP BUTTON_VOL_UP
+#define VUMETER_DOWN BUTTON_VOL_DOWN
+#define LABEL_HELP "PLAY"
+#define LABEL_QUIT "MENU"
+#define LABEL_MENU "SELECT"
+#define LABEL_VOLUME "UP/DOWN"
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 3324d6c..037f400 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -268,6 +268,16 @@
 #define BTN_QUIT       BUTTON_REC
 #define BTN_STOPRESET  BUTTON_CANCEL
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define BTN_DIR_UP BUTTON_REC
+#define BTN_DIR_DOWN BUTTON_PLAY
+#define BTN_DIR_LEFT BUTTON_PREV
+#define BTN_DIR_RIGHT BUTTON_NEXT
+#define BTN_STARTPAUSE BUTTON_SELECT
+#define BTN_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define BTN_STOPRESET (BUTTON_SELECT|BUTTON_REPEAT)
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index 6edc629..4dd673c 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -232,6 +232,15 @@
 #define DOWN  BUTTON_DOWN
 #define PAUSE BUTTON_PLAY
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define QUIT  (BUTTON_REC|BUTTON_PLAY)
+#define LEFT  BUTTON_VOL_DOWN
+#define RIGHT BUTTON_VOL_UP
+#define UP    BUTTON_PREV
+#define DOWN  BUTTON_NEXT
+#define PAUSE BUTTON_PLAY
+
 #else
 #error No keymap defined!
 #endif
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h
index 3ca5451..ee2a8d5 100644
--- a/apps/plugins/zxbox/keymaps.h
+++ b/apps/plugins/zxbox/keymaps.h
@@ -189,6 +189,15 @@
 #define ZX_SELECT       BUTTON_OK
 #define ZX_MENU         BUTTON_MENU
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define ZX_MENU         (BUTTON_REC|BUTTON_PLAY)
+#define ZX_UP           BUTTON_PREV
+#define ZX_DOWN         BUTTON_NEXT
+#define ZX_SELECT       BUTTON_SELECT
+#define ZX_LEFT         BUTTON_VOL_DOWN
+#define ZX_RIGHT        BUTTON_VOL_UP
+
 #else
 #error Keymap not defined!
 
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c
index b48c5ec..bc7e3ac 100644
--- a/apps/plugins/zxbox/zxbox_keyb.c
+++ b/apps/plugins/zxbox/zxbox_keyb.c
@@ -184,6 +184,15 @@
 #define KBD_UP     BUTTON_UP
 #define KBD_DOWN   BUTTON_DOWN
 
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define KBD_SELECT BUTTON_SELECT
+#define KBD_ABORT  BUTTON_REC
+#define KBD_LEFT   BUTTON_VOL_DOWN
+#define KBD_RIGHT  BUTTON_VOL_UP
+#define KBD_UP     BUTTON_PREV
+#define KBD_DOWN   BUTTON_NEXT
+
 #endif
 
 #ifdef HAVE_TOUCHSCREEN
diff --git a/bootloader/SOURCES b/bootloader/SOURCES
index 31b0514..24d0bd2 100644
--- a/bootloader/SOURCES
+++ b/bootloader/SOURCES
@@ -63,4 +63,6 @@
 #elif defined(PBELL_VIBE500)
 main-pp.c
 show_logo.c
+#elif defined(MPIO_HD200)
+mpio_hd200.c
 #endif
diff --git a/firmware/SOURCES b/firmware/SOURCES
index b13f6a0..48360d7 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -258,7 +258,8 @@
 #if !defined(SIMULATOR) && !defined(BOOTLOADER)
 #if defined(HAVE_UDA1380)
 drivers/audio/uda1380.c
-#elif defined(HAVE_WM8751)
+#elif defined(HAVE_WM8751) \
+   || defined(HAVE_WM8750)
 drivers/audio/wm8751.c
 #elif defined(HAVE_WM8978)
 drivers/audio/wm8978.c
@@ -1609,3 +1610,24 @@
 #endif /* SIMULATOR */
 #endif
 
+#ifdef MPIO_HD200
+#ifndef SIMULATOR
+/* TODO: currently including all files */
+target/coldfire/mpio/hd200/adc-hd200.c
+target/coldfire/mpio/hd200/button-hd200.c
+target/coldfire/mpio/hd200/lcd-hd200.c
+target/coldfire/mpio/hd200/lcd-as-hd200.S
+target/coldfire/mpio/hd200/power-hd200.c
+target/coldfire/mpio/hd200/powermgmt-hd200.c
+target/coldfire/mpio/hd200/backlight-hd200.c
+target/coldfire/mpio/hd200/system-hd200.c
+target/coldfire/mpio/hd200/usb-hd200.c
+target/coldfire/mpio/fmradio_i2c-mpio.c
+target/coldfire/mpio/ata-mpio.c
+target/coldfire/mpio/ata-as-mpio.S
+#ifndef BOOTLOADER
+target/coldfire/mpio/audio-mpio.c
+target/coldfire/wmcodec-coldfire.c
+#endif /* BOOTLOADER */
+#endif /* SIMULATOR */
+#endif
diff --git a/firmware/drivers/audio/wm8751.c b/firmware/drivers/audio/wm8751.c
index b42c4b1..cdc64fd 100644
--- a/firmware/drivers/audio/wm8751.c
+++ b/firmware/drivers/audio/wm8751.c
@@ -116,17 +116,22 @@
      *    and Headphone outputs are all OFF (DACMU = 1 Power
      *    Management registers 1 and 2 are all zeros).
      */
+
     wmcodec_write(RESET, RESET_RESET);    /*Reset*/
 
      /* 2. Enable Vmid and VREF. */
     wmcodec_write(PWRMGMT1, PWRMGMT1_VREF | PWRMGMT1_VMIDSEL_5K);
 
+#ifdef CODEC_SLAVE
+    wmcodec_write(AINTFCE,AINTFCE_WL_16|AINTFCE_FORMAT_I2S);
+#else
     /* BCLKINV=0(Dont invert BCLK) MS=1(Enable Master) LRSWAP=0 LRP=0 */
     /* IWL=00(16 bit) FORMAT=10(I2S format) */
     wmcodec_write(AINTFCE, AINTFCE_MS | AINTFCE_WL_16 |
                   AINTFCE_FORMAT_I2S);
-
+#endif
     /* Set default samplerate */
+
     audiohw_set_frequency(HW_FREQ_DEFAULT);
 }
 
@@ -140,7 +145,7 @@
     wmcodec_write(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR);
 
      /* 4. Enable line and / or headphone output buffers as required. */
-#ifdef MROBE_100
+#if defined(MROBE_100) || defined(MPIO_HD200)
     wmcodec_write(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR |
                   PWRMGMT2_LOUT1 | PWRMGMT2_ROUT1);
 #else
@@ -166,6 +171,19 @@
 #endif
 #endif
 
+#ifdef MPIO_HD200
+    /* Crude fix for high pitch noise at startup
+     * I should find out what realy causes this
+     */
+    wmcodec_write(LOUT1, LOUT1_BITS|0x7f);
+    wmcodec_write(ROUT1, ROUT1_BITS|0x7f);
+    wmcodec_write(LOUT1, LOUT1_BITS);
+    wmcodec_write(ROUT1, ROUT1_BITS);
+#endif
+
+    /* lower power consumption */
+    wmcodec_write(PWRMGMT1, PWRMGMT1_VREF | PWRMGMT1_VMIDSEL_50K);
+
     audiohw_mute(false);
 
 #ifdef MROBE_100
@@ -234,6 +252,8 @@
 
 void audiohw_set_frequency(int fsel)
 {
+    (void)fsel;
+#ifndef CODEC_SLAVE
     static const unsigned char srctrl_table[HW_NUM_FREQ] =
     {
         HW_HAVE_11_([HW_FREQ_11] = CODEC_SRCTRL_11025HZ,)
@@ -246,4 +266,5 @@
         fsel = HW_FREQ_DEFAULT;
 
     wmcodec_write(CLOCKING, srctrl_table[fsel]);
+#endif
 }
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index 781bc12..c00b673 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -38,7 +38,7 @@
 #include "uda1380.h"
 #elif defined(HAVE_UDA1341)
 #include "uda1341.h"
-#elif defined(HAVE_WM8751)
+#elif defined(HAVE_WM8750) || defined(HAVE_WM8751)
 #include "wm8751.h"
 #elif defined(HAVE_WM8978)
 #include "wm8978.h"
diff --git a/firmware/export/config.h b/firmware/export/config.h
index fb9381e..906a3fe 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -117,6 +117,7 @@
 #define MINI2440_PAD       41
 #define PHILIPS_HDD6330_PAD 42
 #define PBELL_VIBE500_PAD 43
+#define MPIO_HD200_PAD     44
 
 /* CONFIG_REMOTE_KEYPAD */
 #define H100_REMOTE 1
@@ -412,6 +413,8 @@
 #include "config/samsungyps3.h"
 #elif defined(PBELL_VIBE500)
 #include "config/vibe500.h"
+#elif defined(MPIO_HD200)
+#include "config/mpiohd200.h"
 #else
 /* no known platform */
 #endif
diff --git a/firmware/export/wm8751.h b/firmware/export/wm8751.h
index 15170b7..c171642 100644
--- a/firmware/export/wm8751.h
+++ b/firmware/export/wm8751.h
@@ -98,6 +98,15 @@
 #define RESET                       0x0f
 #define RESET_RESET                 0x000
 
+/* WM8750 only */
+#define ENHANCE_3D                  0x10
+#define ENHANCE_3D_3DEN             (1 << 0)
+#define ENHANCE_3D_DEPTH(x)         (((x) & 0xf) << 1)
+#define ENHANCE_3D_3DLC             (1 << 5)
+#define ENHANCE_3D_3DUC             (1 << 6)
+#define ENHANCE_3D_MODE3D_PLAYBACK  (1 << 7)
+#define ENHANCE_3D_MODE3D_RECORD    (0 << 7)
+
 #define ADDITIONAL1                 0x17
 #define ADDITIONAL1_TOEN            (1 << 0)
 #define ADDITIONAL1_DACINV          (1 << 1)
diff --git a/firmware/sound.c b/firmware/sound.c
index d64dfcf..4f95b6e 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -235,11 +235,12 @@
     dac_volume(tenthdb2reg(l), tenthdb2reg(r), false);
 #elif defined(HAVE_UDA1380) || defined(HAVE_WM8975) || defined(HAVE_WM8758) \
    || defined(HAVE_WM8711) || defined(HAVE_WM8721) || defined(HAVE_WM8731) \
-   || defined(HAVE_WM8751) || defined(HAVE_AS3514) || defined(HAVE_TSC2100) \
-   || defined(HAVE_AK4537) || defined(HAVE_UDA1341)
+   || defined(HAVE_WM8750) || defined(HAVE_WM8751) || defined(HAVE_AS3514) \
+   || defined(HAVE_TSC2100) || defined(HAVE_AK4537) || defined(HAVE_UDA1341)
     audiohw_set_master_vol(tenthdb2master(l), tenthdb2master(r));
 #if defined(HAVE_WM8975) || defined(HAVE_WM8758) \
-    || (defined(HAVE_WM8751) && !defined(MROBE_100)) || defined(HAVE_WM8985)
+    || defined(HAVE_WM8750) || (defined(HAVE_WM8751) && !defined(MROBE_100)) \
+    || defined(HAVE_WM8985)
     audiohw_set_lineout_vol(tenthdb2master(0), tenthdb2master(0));
 #endif
 
@@ -295,7 +296,7 @@
         return;
 
 #if !defined(AUDIOHW_HAVE_CLIPPING)
-#if defined(HAVE_WM8751)
+#if defined(HAVE_WM8750) || defined(HAVE_WM8751)
     current_bass = value;
 #else
     current_bass =  value * 10;
@@ -319,7 +320,7 @@
         return;
 
 #if !defined(AUDIOHW_HAVE_CLIPPING)
-#if defined(HAVE_WM8751)
+#if defined(HAVE_WM8750) || defined(HAVE_WM8751)
     current_treble = value;
 #else
     current_treble = value * 10;
diff --git a/firmware/target/coldfire/crt0.S b/firmware/target/coldfire/crt0.S
index bc8a370..38365c7 100644
--- a/firmware/target/coldfire/crt0.S
+++ b/firmware/target/coldfire/crt0.S
@@ -63,7 +63,16 @@
     move.l  #0x00000180,%d0 /* CSCR0 - no wait states, 16 bits, no bursts */
     move.l  %d0,(0x088,%a0)
         
-#ifndef IAUDIO_M3
+#ifdef MPIO_HD200
+    /* Chip select 3 - LCD controller */
+    /* values taken from original firmware except base address*/
+    move.l  #0xf0000000,%d0 /* CSAR3 - Base = 0xf0000000 */
+    move.l  %d0,(0x0a4,%a0)
+    moveq.l #0x1,%d0        /* CSMR3 - 64K */
+    move.l  %d0,(0x0a8,%a0)
+    move.l  #0x00000980,%d0 /* CSCR3 - 1 wait state, 16 bits no bursts */
+    move.l  %d0,(0x0ac,%a0)
+#elif !(defined IAUDIO_M3)
     /* Chip select 1 - LCD controller */
     move.l  #0xf0000000,%d0 /* CSAR1 - Base = 0xf0000000 */
     move.l  %d0,(0x08c,%a0)
@@ -267,6 +276,14 @@
     or.l %d0,(0xbc,%a1)
 #endif
 
+#ifdef MPIO_HD200
+    /* Set KEEP_ACT */
+    move.l #0x02200000,%d0
+    or.l %d0,(0xb4,%a1)
+    or.l %d0,(0xb8,%a1)
+    or.l %d0,(0xbc,%a1)
+#endif
+
     /* zero out bss */
     lea     _edata,%a2
     lea     _end,%a4
diff --git a/firmware/target/coldfire/i2c-coldfire.c b/firmware/target/coldfire/i2c-coldfire.c
index ebfe0a0..ab3018d 100644
--- a/firmware/target/coldfire/i2c-coldfire.c
+++ b/firmware/target/coldfire/i2c-coldfire.c
@@ -70,6 +70,10 @@
 #elif defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
     MBDR = 0;    /* iRiver firmware does this */
     MBCR = IEN;  /* Enable interface */
+#elif defined(MPIO_HD200)
+    /* second channel */
+    MFDR2 = 0x0d;
+    MBCR2 = IEN;
 #endif
 }
 
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c
index 0782b11..209d227 100644
--- a/firmware/target/coldfire/pcm-coldfire.c
+++ b/firmware/target/coldfire/pcm-coldfire.c
@@ -55,6 +55,24 @@
 
 #define FPARM_CLOCKSEL       0
 #define FPARM_CLSEL          1
+
+/* SCLK = Fs * bit clocks per word
+ * so SCLK should be Fs * 64
+ *
+ * CLOCKSEL sets SCLK freq based on Audio CLK
+ * 0x0c SCLK = Audio CLK/2   88200 * 64 = 5644800 Hz
+ * 0x06 SCLK = Audio CLK/4   44100 * 64 = 2822400 Hz
+ * 0x04 SCLK = Audio CLK/8   22050 * 64 = 1411200 Hz
+ * 0x02 SCLK = Audio CLK/16  11025 * 64 = 705600 Hz
+ *
+ * CLSEL sets MCLK1/2 DAC freq based on XTAL freq
+ * 0x01 MCLK1/2 = XTAL freq
+ * 0x02 MCLK1/2 = XTAL/2 freq
+ *
+ * Audio CLK can be XTAL freq or XTAL/2 freq  (bit22 in PLLCR)
+ * we always set bit22 so Audio CLK is always XTAL freq
+ */
+
 #if CONFIG_CPU == MCF5249 && defined(HAVE_UDA1380)
 static const unsigned char pcm_freq_parms[HW_NUM_FREQ][2] =
 {
@@ -65,6 +83,16 @@
 };
 #endif
 
+#if CONFIG_CPU == MCF5249 && defined(HAVE_WM8750)
+static const unsigned char pcm_freq_parms[HW_NUM_FREQ][2] =
+{
+    [HW_FREQ_88] = { 0x0c, 0x01 },
+    [HW_FREQ_44] = { 0x06, 0x01 },
+    [HW_FREQ_22] = { 0x04, 0x01 },
+    [HW_FREQ_11] = { 0x02, 0x01 },
+};
+#endif
+
 #if (CONFIG_CPU == MCF5250 || CONFIG_CPU == MCF5249) && defined(HAVE_TLV320)
 static const unsigned char pcm_freq_parms[HW_NUM_FREQ][2] =
 {
@@ -324,6 +352,7 @@
     return (void *)((addr + 2) & ~3);
 } /* pcm_play_dma_get_peak_buffer */
 
+#ifdef HAVE_RECORDING
 /****************************************************************************
  ** Recording DMA transfer
  **/
@@ -487,3 +516,4 @@
     *count = (end >> 2) - addr;
     return (void *)(addr << 2);
 } /* pcm_rec_dma_get_peak_buffer */
+#endif
diff --git a/firmware/target/coldfire/system-coldfire.c b/firmware/target/coldfire/system-coldfire.c
index a387824..ba67daa 100644
--- a/firmware/target/coldfire/system-coldfire.c
+++ b/firmware/target/coldfire/system-coldfire.c
@@ -152,6 +152,11 @@
 #define EXCP_BUTTON_MASK        0x00000202
 #define EXCP_BUTTON_VALUE       0x00000200 /* On button and !hold */
 #define EXCP_PLLCR              0x10800000
+#elif defined(MPIO_HD200)
+#define EXCP_BUTTON_GPIO_READ   GPIO1_READ
+#define EXCP_BUTTON_MASK        0x01000010
+#define EXCP_BUTTON_VALUE       0x01000000 /* Play button and !hold */
+#define EXCP_PLLCR              0x10800000
 #else
 #define EXCP_BUTTON_GPIO_READ   GPIO1_READ
 #define EXCP_BUTTON_MASK        0x00000022
diff --git a/tools/configure b/tools/configure
index 8764614..186e0d5 100755
--- a/tools/configure
+++ b/tools/configure
@@ -930,9 +930,12 @@
                                                  ==Logik==
  ==Samsung==              ==Tatung==             80) DAX 1GB MP3/DAB
  140) YH-820              150) Elio TPJ-1022
- 141) YH-920                                     ==Lyre project==1
+ 141) YH-920                                     ==Lyre project==
  142) YH-925              ==Packard Bell==       130) Lyre proto 1
  143) YP-S3               160) Vibe 500          131) Mini2440
+
+ ==MPIO==
+ 170) HD200
 EOF
 
   buildfor=`input`;
@@ -2525,6 +2528,29 @@
     t_model="vibe500"
     ;;
 
+   170|hd200)
+    target_id=69
+    modelname="mpiohd200"
+    target="-DMPIO_HD200"
+    memory=16 # always
+    coldfirecc
+    tool="$rootdir/tools/scramble -add=hd20"
+    bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
+    bmp2rb_native="$rootdir/tools/bmp2rb -f 7"
+    output="rockbox.mpio"
+    bootoutput="bootloader.mpio"
+    appextra="recorder:gui"
+    plugins="yes"
+    swcodec="yes"
+    # toolset is the tools within the tools directory that we build for
+    # this particular target.
+    toolset="$genericbitmaptools"
+    # architecture, manufacturer and model for the target-tree build
+    t_cpu="coldfire"
+    t_manufacturer="mpio"
+    t_model="hd200"
+    ;;
+
    *)
     echo "Please select a supported target platform!"
     exit 7
diff --git a/tools/scramble.c b/tools/scramble.c
index ed972f7..7d33e4b 100644
--- a/tools/scramble.c
+++ b/tools/scramble.c
@@ -125,7 +125,7 @@
            "\t                   tpj2, c200, e200, giga, gigs, m100, m500, d2,\n");
     printf("\t                   9200, 1630, 6330, ldax, m200, c100, clip, e2v2,\n"
            "\t                   m2v4, fuze, c2v2, clv2, y820, y920, y925, x747,\n"
-           "\t                   747p, x777, nn2g, m244, cli+, fuz2)\n");
+           "\t                   747p, x777, nn2g, m244, cli+, fuz2, hd20)\n");
     printf("\nNo option results in Archos standard player/recorder format.\n");
 
     exit(1);
@@ -328,6 +328,8 @@
             modelnum = 68;
         else if (!strcmp(&argv[1][5], "m244"))
             modelnum = 131;
+        else if (!strcmp(&argv[1][5], "hd20")) /* MPIO HD200 */
+            modelnum = 69;
         else {
             fprintf(stderr, "unsupported model: %s\n", &argv[1][5]);
             return 2;
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c
index 4fd276a..2bb7764 100644
--- a/uisimulator/sdl/button.c
+++ b/uisimulator/sdl/button.c
@@ -1305,6 +1305,30 @@
     case SDLK_KP_MULTIPLY:
         new_btn = BUTTON_REC;
         break;
+
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+    case SDLK_UP:
+        new_btn = BUTTON_PREV;
+        break;
+    case SDLK_DOWN:
+        new_btn = BUTTON_NEXT;
+        break;
+    case SDLK_SPACE:
+        new_btn = BUTTON_SELECT;
+        break;
+    case SDLK_RETURN:
+        new_btn = BUTTON_PLAY;
+        break;
+    case SDLK_LEFT:
+        new_btn = BUTTON_VOL_DOWN;
+        break;
+    case SDLK_RIGHT:
+        new_btn = BUTTON_VOL_UP;
+        break;
+    case SDLK_ESCAPE:
+        new_btn = BUTTON_REC;
+        break;
+    
 #else
 #error No keymap defined!
 #endif /* CONFIG_KEYPAD */
@@ -1850,6 +1874,18 @@
     { SDLK_KP3,     311, 569, 47, "Menu" },
     { 0, 0, 0, 0, "None" }
 };
+#elif defined (MPIO_HD200)
+struct button_map bm[] = {
+    { SDLK_ESCAPE,  369, 257, 20, "Rec" },
+    { SDLK_RETURN,  369, 305, 20, "Play/Stop" },
+    { SDLK_UP,      353, 168,  10, "Rew" },
+    { SDLK_DOWN,    353, 198,  10, "FF" },
+    { SDLK_SPACE,   353, 186,  10, "Select" },
+    { SDLK_LEFT,     123, 67, 20, "Vol Down" },
+    { SDLK_RIGHT,     206, 67, 20, "Vol Up" },
+    { SDLK_h,     369, 402, 30, "Hold" },
+    { 0, 0, 0, 0, "None" }
+};
 #else
 struct button_map bm[] = {
     { 0, 0, 0, 0, ""}
diff --git a/uisimulator/sdl/uisdl.h b/uisimulator/sdl/uisdl.h
index ca422c6..dac84ff 100644
--- a/uisimulator/sdl/uisdl.h
+++ b/uisimulator/sdl/uisdl.h
@@ -389,6 +389,14 @@
 #define UI_HEIGHT                   488 /* height of GUI window */
 #define UI_LCD_POSX                 64 /* x position of lcd */
 #define UI_LCD_POSY                 61 /* y position of lcd */
+
+#elif defined(MPIO_HD200)
+#define UI_TITLE                    "MPIO HD200"
+#define UI_WIDTH                    430 /* width of GUI window */
+#define UI_HEIGHT                   479 /* height of GUI window */
+#define UI_LCD_POSX                 101
+#define UI_LCD_POSY                 195
+
 #else
 #error no UI defines
 #endif