summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--apps/SOURCES2
-rw-r--r--apps/bitmaps/native/SOURCES2
-rw-r--r--apps/keymaps/keymap-av300.c261
-rw-r--r--apps/plugins/SUBDIRS3
-rw-r--r--apps/plugins/bitmaps/native/SOURCES5
-rw-r--r--apps/plugins/bounce.c6
-rw-r--r--apps/plugins/brickmania.c13
-rw-r--r--apps/plugins/calculator.c9
-rw-r--r--apps/plugins/chessbox/chessbox.c11
-rw-r--r--apps/plugins/chessclock.c11
-rw-r--r--apps/plugins/chip8.c12
-rw-r--r--apps/plugins/clock.c19
-rw-r--r--apps/plugins/cube.c12
-rw-r--r--apps/plugins/dice.c9
-rw-r--r--apps/plugins/disktidy.c9
-rw-r--r--apps/plugins/fire.c7
-rw-r--r--apps/plugins/fireworks.c3
-rw-r--r--apps/plugins/flipit.c9
-rw-r--r--apps/plugins/jewels.c8
-rw-r--r--apps/plugins/jpeg.c10
-rw-r--r--apps/plugins/lib/pluginlib_actions.h14
-rw-r--r--apps/plugins/mandelbrot.c12
-rw-r--r--apps/plugins/mazezam.c12
-rw-r--r--apps/plugins/minesweeper.c15
-rw-r--r--apps/plugins/mosaique.c5
-rw-r--r--apps/plugins/oscilloscope.c11
-rw-r--r--apps/plugins/pong.c8
-rw-r--r--apps/plugins/rockblox.c11
-rw-r--r--apps/plugins/sliding_puzzle.c7
-rw-r--r--apps/plugins/snake.c6
-rw-r--r--apps/plugins/snake2.c12
-rw-r--r--apps/plugins/sokoban.c9
-rw-r--r--apps/plugins/solitaire.c17
-rw-r--r--apps/plugins/spacerocks.c14
-rw-r--r--apps/plugins/star.c13
-rw-r--r--apps/plugins/stats.c3
-rw-r--r--apps/plugins/stopwatch.c7
-rw-r--r--apps/plugins/sudoku/sudoku.h10
-rw-r--r--apps/plugins/viewer.c13
-rw-r--r--apps/plugins/vu_meter.c11
-rw-r--r--apps/plugins/wormlet.c16
-rw-r--r--apps/plugins/xobox.c10
-rw-r--r--apps/plugins/zxbox/keymaps.h8
-rw-r--r--apps/plugins/zxbox/zxbox_keyb.c8
-rw-r--r--apps/plugins/zxbox/zxvid_com.h4
-rw-r--r--apps/screens.h2
-rw-r--r--firmware/export/config.h24
-rw-r--r--firmware/target/arm/archos/av300/ata-av300.c56
-rw-r--r--firmware/target/arm/archos/av300/ata-target.h62
-rw-r--r--firmware/target/arm/archos/av300/button-target.h49
-rw-r--r--firmware/target/arm/archos/av300/power-av300.c97
-rwxr-xr-xtools/configure26
-rw-r--r--uisimulator/sdl/UI-av300.bmpbin0 -> 428454 bytes
-rw-r--r--uisimulator/sdl/button.c43
-rw-r--r--uisimulator/sdl/uisdl.h13
55 files changed, 1036 insertions, 13 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index c9587cf5bb..20707323f2 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -113,4 +113,6 @@ keymaps/keymap-h10.c
keymaps/keymap-ifp7xx.c
#elif CONFIG_KEYPAD == SANSA_E200_PAD
keymaps/keymap-e200.c
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+keymaps/keymap-av300.c
#endif
diff --git a/apps/bitmaps/native/SOURCES b/apps/bitmaps/native/SOURCES
index 027f33e238..ba642ab7aa 100644
--- a/apps/bitmaps/native/SOURCES
+++ b/apps/bitmaps/native/SOURCES
@@ -9,6 +9,8 @@ rockboxlogo.128x40x16.bmp
rockboxlogo.138x46x2.bmp
#elif (LCD_WIDTH == 160) && (LCD_DEPTH == 2)
rockboxlogo.160x53x2.bmp
+#elif (LCD_WIDTH == 320) && (LCD_DEPTH == 2)
+rockboxlogo.160x53x2.bmp
#elif (LCD_WIDTH == 160) && (LCD_DEPTH == 16)
rockboxlogo.160x50x16.bmp
#elif (LCD_WIDTH == 176) && (LCD_DEPTH == 16)
diff --git a/apps/keymaps/keymap-av300.c b/apps/keymaps/keymap-av300.c
new file mode 100644
index 0000000000..22e1fcc9a1
--- /dev/null
+++ b/apps/keymaps/keymap-av300.c
@@ -0,0 +1,261 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ *
+ * Copyright (C) 2006 Antoine Cellerier <dionoea @t videolan d.t org>
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+/* *
+ * Button Code Definitions for archos AV300 target
+ *
+ * \TODO handle F3
+ */
+
+#include "config.h"
+#include "action.h"
+#include "button.h"
+#include "settings.h"
+
+/* CONTEXT_CUSTOM's used in this file...
+
+CONTEXT_CUSTOM|1 = the standard list/tree defines (without directions)
+
+
+*/
+
+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_ON, BUTTON_NONE },
+ { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT },
+
+ { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+ { ACTION_STD_MENU, BUTTON_F1, BUTTON_NONE },
+ { ACTION_STD_QUICKSCREEN, BUTTON_F2, BUTTON_NONE },
+ { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT },
+ { ACTION_STD_CANCEL, BUTTON_OFF, BUTTON_NONE },
+ { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
+ { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_F3, BUTTON_F3, BUTTON_NONE },
+
+ LAST_ITEM_IN_LIST
+};
+
+static const struct button_mapping button_context_wps[] = {
+ { ACTION_WPS_PLAY, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+ { 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_STOP, BUTTON_OFF|BUTTON_REL, BUTTON_OFF },
+ { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
+ { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_WPS_MENU, BUTTON_F1|BUTTON_REL, BUTTON_F1 },
+ { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT },
+ { ACTION_WPS_QUICKSCREEN, BUTTON_F2, BUTTON_NONE },
+ { ACTION_WPS_BROWSE, BUTTON_ON|BUTTON_REL, BUTTON_ON },
+ { ACTION_WPS_ID3SCREEN, BUTTON_F1|BUTTON_ON, BUTTON_NONE },
+ { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_UP, BUTTON_ON },
+ { ACTION_WPS_PITCHSCREEN, BUTTON_ON|BUTTON_DOWN, BUTTON_ON },
+ { ACTION_STD_KEYLOCK, BUTTON_F1|BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_F3, BUTTON_F3, BUTTON_NONE },
+ { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_WPS_ABSETA_PREVDIR, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE },
+ { ACTION_WPSAB_RESET, BUTTON_ON|BUTTON_OFF, BUTTON_ON },
+
+
+ LAST_ITEM_IN_LIST
+};
+
+static const struct button_mapping button_context_settings[] = {
+ { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
+ { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, 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_STD)
+};
+
+static const struct button_mapping button_context_tree[] = {
+ { ACTION_TREE_WPS, BUTTON_ON|BUTTON_REL, BUTTON_ON },
+ { ACTION_TREE_STOP, BUTTON_OFF, BUTTON_NONE },
+ { ACTION_NONE, BUTTON_ON, BUTTON_NONE },
+ { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP, BUTTON_ON },
+ { ACTION_LISTTREE_PGUP, BUTTON_UP|BUTTON_REL, BUTTON_ON|BUTTON_UP },
+ { ACTION_LISTTREE_PGUP, BUTTON_ON|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN, BUTTON_ON },
+ { ACTION_LISTTREE_PGDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_ON|BUTTON_DOWN },
+ { ACTION_LISTTREE_PGDOWN, BUTTON_ON|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_listtree */
+
+static const struct button_mapping button_context_tree_scroll_lr[] = {
+ { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
+ { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
+ { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
+ { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
+ { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
+ { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|1),
+};
+
+static const struct button_mapping button_context_yesno[] = {
+ { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE },
+
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+};
+static const struct button_mapping button_context_quickscreen[] = {
+ { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE },
+ { ACTION_QS_DOWNINV, 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_SELECT, 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_UP, BUTTON_NONE },
+ { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE },
+ { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
+ { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
+ { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
+ { ACTION_PS_TOGGLE_MODE, BUTTON_F1, BUTTON_NONE },
+ { ACTION_PS_RESET, BUTTON_ON, BUTTON_NONE },
+ { ACTION_PS_EXIT, BUTTON_OFF, BUTTON_NONE },
+
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_pitchcreen */
+
+static const struct button_mapping button_context_recscreen[] = {
+ { ACTION_REC_PAUSE, BUTTON_SELECT, BUTTON_NONE },
+ { ACTION_REC_F2, BUTTON_F2, BUTTON_NONE },
+ { ACTION_REC_F3, BUTTON_F3, BUTTON_NONE },
+ { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_SETTINGS_INC, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
+ { ACTION_SETTINGS_DEC, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
+
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
+}; /* button_context_recscreen */
+
+static const struct button_mapping button_context_keyboard[] = {
+ { 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_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT, BUTTON_NONE },
+ { ACTION_KBD_CURSOR_LEFT, BUTTON_ON|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT, BUTTON_NONE },
+ { ACTION_KBD_CURSOR_RIGHT, BUTTON_ON|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
+ { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE },
+ { ACTION_KBD_PAGE_FLIP, BUTTON_F1, BUTTON_NONE },
+ { ACTION_KBD_DONE, BUTTON_F2, BUTTON_NONE },
+ { ACTION_KBD_ABORT, BUTTON_OFF, BUTTON_NONE },
+ { ACTION_KBD_BACKSPACE, BUTTON_F3, BUTTON_NONE },
+ { ACTION_KBD_BACKSPACE, BUTTON_F3|BUTTON_REPEAT, 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 },
+
+ LAST_ITEM_IN_LIST
+}; /* button_context_keyboard */
+
+static const struct button_mapping button_context_bmark[] = {
+ { ACTION_BMS_DELETE, BUTTON_SELECT|BUTTON_ON, BUTTON_SELECT },
+ { ACTION_BMS_DELETE, BUTTON_SELECT|BUTTON_ON, BUTTON_ON },
+ { ACTION_BMS_EXIT, BUTTON_OFF, BUTTON_NONE },
+ { ACTION_BMS_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
+
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
+
+}; /* button_context_settings_bmark */
+
+static const struct button_mapping button_context_radio[] = {
+ { ACTION_FM_MENU, BUTTON_F1, BUTTON_NONE },
+ { ACTION_FM_PRESET, BUTTON_F2, BUTTON_NONE },
+ { ACTION_FM_RECORD, BUTTON_F3, BUTTON_NONE },
+ { ACTION_FM_FREEZE, BUTTON_SELECT, BUTTON_NONE },
+ { ACTION_FM_STOP, BUTTON_OFF, BUTTON_NONE },
+ { ACTION_FM_MODE, BUTTON_ON | BUTTON_REPEAT, BUTTON_ON },
+ { ACTION_FM_EXIT, BUTTON_ON | BUTTON_REL, BUTTON_ON },
+
+ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
+
+};
+
+const struct button_mapping* get_context_mapping( int context )
+{
+ switch( context )
+ {
+ case CONTEXT_WPS:
+ return button_context_wps;
+ case CONTEXT_SETTINGS_TIME:
+ case CONTEXT_SETTINGS:
+ return button_context_settings;
+
+ case CONTEXT_YESNOSCREEN:
+ return button_context_yesno;
+
+ case CONTEXT_PITCHSCREEN:
+ return button_context_pitchscreen;
+ case CONTEXT_BOOKMARKSCREEN:
+ return button_context_bmark;
+ case CONTEXT_TREE:
+ if (global_settings.hold_lr_for_scroll_in_list)
+ return button_context_tree_scroll_lr;
+ /* else fall through to CUSTOM|1 */
+ case CONTEXT_CUSTOM|1:
+ return button_context_tree;
+
+ case CONTEXT_QUICKSCREEN:
+ return button_context_quickscreen;
+
+ case CONTEXT_RECSCREEN:
+ return button_context_recscreen;
+ case CONTEXT_KEYBOARD:
+ return button_context_keyboard;
+ case CONTEXT_FM:
+ return button_context_radio;
+
+ case CONTEXT_STD:
+ case CONTEXT_LIST:
+ case CONTEXT_MAINMENU:
+ default:
+ return button_context_standard;
+ }
+}
diff --git a/apps/plugins/SUBDIRS b/apps/plugins/SUBDIRS
index c285a9e2d6..686c4674f3 100644
--- a/apps/plugins/SUBDIRS
+++ b/apps/plugins/SUBDIRS
@@ -29,7 +29,8 @@ pacbox
#endif
/* For all the color targets apart from the Gigabeat */
-#if (defined(HAVE_LCD_COLOR) && !defined(TOSHIBA_GIGABEAT_F)) || (LCD_DEPTH == 2)
+#if (defined(HAVE_LCD_COLOR) && !defined(TOSHIBA_GIGABEAT_F)) || \
+ (LCD_DEPTH == 2) && !defined(ARCHOS_AV300)
doom
#endif
diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES
index 53a8b22b21..568597c95a 100644
--- a/apps/plugins/bitmaps/native/SOURCES
+++ b/apps/plugins/bitmaps/native/SOURCES
@@ -243,6 +243,11 @@ sudoku_inverse.160x128x2.bmp
sudoku_start.220x176x16.bmp
sudoku_normal.220x176x16.bmp
sudoku_inverse.220x176x16.bmp
+#elif (LCD_WIDTH >= 320) && (LCD_HEIGHT >= 240) && (LCD_DEPTH == 2)
+/* Temporary bitmaps for Archos AV300 */
+sudoku_start.320x240x16.bmp
+sudoku_normal.320x240x16.bmp
+sudoku_inverse.320x240x16.bmp
#elif (LCD_WIDTH >= 320) && (LCD_HEIGHT >= 240) && (LCD_DEPTH == 16)
sudoku_start.320x240x16.bmp
sudoku_normal.320x240x16.bmp
diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c
index 2fd2c28ad2..40794241e6 100644
--- a/apps/plugins/bounce.c
+++ b/apps/plugins/bounce.c
@@ -35,6 +35,12 @@ PLUGIN_HEADER
#define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL)
#define BOUNCE_MODE (BUTTON_ON | BUTTON_REL)
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define BOUNCE_UP BUTTON_UP
+#define BOUNCE_DOWN BUTTON_DOWN
+#define BOUNCE_QUIT (BUTTON_OFF | BUTTON_REL)
+#define BOUNCE_MODE (BUTTON_ON | BUTTON_REL)
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define BOUNCE_UP BUTTON_UP
#define BOUNCE_DOWN BUTTON_DOWN
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 5bcecce33b..12ad2c0030 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -64,6 +64,19 @@ PLUGIN_HEADER
#define SCROLL_FWD(x) (0)
#define SCROLL_BACK(x) (0)
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+
+#define QUIT BUTTON_OFF
+#define LEFT BUTTON_LEFT
+#define RIGHT BUTTON_RIGHT
+#define SELECT BUTTON_SELECT
+#define UP BUTTON_UP
+#define DOWN BUTTON_DOWN
+
+/* Only iPod have scroll events */
+#define SCROLL_FWD(x) (0)
+#define SCROLL_BACK(x) (0)
+
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || \
(CONFIG_KEYPAD == IPOD_4G_PAD)
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index 608af85938..eb1e613ff1 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -116,6 +116,15 @@ PLUGIN_HEADER
#define CALCULATOR_OPERATORS BUTTON_F2
#define CALCULATOR_CLEAR BUTTON_F1
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define CALCULATOR_UP BUTTON_UP
+#define CALCULATOR_DOWN BUTTON_DOWN
+#define CALCULATOR_QUIT BUTTON_OFF
+#define CALCULATOR_INPUT BUTTON_SELECT
+#define CALCULATOR_CALC BUTTON_F3
+#define CALCULATOR_OPERATORS BUTTON_F2
+#define CALCULATOR_CLEAR BUTTON_F1
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define CALCULATOR_UP BUTTON_UP
#define CALCULATOR_DOWN BUTTON_DOWN
diff --git a/apps/plugins/chessbox/chessbox.c b/apps/plugins/chessbox/chessbox.c
index 3a69fc999a..c6a79e4ec7 100644
--- a/apps/plugins/chessbox/chessbox.c
+++ b/apps/plugins/chessbox/chessbox.c
@@ -96,6 +96,17 @@ PLUGIN_HEADER
#define CB_RESTART BUTTON_F3
#define CB_QUIT BUTTON_OFF
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define CB_SELECT BUTTON_SELECT
+#define CB_UP BUTTON_UP
+#define CB_DOWN BUTTON_DOWN
+#define CB_LEFT BUTTON_LEFT
+#define CB_RIGHT BUTTON_RIGHT
+#define CB_PLAY BUTTON_ON
+#define CB_LEVEL BUTTON_F1
+#define CB_RESTART BUTTON_F3
+#define CB_QUIT BUTTON_OFF
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define CB_SELECT_PRE BUTTON_MENU
#define CB_SELECT (BUTTON_MENU|BUTTON_REL)
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index c0da728446..5269e454f1 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -32,6 +32,17 @@ PLUGIN_HEADER
#define CHC_SETTINGS_OK2 BUTTON_LEFT
#define CHC_SETTINGS_CANCEL BUTTON_OFF
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define CHC_QUIT BUTTON_OFF
+#define CHC_STARTSTOP BUTTON_SELECT
+#define CHC_RESET BUTTON_LEFT
+#define CHC_MENU BUTTON_F1
+#define CHC_SETTINGS_INC BUTTON_UP
+#define CHC_SETTINGS_DEC BUTTON_DOWN
+#define CHC_SETTINGS_OK BUTTON_SELECT
+#define CHC_SETTINGS_OK2 BUTTON_LEFT
+#define CHC_SETTINGS_CANCEL BUTTON_OFF
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define CHC_QUIT BUTTON_OFF
#define CHC_STARTSTOP BUTTON_RIGHT
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index 6c6c9f44b6..44cc58c9d5 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -959,6 +959,18 @@ STATIC void chip8 (void)
#define CHIP8_KEY8 BUTTON_DOWN
#define CHIP8_KEY9 BUTTON_ON
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD /* only 9 out of 16 chip8 buttons */
+#define CHIP8_OFF BUTTON_OFF
+#define CHIP8_KEY1 BUTTON_F1
+#define CHIP8_KEY2 BUTTON_UP
+#define CHIP8_KEY3 BUTTON_F3
+#define CHIP8_KEY4 BUTTON_LEFT
+#define CHIP8_KEY5 BUTTON_SELECT
+#define CHIP8_KEY6 BUTTON_RIGHT
+#define CHIP8_KEY7 BUTTON_F2
+#define CHIP8_KEY8 BUTTON_DOWN
+#define CHIP8_KEY9 BUTTON_ON
+
#elif CONFIG_KEYPAD == ONDIO_PAD /* even more limited */
#define CHIP8_OFF BUTTON_OFF
#define CHIP8_KEY2 BUTTON_UP
diff --git a/apps/plugins/clock.c b/apps/plugins/clock.c
index 569b201cab..28cd223795 100644
--- a/apps/plugins/clock.c
+++ b/apps/plugins/clock.c
@@ -134,6 +134,25 @@ PLUGIN_HEADER
#define MENU_BUTTON_TEXT "PLAY"
#define COUNTER_BUTTON_TEXT "ON"
+#elif (CONFIG_KEYPAD == ARCHOS_AV300_PAD)
+
+#define COUNTER_TOGGLE_BUTTON (BUTTON_ON|BUTTON_REL)
+#define COUNTER_RESET_BUTTON (BUTTON_ON|BUTTON_REPEAT)
+#define MENU_BUTTON BUTTON_SELECT
+#define ALT_MENU_BUTTON BUTTON_F1
+#define EXIT_BUTTON BUTTON_OFF
+#define MOVE_UP_BUTTON BUTTON_UP
+#define MOVE_DOWN_BUTTON BUTTON_DOWN
+#define CHANGE_UP_BUTTON BUTTON_RIGHT
+#define CHANGE_DOWN_BUTTON BUTTON_LEFT
+
+#define YESTEXT "Select"
+#define NAVI_BUTTON_TEXT_LEFT "LEFT"
+#define NAVI_BUTTON_TEXT_RIGHT "RIGHT"
+#define EXIT_BUTTON_TEXT "OFF"
+#define MENU_BUTTON_TEXT "SELECT"
+#define COUNTER_BUTTON_TEXT "ON"
+
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
#define COUNTER_TOGGLE_BUTTON (BUTTON_PLAY|BUTTON_REL)
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index 00c9a3b606..57f1015368 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -41,6 +41,18 @@ PLUGIN_HEADER
#define CUBE_PAUSE BUTTON_PLAY
#define CUBE_HIGHSPEED BUTTON_ON
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define CUBE_QUIT BUTTON_OFF
+#define CUBE_X_INC BUTTON_RIGHT
+#define CUBE_X_DEC BUTTON_LEFT
+#define CUBE_Y_INC BUTTON_UP
+#define CUBE_Y_DEC BUTTON_DOWN
+#define CUBE_Z_INC BUTTON_F2
+#define CUBE_Z_DEC BUTTON_F1
+#define CUBE_MODE BUTTON_F3
+#define CUBE_PAUSE BUTTON_SELECT
+#define CUBE_HIGHSPEED BUTTON_ON
+
#elif CONFIG_KEYPAD == PLAYER_PAD
#define CUBE_QUIT BUTTON_STOP
#define CUBE_X_INC BUTTON_RIGHT
diff --git a/apps/plugins/dice.c b/apps/plugins/dice.c
index 99c88f431d..8638cb8cc3 100644
--- a/apps/plugins/dice.c
+++ b/apps/plugins/dice.c
@@ -69,6 +69,15 @@ use stop to exit
#define DICE_BUTTON_ON BUTTON_ON
#define DICE_BUTTON_SELECT BUTTON_PLAY
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define DICE_BUTTON_UP BUTTON_UP
+#define DICE_BUTTON_DOWN BUTTON_DOWN
+#define DICE_BUTTON_LEFT BUTTON_LEFT
+#define DICE_BUTTON_RIGHT BUTTON_RIGHT
+#define DICE_BUTTON_OFF BUTTON_OFF
+#define DICE_BUTTON_ON BUTTON_ON
+#define DICE_BUTTON_SELECT BUTTON_SELECT
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define DICE_BUTTON_UP BUTTON_UP
#define DICE_BUTTON_DOWN BUTTON_DOWN
diff --git a/apps/plugins/disktidy.c b/apps/plugins/disktidy.c
index 7af75f545b..88cc39d6cc 100644
--- a/apps/plugins/disktidy.c
+++ b/apps/plugins/disktidy.c
@@ -45,6 +45,12 @@ enum tidy_system
#define TIDY_LEFT BUTTON_LEFT
#define TIDY_RIGHT BUTTON_RIGHT
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define TIDY_DO BUTTON_ON
+#define TIDY_STOP BUTTON_OFF
+#define TIDY_LEFT BUTTON_LEFT
+#define TIDY_RIGHT BUTTON_RIGHT
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define TIDY_DO BUTTON_MENU
#define TIDY_STOP BUTTON_OFF
@@ -369,6 +375,9 @@ void tidy_lcd_menu(enum tidy_system system)
#if CONFIG_KEYPAD == RECORDER_PAD
rb->lcd_puts(0, 0, "[On] to clean up");
rb->lcd_puts(0, 1, "[Off] to exit/abort");
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+ rb->lcd_puts(0, 0, "[On] to clean up");
+ rb->lcd_puts(0, 1, "[Off] to exit/abort");
#elif CONFIG_KEYPAD == ONDIO_PAD
rb->lcd_puts(0, 0, "[Menu] to clean up");
rb->lcd_puts(0, 1, "[Off] to exit/abort");
diff --git a/apps/plugins/fire.c b/apps/plugins/fire.c
index d03afa2aef..2e762cb9e9 100644
--- a/apps/plugins/fire.c
+++ b/apps/plugins/fire.c
@@ -59,6 +59,13 @@ static unsigned char draw_buffer[8*LCD_WIDTH];
#define FIRE_INCREASE_MULT BUTTON_UP
#define FIRE_DECREASE_MULT BUTTON_DOWN
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define FIRE_QUIT BUTTON_OFF
+#define FIRE_SWITCH_FLAMES_TYPE BUTTON_ON
+#define FIRE_SWITCH_FLAMES_MOVING BUTTON_SELECT
+#define FIRE_INCREASE_MULT BUTTON_UP
+#define FIRE_DECREASE_MULT BUTTON_DOWN
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define FIRE_QUIT BUTTON_OFF
#define FIRE_SWITCH_FLAMES_TYPE BUTTON_MENU
diff --git a/apps/plugins/fireworks.c b/apps/plugins/fireworks.c
index 5a4632749a..8b8ee3398b 100644
--- a/apps/plugins/fireworks.c
+++ b/apps/plugins/fireworks.c
@@ -39,6 +39,9 @@ static struct plugin_api* rb;
#elif (CONFIG_KEYPAD == RECORDER_PAD)
#define BTN_MENU BUTTON_OFF
#define BTN_FIRE BUTTON_PLAY
+#elif (CONFIG_KEYPAD == ARCHOS_AV300_PAD)
+#define BTN_MENU BUTTON_OFF
+#define BTN_FIRE BUTTON_SELECT
#elif (CONFIG_KEYPAD == ONDIO_PAD)
#define BTN_MENU BUTTON_MENU
#define BTN_FIRE BUTTON_UP
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index 0dd2fa5143..bdf15b7bff 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -30,6 +30,15 @@ PLUGIN_HEADER
#define FLIPIT_STEP_BY_STEP BUTTON_F3
#define FLIPIT_TOGGLE BUTTON_PLAY
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define FLIPIT_UP BUTTON_UP
+#define FLIPIT_DOWN BUTTON_DOWN
+#define FLIPIT_QUIT BUTTON_OFF
+#define FLIPIT_SHUFFLE BUTTON_F1
+#define FLIPIT_SOLVE BUTTON_F2
+#define FLIPIT_STEP_BY_STEP BUTTON_F3
+#define FLIPIT_TOGGLE BUTTON_SELECT
+
#elif CONFIG_KEYPAD == PLAYER_PAD
#define FLIPIT_UP_PRE BUTTON_ON
#define FLIPIT_UP (BUTTON_ON | BUTTON_REL)
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index 46a97f8d07..ba74879359 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -35,6 +35,14 @@ PLUGIN_HEADER
#define JEWELS_SELECT BUTTON_PLAY
#define JEWELS_CANCEL BUTTON_OFF
+#elif CONFIG_KEYPAD == ARCHOS_AV300_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_SELECT
+#define JEWELS_CANCEL BUTTON_OFF
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define JEWELS_UP BUTTON_UP
#define JEWELS_DOWN BUTTON_DOWN
diff --git a/apps/plugins/jpeg.c b/apps/plugins/jpeg.c
index f36bdd1bb3..8b90c21d61 100644
--- a/apps/plugins/jpeg.c
+++ b/apps/plugins/jpeg.c
@@ -45,6 +45,16 @@ PLUGIN_HEADER
#define JPEG_PREVIOUS BUTTON_F2
#define JPEG_MENU BUTTON_OFF
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define JPEG_ZOOM_IN BUTTON_SELECT
+#define JPEG_ZOOM_OUT BUTTON_ON
+#define JPEG_UP BUTTON_UP
+#define JPEG_DOWN BUTTON_DOWN
+#define JPEG_LEFT BUTTON_LEFT
+#define JPEG_RIGHT BUTTON_RIGHT
+#define JPEG_NEXT BUTTON_F3
+#define JPEG_PREVIOUS BUTTON_F2
+#define JPEG_MENU BUTTON_OFF
#elif CONFIG_KEYPAD == ONDIO_PAD
#define JPEG_ZOOM_PRE BUTTON_MENU
diff --git a/apps/plugins/lib/pluginlib_actions.h b/apps/plugins/lib/pluginlib_actions.h
index b78163f25e..7ce43ce9e4 100644
--- a/apps/plugins/lib/pluginlib_actions.h
+++ b/apps/plugins/lib/pluginlib_actions.h
@@ -52,6 +52,7 @@ static const struct button_mapping generic_directions[] =
|| (CONFIG_KEYPAD == IAUDIO_X5_PAD) \
|| (CONFIG_KEYPAD == GIGABEAT_PAD) \
|| (CONFIG_KEYPAD == RECORDER_PAD) \
+ || (CONFIG_KEYPAD == ARCHOS_AV300_PAD) \
|| (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD)
{ PLA_UP, BUTTON_UP, BUTTON_NONE},
{ PLA_DOWN, BUTTON_DOWN, BUTTON_NONE},
@@ -145,6 +146,13 @@ static const struct button_mapping generic_left_right_fire[] =
{ PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
{ PLA_FIRE, BUTTON_PLAY, BUTTON_NONE},
{ PLA_FIRE_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+ { PLA_LEFT, BUTTON_LEFT, BUTTON_NONE},
+ { PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE},
+ { PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE},
+ { PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
+ { PLA_FIRE, BUTTON_SELECT, BUTTON_NONE},
+ { PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_NONE},
#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
{ PLA_LEFT, BUTTON_LEFT, BUTTON_NONE},
{ PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE},
@@ -199,6 +207,12 @@ static const struct button_mapping generic_actions[] =
{PLA_MENU, BUTTON_F1, BUTTON_NONE},
{PLA_FIRE, BUTTON_PLAY, BUTTON_NONE},
{PLA_FIRE_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+ {PLA_QUIT, BUTTON_OFF, BUTTON_NONE},
+ {PLA_START, BUTTON_ON, BUTTON_NONE},
+ {PLA_MENU, BUTTON_F1, BUTTON_NONE},
+ {PLA_FIRE, BUTTON_SELECT, BUTTON_NONE},
+ {PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE},
#elif CONFIG_KEYPAD == ONDIO_PAD
{PLA_QUIT, BUTTON_OFF, BUTTON_NONE},
{PLA_START, BUTTON_MENU, BUTTON_NONE},
diff --git a/apps/plugins/mandelbrot.c b/apps/plugins/mandelbrot.c
index 69c0fca98b..113737ba56 100644
--- a/apps/plugins/mandelbrot.c
+++ b/apps/plugins/mandelbrot.c
@@ -39,6 +39,18 @@ PLUGIN_HEADER
#define MANDELBROT_MAXITER_DEC BUTTON_F1
#define MANDELBROT_RESET BUTTON_F3
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define MANDELBROT_QUIT BUTTON_OFF
+#define MANDELBROT_UP BUTTON_UP
+#define MANDELBROT_DOWN BUTTON_DOWN
+#define MANDELBROT_LEFT BUTTON_LEFT
+#define MANDELBROT_RIGHT BUTTON_RIGHT
+#define MANDELBROT_ZOOM_IN BUTTON_SELECT
+#define MANDELBROT_ZOOM_OUT BUTTON_ON
+#define MANDELBROT_MAXITER_INC BUTTON_F2
+#define MANDELBROT_MAXITER_DEC BUTTON_F1
+#define MANDELBROT_RESET BUTTON_F3
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define MANDELBROT_QUIT BUTTON_OFF
#define MANDELBROT_UP BUTTON_UP
diff --git a/apps/plugins/mazezam.c b/apps/plugins/mazezam.c
index 2a8afc37ab..cd7446eee2 100644
--- a/apps/plugins/mazezam.c
+++ b/apps/plugins/mazezam.c
@@ -38,6 +38,18 @@ static struct plugin_api* rb;
#define MAZEZAM_QUIT BUTTON_OFF
#define MAZEZAM_QUIT_KEYNAME "[OFF]"
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define MAZEZAM_UP BUTTON_UP
+#define MAZEZAM_DOWN BUTTON_DOWN
+#define MAZEZAM_LEFT BUTTON_LEFT
+#define MAZEZAM_RIGHT BUTTON_RIGHT
+#define MAZEZAM_SELECT BUTTON_SELECT
+
+#define MAZEZAM_RETRY BUTTON_F1
+#define MAZEZAM_RETRY_KEYNAME "[F1]"
+#define MAZEZAM_QUIT BUTTON_OFF
+#define MAZEZAM_QUIT_KEYNAME "[OFF]"
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define MAZEZAM_UP BUTTON_UP
#define MAZEZAM_DOWN BUTTON_DOWN
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 4859e4772f..2500fed8ce 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -45,6 +45,19 @@ enum minesweeper_status {
# define MINESWP_RIGHT (BUTTON_F1 | BUTTON_RIGHT)
# define MINESWP_LEFT (BUTTON_F1 | BUTTON_LEFT)
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+# define MINESWP_UP BUTTON_UP
+# define MINESWP_DOWN BUTTON_DOWN
+# define MINESWP_QUIT BUTTON_OFF
+# define MINESWP_START BUTTON_ON
+# define MINESWP_TOGGLE BUTTON_SELECT
+# define MINESWP_TOGGLE2 BUTTON_F1
+# define MINESWP_DISCOVER BUTTON_ON
+# define MINESWP_DISCOVER2 BUTTON_F2
+# define MINESWP_INFO BUTTON_F3
+# define MINESWP_RIGHT (BUTTON_F1 | BUTTON_RIGHT)
+# define MINESWP_LEFT (BUTTON_F1 | BUTTON_LEFT)
+
#elif CONFIG_KEYPAD == ONDIO_PAD
# define MINESWP_UP BUTTON_UP
# define MINESWP_DOWN BUTTON_DOWN
@@ -423,6 +436,8 @@ enum minesweeper_status menu( void )
rb->lcd_puts( 0, 6,
#if CONFIG_KEYPAD == RECORDER_PAD
"ON to start"
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+ "ON to start"
#elif CONFIG_KEYPAD == ONDIO_PAD
"MODE to start"
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) \
diff --git a/apps/plugins/mosaique.c b/apps/plugins/mosaique.c
index b5f8594c4f..dca2c304b0 100644
--- a/apps/plugins/mosaique.c
+++ b/apps/plugins/mosaique.c
@@ -46,6 +46,11 @@ PLUGIN_HEADER
#define MOSAIQUE_SPEED BUTTON_F1
#define MOSAIQUE_RESTART BUTTON_PLAY
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define MOSAIQUE_QUIT BUTTON_OFF
+#define MOSAIQUE_SPEED BUTTON_F1
+#define MOSAIQUE_RESTART BUTTON_SELECT
+
#elif CONFIG_KEYPAD == PLAYER_PAD
#define MOSAIQUE_QUIT BUTTON_STOP
#define MOSAIQUE_SPEED BUTTON_MENU
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index f8564b211a..c9120e4fe5 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -39,6 +39,17 @@ PLUGIN_HEADER
#define OSCILLOSCOPE_VOL_UP BUTTON_UP
#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define OSCILLOSCOPE_QUIT BUTTON_OFF
+#define OSCILLOSCOPE_DRAWMODE BUTTON_F1
+#define OSCILLOSCOPE_ADVMODE BUTTON_F2
+#define OSCILLOSCOPE_ORIENTATION BUTTON_F3
+#define OSCILLOSCOPE_PAUSE BUTTON_SELECT
+#define OSCILLOSCOPE_SPEED_UP BUTTON_RIGHT
+#define OSCILLOSCOPE_SPEED_DOWN BUTTON_LEFT
+#define OSCILLOSCOPE_VOL_UP BUTTON_UP
+#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define OSCILLOSCOPE_QUIT BUTTON_OFF
#define OSCILLOSCOPE_DRAWMODE_PRE BUTTON_MENU
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index 5da61f5947..b257a3a539 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -44,6 +44,14 @@ PLUGIN_HEADER
#define PONG_RIGHT_UP BUTTON_F3
#define PONG_RIGHT_DOWN BUTTON_RIGHT
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define PONG_QUIT BUTTON_OFF
+#define PONG_PAUSE BUTTON_ON
+#define PONG_LEFT_UP BUTTON_F1
+#define PONG_LEFT_DOWN BUTTON_LEFT
+#define PONG_RIGHT_UP BUTTON_F3
+#define PONG_RIGHT_DOWN BUTTON_RIGHT
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define PONG_QUIT BUTTON_OFF
#define PONG_PAUSE BUTTON_RIGHT
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index ef6fcafcd8..b77c9b1143 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -63,6 +63,17 @@ PLUGIN_HEADER
#define ROCKBLOX_DROP BUTTON_ON
#define ROCKBLOX_RESTART BUTTON_F1
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+
+#define ROCKBLOX_OFF BUTTON_OFF
+#define ROCKBLOX_ROTATE_RIGHT BUTTON_UP
+#define ROCKBLOX_ROTATE_LEFT BUTTON_SELECT
+#define ROCKBLOX_DOWN BUTTON_DOWN
+#define ROCKBLOX_LEFT BUTTON_LEFT
+#define ROCKBLOX_RIGHT BUTTON_RIGHT
+#define ROCKBLOX_DROP BUTTON_ON
+#define ROCKBLOX_RESTART BUTTON_F1
+
#elif CONFIG_KEYPAD == PLAYER_PAD
#define ROCKBLOX_OFF BUTTON_STOP
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index 2fe226c9db..1fccdade12 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -29,6 +29,13 @@ PLUGIN_HEADER
#define PUZZLE_SHUFFLE BUTTON_F1
#define PUZZLE_PICTURE BUTTON_F2
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define PUZZLE_QUIT BUTTON_OFF
+#define PUZZLE_UP BUTTON_UP
+#define PUZZLE_DOWN BUTTON_DOWN
+#define PUZZLE_SHUFFLE BUTTON_F1
+#define PUZZLE_PICTURE BUTTON_F2
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define PUZZLE_QUIT BUTTON_OFF
#define PUZZLE_UP BUTTON_UP
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index 6b27c04d6e..6cf197b4b0 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -42,6 +42,12 @@ PLUGIN_HEADER
#define SNAKE_DOWN BUTTON_DOWN
#define SNAKE_PLAYPAUSE BUTTON_PLAY
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define SNAKE_QUIT BUTTON_OFF
+#define SNAKE_UP BUTTON_UP
+#define SNAKE_DOWN BUTTON_DOWN
+#define SNAKE_PLAYPAUSE BUTTON_SELECT
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define SNAKE_QUIT BUTTON_OFF
#define SNAKE_UP BUTTON_UP
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index adcf3ea17a..7a017e4742 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -157,6 +157,18 @@ PLUGIN_HEADER
#define SNAKE2_PLAYPAUSE BUTTON_PLAY
#define SNAKE2_PLAYPAUSE_TEXT "Play"
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define SNAKE2_UP BUTTON_UP
+#define SNAKE2_DOWN BUTTON_DOWN
+#define SNAKE2_QUIT BUTTON_OFF
+#define SNAKE2_LEVEL_UP BUTTON_UP
+#define SNAKE2_LEVEL_DOWN BUTTON_DOWN
+#define SNAKE2_MAZE_NEXT BUTTON_RIGHT
+#define SNAKE2_MAZE_LAST BUTTON_LEFT
+#define SNAKE2_SELECT_TYPE BUTTON_F3
+#define SNAKE2_PLAYPAUSE BUTTON_SELECT
+#define SNAKE2_PLAYPAUSE_TEXT "Select"
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define SNAKE2_UP BUTTON_UP
#define SNAKE2_DOWN BUTTON_DOWN
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index fbbbf3ea06..b88df504d3 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -50,6 +50,15 @@ extern const fb_data sokoban_tiles[];
#define SOKOBAN_LEVEL_DOWN BUTTON_F1
#define SOKOBAN_LEVEL_REPEAT BUTTON_F2
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define SOKOBAN_UP BUTTON_UP
+#define SOKOBAN_DOWN BUTTON_DOWN
+#define SOKOBAN_QUIT BUTTON_OFF
+#define SOKOBAN_UNDO BUTTON_ON
+#define SOKOBAN_LEVEL_UP BUTTON_F3
+#define SOKOBAN_LEVEL_DOWN BUTTON_F1
+#define SOKOBAN_LEVEL_REPEAT BUTTON_F2
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define SOKOBAN_UP BUTTON_UP
#define SOKOBAN_DOWN BUTTON_DOWN
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 45e18834f3..835c3ab906 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -64,6 +64,23 @@ static struct plugin_api* rb;
# define HK_CUR2STACK "F2"
# define HK_REM2STACK "F3"
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+# define SOL_QUIT BUTTON_OFF
+# define SOL_UP BUTTON_UP
+# define SOL_DOWN BUTTON_DOWN
+# define SOL_LEFT BUTTON_LEFT
+# define SOL_RIGHT BUTTON_RIGHT
+# define SOL_MOVE BUTTON_ON
+# define SOL_DRAW BUTTON_F1
+# define SOL_REM2CUR BUTTON_SELECT
+# define SOL_CUR2STACK BUTTON_F2
+# define SOL_REM2STACK BUTTON_F3
+# define HK_MOVE "ON"
+# define HK_DRAW "F1"
+# define HK_REM2CUR "SELECT"
+# define HK_CUR2STACK "F2"
+# define HK_REM2STACK "F3"
+
#elif CONFIG_KEYPAD == ONDIO_PAD
# define SOL_QUIT BUTTON_OFF
# define SOL_UP_PRE BUTTON_UP
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index 673c931810..0143af97b7 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -38,6 +38,19 @@ static struct plugin_api* rb; /* global api struct pointer */
#define AST_FIRE BUTTON_PLAY
#define AST_FIRE_REP BUTTON_PLAY | BUTTON_REPEAT
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define AST_PAUSE BUTTON_ON
+#define AST_QUIT BUTTON_OFF
+#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
+#define AST_THRUST BUTTON_UP
+#define AST_HYPERSPACE BUTTON_DOWN
+#define AST_LEFT BUTTON_LEFT
+#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
+#define AST_RIGHT BUTTON_RIGHT
+#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
+#define AST_FIRE BUTTON_SELECT
+#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define AST_PAUSE (BUTTON_MENU | BUTTON_OFF)
#define AST_QUIT BUTTON_OFF
@@ -147,6 +160,7 @@ static struct plugin_api* rb; /* global api struct pointer */
(CONFIG_KEYPAD == IPOD_3G_PAD) || \
(CONFIG_KEYPAD == IPOD_4G_PAD) || \
(CONFIG_KEYPAD == GIGABEAT_PAD)|| \
+ (CONFIG_KEYPAD == ARCHOS_AV300_PAD)|| \
(CONFIG_KEYPAD == IRIVER_H10_PAD)
#define ENEMY_MISSILE_SURVIVAL_LENGTH 140
#define MISSILE_SURVIVAL_LENGTH 40
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index 60debc5000..0287794031 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -71,6 +71,19 @@ PLUGIN_HEADER
#define STAR_MENU_RUN2 BUTTON_RIGHT
#define STAR_MENU_RUN3 BUTTON_ON
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define STAR_QUIT BUTTON_OFF
+#define STAR_UP BUTTON_UP
+#define STAR_DOWN BUTTON_DOWN
+#define STAR_TOGGLE_CONTROL BUTTON_ON
+#define STAR_TOGGLE_CONTROL2 BUTTON_SELECT
+#define STAR_LEVEL_UP BUTTON_F3
+#define STAR_LEVEL_DOWN BUTTON_F1
+#define STAR_LEVEL_REPEAT BUTTON_F2
+#define STAR_MENU_RUN BUTTON_SELECT
+#define STAR_MENU_RUN2 BUTTON_RIGHT
+#define STAR_MENU_RUN3 BUTTON_ON
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define STAR_QUIT BUTTON_OFF
#define STAR_UP BUTTON_UP
diff --git a/apps/plugins/stats.c b/apps/plugins/stats.c
index 8b02152a1b..b6a824e208 100644
--- a/apps/plugins/stats.c
+++ b/apps/plugins/stats.c
@@ -32,7 +32,8 @@ static int fontwidth, fontheight;
#define STATS_STOP BUTTON_STOP
#elif (CONFIG_KEYPAD == RECORDER_PAD) \
- || (CONFIG_KEYPAD == ONDIO_PAD)
+ || (CONFIG_KEYPAD == ONDIO_PAD) \
+ || (CONFIG_KEYPAD == ARCHOS_AV300_PAD)
#define STATS_STOP BUTTON_OFF
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) \
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index f1e7355e65..d113af7f25 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -41,6 +41,13 @@ PLUGIN_HEADER
#define STOPWATCH_LAP_TIMER BUTTON_ON
#define STOPWATCH_SCROLL_UP BUTTON_UP
#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define STOPWATCH_QUIT BUTTON_OFF
+#define STOPWATCH_START_STOP BUTTON_SELECT
+#define STOPWATCH_RESET_TIMER BUTTON_LEFT
+#define STOPWATCH_LAP_TIMER BUTTON_ON
+#define STOPWATCH_SCROLL_UP BUTTON_UP
+#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
#elif CONFIG_KEYPAD == ONDIO_PAD
#define STOPWATCH_QUIT BUTTON_OFF
#define STOPWATCH_START_STOP BUTTON_RIGHT
diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h
index fefaf9f57d..2628e3254f 100644
--- a/apps/plugins/sudoku/sudoku.h
+++ b/apps/plugins/sudoku/sudoku.h
@@ -35,6 +35,16 @@
#define SUDOKU_BUTTON_MENU BUTTON_F1
#define SUDOKU_BUTTON_POSSIBLE BUTTON_F2
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define SUDOKU_BUTTON_QUIT BUTTON_OFF
+#define SUDOKU_BUTTON_UP BUTTON_UP
+#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
+#define SUDOKU_BUTTON_LEFT BUTTON_LEFT
+#define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT
+#define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
+#define SUDOKU_BUTTON_MENU BUTTON_F1
+#define SUDOKU_BUTTON_POSSIBLE BUTTON_F2
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define SUDOKU_BUTTON_QUIT BUTTON_OFF
#define SUDOKU_BUTTON_UP BUTTON_UP
diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c
index af795e736b..a8ef5eb1e8 100644
--- a/apps/plugins/viewer.c
+++ b/apps/plugins/viewer.c
@@ -77,6 +77,19 @@ PLUGIN_HEADER
#define VIEWER_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT)
#define VIEWER_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT)
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define VIEWER_QUIT BUTTON_OFF
+#define VIEWER_PAGE_UP BUTTON_UP
+#define VIEWER_PAGE_DOWN BUTTON_DOWN
+#define VIEWER_SCREEN_LEFT BUTTON_LEFT
+#define VIEWER_SCREEN_RIGHT BUTTON_RIGHT
+#define VIEWER_MENU BUTTON_F1
+#define VIEWER_AUTOSCROLL BUTTON_SELECT
+#define VIEWER_LINE_UP (BUTTON_ON | BUTTON_UP)
+#define VIEWER_LINE_DOWN (BUTTON_ON | BUTTON_DOWN)
+#define VIEWER_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT)
+#define VIEWER_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT)
+
/* Ondio keys */
#elif CONFIG_KEYPAD == ONDIO_PAD
#define VIEWER_QUIT BUTTON_OFF
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index 2ee708efed..cbfc0ee5b8 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -33,6 +33,17 @@ PLUGIN_HEADER
#define VUMETER_UP BUTTON_UP
#define VUMETER_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define VUMETER_QUIT BUTTON_OFF
+#define VUMETER_HELP BUTTON_ON
+#define VUMETER_MENU BUTTON_F1
+#define VUMETER_MENU_EXIT BUTTON_F1
+#define VUMETER_MENU_EXIT2 BUTTON_OFF
+#define VUMETER_LEFT BUTTON_LEFT
+#define VUMETER_RIGHT BUTTON_RIGHT
+#define VUMETER_UP BUTTON_UP
+#define VUMETER_DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define VUMETER_QUIT BUTTON_OFF
#define VUMETER_HELP_PRE BUTTON_MENU
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 6a10fac984..5afefb77a8 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -63,6 +63,22 @@ PLUGIN_HEADER
#define WORMS_TEXT "L/R"
#define KEY_CONTROL_TEXT "F1"
+#elif (CONFIG_KEYPAD == ARCHOS_AV300_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_PLAYER2_DIR1 BUTTON_F2
+#define BTN_PLAYER2_DIR2 BUTTON_F3
+#define BTN_STARTPAUSE BUTTON_SELECT
+#define BTN_QUIT BUTTON_OFF
+#define BTN_STOPRESET BUTTON_ON
+#define BTN_TOGGLE_KEYS BUTTON_F1
+
+#define PLAYERS_TEXT "UP/DN"
+#define WORMS_TEXT "L/R"
+#define KEY_CONTROL_TEXT "F1"
+
#elif (CONFIG_KEYPAD == ONDIO_PAD)
#define BTN_DIR_UP BUTTON_UP
#define BTN_DIR_DOWN BUTTON_DOWN
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index e6b66b3ab5..5669894c5e 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -33,6 +33,16 @@ PLUGIN_HEADER
#define RC_QUIT BUTTON_RC_STOP
+#elif (CONFIG_KEYPAD == ARCHOS_AV300_PAD)
+
+#define QUIT BUTTON_OFF
+#define LEFT BUTTON_LEFT
+#define RIGHT BUTTON_RIGHT
+#define PAUSE BUTTON_ON
+#define UP BUTTON_UP
+#define DOWN BUTTON_DOWN
+#define SELECT BUTTON_SELECT
+
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || \
(CONFIG_KEYPAD == IPOD_4G_PAD)
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h
index b7de0cb6a7..a967b3ab73 100644
--- a/apps/plugins/zxbox/keymaps.h
+++ b/apps/plugins/zxbox/keymaps.h
@@ -45,6 +45,14 @@
#define ZX_UP BUTTON_UP
#define ZX_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define ZX_SELECT BUTTON_SELECT
+#define ZX_MENU BUTTON_OFF
+#define ZX_LEFT BUTTON_LEFT
+#define ZX_RIGHT BUTTON_RIGHT
+#define ZX_UP BUTTON_UP
+#define ZX_DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == ONDIO_PAD
#define ZX_SELECT BUTTON_MENU
#define ZX_MENU BUTTON_OFF
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c
index 4dcdc80110..693e48ba73 100644
--- a/apps/plugins/zxbox/zxbox_keyb.c
+++ b/apps/plugins/zxbox/zxbox_keyb.c
@@ -32,6 +32,14 @@
#define KBD_UP BUTTON_UP
#define KBD_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+#define KBD_SELECT BUTTON_SELECT
+#define KBD_ABORT BUTTON_OFF
+#define KBD_LEFT BUTTON_LEFT
+#define KBD_RIGHT BUTTON_RIGHT
+#define KBD_UP BUTTON_UP
+#define KBD_DOWN BUTTON_DOWN
+
#elif CONFIG_KEYPAD == ONDIO_PAD /* restricted Ondio keypad */
#define KBD_SELECT BUTTON_MENU
#define KBD_ABORT BUTTON_OFF
diff --git a/apps/plugins/zxbox/zxvid_com.h b/apps/plugins/zxbox/zxvid_com.h
index 0483251b96..730971d6a5 100644
--- a/apps/plugins/zxbox/zxvid_com.h
+++ b/apps/plugins/zxbox/zxvid_com.h
@@ -13,6 +13,10 @@
#if LCD_HEIGHT >= ZX_HEIGHT && LCD_WIDTH >= ZX_WIDTH
#define WIDTH LCD_WIDTH
#define HEIGHT LCD_HEIGHT
+#define X_OFF 0
+#define Y_OFF 0
+#define X_STEP 1
+#define Y_STEP 1
#else
#define WIDTH 320 /* 256 */
#define HEIGHT 200 /* 192 */
diff --git a/apps/screens.h b/apps/screens.h
index 2bf2b32819..0a13a9ac8b 100644
--- a/apps/screens.h
+++ b/apps/screens.h
@@ -37,7 +37,7 @@ int mmc_remove_request(void);
bool pitch_screen(void);
#endif
-#if CONFIG_KEYPAD == RECORDER_PAD
+#ifdef BUTTON_F3
extern bool quick_screen_f3(int button_enter);
#endif
extern bool quick_screen_quick(int button_enter);
diff --git a/firmware/export/config.h b/firmware/export/config.h
index e37cc3f782..20fdc1d770 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -37,14 +37,15 @@
#define SWCODEC 1 /* if codec is done by SW */
/* CONFIG_CPU */
-#define SH7034 7034
-#define MCF5249 5249
-#define MCF5250 5250
-#define PP5002 5002
-#define PP5020 5020
-#define PNX0101 101
-#define S3C2440 2440
-#define PP5024 5024
+#define SH7034 7034
+#define MCF5249 5249
+#define MCF5250 5250
+#define PP5002 5002
+#define PP5020 5020
+#define PNX0101 101
+#define S3C2440 2440
+#define PP5024 5024
+#define TMS320DSC25 25
/* CONFIG_KEYPAD */
#define PLAYER_PAD 1
@@ -60,6 +61,7 @@
#define IRIVER_H10_PAD 11
#define SANSA_E200_PAD 12
#define ELIO_TPJ1022_PAD 13
+#define ARCHOS_AV300_PAD 14
/* CONFIG_REMOTE_KEYPAD */
#define H100_REMOTE 1
@@ -99,6 +101,7 @@
#define LCD_H10 13 /* as used by iriver H10 20Gb */
#define LCD_H10_5GB 14 /* as used by iriver H10 5Gb */
#define LCD_TPJ1022 15 /* as used by Tatung Elio TPJ-1022 */
+#define LCD_DSC25 16 /* as used by Archos AV300 */
/* LCD_PIXELFORMAT */
#define HORIZONTAL_PACKING 1
@@ -170,6 +173,8 @@
#include "config-ondiosp.h"
#elif defined(ARCHOS_ONDIOFM)
#include "config-ondiofm.h"
+#elif defined(ARCHOS_AV300)
+#include "config-av300.h"
#elif defined(IRIVER_H100)
#include "config-h100.h"
#elif defined(IRIVER_H120)
@@ -255,7 +260,8 @@
#endif
/* define for all cpus from ARM family */
-#if defined(CPU_PP) || (CONFIG_CPU == PNX0101) || (CONFIG_CPU == S3C2440)
+#if defined(CPU_PP) || (CONFIG_CPU == PNX0101) || (CONFIG_CPU == S3C2440) \
+ || (CONFIG_CPU == TMS320DSC25)
#define CPU_ARM
#endif
diff --git a/firmware/target/arm/archos/av300/ata-av300.c b/firmware/target/arm/archos/av300/ata-av300.c
new file mode 100644
index 0000000000..ae7b955632
--- /dev/null
+++ b/firmware/target/arm/archos/av300/ata-av300.c
@@ -0,0 +1,56 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id: ata-pp5020.c 10521 2006-08-11 08:35:27Z bger $
+ *
+ * Target-specific ATA functions for AV3xx (TMS320DSC25)
+ *
+ * Based on code from the ArchOpen project - http://www.archopen.org
+ * Adapted for Rockbox in January 2007
+ *
+ * Original file:
+ * lib/target/arch_AV3XX/ata.c
+ *
+ * AvLo - linav project
+ * Copyright (c) 2005 by Christophe THOMAS (oxygen77 at free.fr)
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#include <stdbool.h>
+#include "system.h"
+#include "ata-target.h"
+
+void ata_reset()
+{
+ /* arch_ata_reset_HD(void) */
+ cpld_set_port_2(CPLD_HD_RESET);
+ cpld_clear_port_2(CPLD_HD_RESET);
+}
+
+void ata_enable(bool on)
+{
+ /* TODO: Implement ata_enable() */
+ (void)on;
+}
+
+bool ata_is_coldstart()
+{
+ /* TODO: Implement coldstart variable */
+ return true;
+}
+
+void ata_device_init()
+{
+ /* Set CF/HD selection to HD */
+ cpld_select(CPLD_HD_CF,CPLD_SEL_HD);
+}
diff --git a/firmware/target/arm/archos/av300/ata-target.h b/firmware/target/arm/archos/av300/ata-target.h
new file mode 100644
index 0000000000..f570ddd4b3
--- /dev/null
+++ b/firmware/target/arm/archos/av300/ata-target.h
@@ -0,0 +1,62 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id: ata-target.h 11655 2006-12-03 22:13:44Z amiconn $
+ *
+ * Copyright (C) 2007 by Dave Chapman
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+/* Plain C read & write loops */
+
+#define ATA_IOBASE 0x02400000
+
+#define ATA_DATA (*((volatile unsigned short*)(ATA_IOBASE)))
+#define ATA_ERROR (*((volatile unsigned char*)(ATA_IOBASE + 0x080)))
+#define ATA_NSECTOR (*((volatile unsigned char*)(ATA_IOBASE + 0x100)))
+#define ATA_SECTOR (*((volatile unsigned char*)(ATA_IOBASE + 0x180)))
+#define ATA_LCYL (*((volatile unsigned char*)(ATA_IOBASE + 0x200)))
+#define ATA_HCYL (*((volatile unsigned char*)(ATA_IOBASE + 0x280)))
+#define ATA_SELECT (*((volatile unsigned char*)(ATA_IOBASE + 0x300)))
+#define ATA_CONTROL (*((volatile unsigned char*)(ATA_IOBASE + 0x340)))
+#define ATA_COMMAND (*((volatile unsigned char*)(ATA_IOBASE + 0x380)))
+
+#define STATUS_BSY 0x80
+#define STATUS_RDY 0x40
+#define STATUS_DF 0x20
+#define STATUS_DRQ 0x08
+#define STATUS_ERR 0x01
+#define ERROR_ABRT 0x04
+
+#define WRITE_PATTERN1 0xa5
+#define WRITE_PATTERN2 0x5a
+#define WRITE_PATTERN3 0xaa
+#define WRITE_PATTERN4 0x55
+
+#define READ_PATTERN1 0xa5
+#define READ_PATTERN2 0x5a
+#define READ_PATTERN3 0xaa
+#define READ_PATTERN4 0x55
+
+#define READ_PATTERN1_MASK 0xff
+#define READ_PATTERN2_MASK 0xff
+#define READ_PATTERN3_MASK 0xff
+#define READ_PATTERN4_MASK 0xff
+
+#define SET_REG(reg,val) reg = (val)
+#define SET_16BITREG(reg,val) reg = (val)
+
+void ata_reset(void);
+void ata_enable(bool on);
+bool ata_is_coldstart(void);
+void ata_device_init(void);
diff --git a/firmware/target/arm/archos/av300/button-target.h b/firmware/target/arm/archos/av300/button-target.h
new file mode 100644
index 0000000000..b08562627b
--- /dev/null
+++ b/firmware/target/arm/archos/av300/button-target.h
@@ -0,0 +1,49 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id: button-target.h 11967 2007-01-09 23:29:07Z linus $
+ *
+ * Copyright (C) 2007 by Dave Chapman
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+
+#ifndef _BUTTON_TARGET_H_
+#define _BUTTON_TARGET_H_
+
+#include <stdbool.h>
+#include "config.h"
+
+void button_init_device(void);
+int button_read_device(void);
+
+/* Main unit's buttons */
+
+#define BUTTON_ON 0x00000001
+#define BUTTON_OFF 0x00000002
+
+#define BUTTON_LEFT 0x00000004
+#define BUTTON_RIGHT 0x00000008
+#define BUTTON_UP 0x00000010
+#define BUTTON_DOWN 0x00000020
+
+#define BUTTON_SELECT 0x00000040
+
+#define BUTTON_F1 0x00000080
+#define BUTTON_F2 0x00000100
+#define BUTTON_F3 0x00000200
+
+#define BUTTON_MAIN (BUTTON_ON|BUTTON_OFF|BUTTON_LEFT|BUTTON_RIGHT\
+ |BUTTON_UP|BUTTON_DOWN|BUTTON_SELECT\
+ |BUTTON_F1|BUTTON_F2|BUTTON_F3)
+
+#endif /* _BUTTON_TARGET_H_ */
diff --git a/firmware/target/arm/archos/av300/power-av300.c b/firmware/target/arm/archos/av300/power-av300.c
new file mode 100644
index 0000000000..cfdce69b13
--- /dev/null
+++ b/firmware/target/arm/archos/av300/power-av300.c
@@ -0,0 +1,97 @@
+/***************************************************************************
+ * __________ __ ___.
+ * Open \______ \ ____ ____ | | _\_ |__ _______ ___
+ * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
+ * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
+ * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
+ * \/ \/ \/ \/ \/
+ * $Id: power-x5.c 10967 2006-09-17 09:19:50Z jethead71 $
+ *
+ * Based on code from the ArchOpen project - http://www.archopen.org
+ * Adapted for Rockbox in January 2007
+ *
+ * Original files:
+ * lib/target/arch_AV3XX/ata.c
+ *
+ * AvLo - linav project
+ * Copyright (c) 2005 by Christophe THOMAS (oxygen77 at free.fr)
+ *
+ * All files in this archive are subject to the GNU General Public License.
+ * See the file COPYING in the source tree root for full license agreement.
+ *
+ * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
+ * KIND, either express or implied.
+ *
+ ****************************************************************************/
+#include "config.h"
+#include "cpu.h"
+#include <stdbool.h>
+#include "kernel.h"
+#include "system.h"
+#include "power.h"
+
+#ifndef SIMULATOR
+
+void power_init(void)
+{
+ /* Charger detect */
+}
+
+bool charger_inserted(void)
+{
+ return false;
+}
+
+void ide_power_enable(bool on)
+{
+ if(on)
+ cpld_set_port_3(CPLD_HD_POWER); /* powering up HD */
+ else
+ cpld_clear_port_3(CPLD_HD_POWER);
+}
+
+bool ide_powered(void)
+{
+ return false;
+}
+
+void power_off(void)
+{
+}
+
+#else
+
+bool charger_inserted(void)
+{
+ return false;
+}
+
+void charger_enable(bool on)
+{
+ (void)on;
+}
+
+void power_off(void)
+{
+}
+
+void ide_power_enable(bool on)
+{
+ (void)on;
+}
+
+#endif /* SIMULATOR */
+
+static bool powered = false;
+
+bool radio_powered()
+{
+ return powered;
+}
+
+bool radio_power(bool status)
+{
+ bool old_status = powered;
+ powered = status;
+ return old_status;
+}
diff --git a/tools/configure b/tools/configure
index e2e0befae5..0d119f6caf 100755
--- a/tools/configure
+++ b/tools/configure
@@ -560,7 +560,7 @@ cat <<EOF
3) Recorder v2 13) iFP-790 23) 3G
4) Ondio SP 14) H10 20Gb 24) 4G Grayscale
5) Ondio FM 15) H10 5/6Gb 25) Mini 1G
- 26) Mini 2G
+ 6) AV300 26) Mini 2G
==iAudio== ==Toshiba== ==SanDisk==
30) X5/X5V/X5L 40) Gigabeat F 50) Sansa e200
@@ -753,6 +753,30 @@ EOF
t_model="ondio"
;;
+ 6|av300)
+ target_id=26
+ archos="av300"
+ target="-DARCHOS_AV300"
+ memory=16 # always
+ arm7tdmicc
+ tool="$rootdir/tools/scramble -mm=C"
+ bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
+ bmp2rb_native="$rootdir/tools/bmp2rb -f 6"
+ output="cjbm.ajz"
+ appextra="recorder:gui"
+ archosrom=""
+ flash=""
+ plugins="yes"
+ codecs=""
+ # toolset is the tools within the tools directory that we build for
+ # this particular target.
+ toolset="$toolset scramble descramble bmp2rb codepages"
+ # architecture, manufacturer and model for the target-tree build
+ t_cpu="arm"
+ t_manufacturer="archos"
+ t_model="av300"
+ ;;
+
10|h120)
target_id=9
archos="h120"
diff --git a/uisimulator/sdl/UI-av300.bmp b/uisimulator/sdl/UI-av300.bmp
new file mode 100644
index 0000000000..e86221ca7e
--- /dev/null
+++ b/uisimulator/sdl/UI-av300.bmp
Binary files differ
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c
index 6931d13fe5..f5da828914 100644
--- a/uisimulator/sdl/button.c
+++ b/uisimulator/sdl/button.c
@@ -421,6 +421,49 @@ void button_event(int key, bool pressed)
new_btn = BUTTON_PLAY;
break;
+#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
+ case SDLK_KP4:
+ case SDLK_LEFT:
+ new_btn = BUTTON_LEFT;
+ break;
+ case SDLK_KP6:
+ case SDLK_RIGHT:
+ new_btn = BUTTON_RIGHT;
+ break;
+ case SDLK_KP8:
+ case SDLK_UP:
+ new_btn = BUTTON_UP;
+ break;
+ case SDLK_KP2:
+ case SDLK_DOWN:
+ new_btn = BUTTON_DOWN;
+ break;
+ case SDLK_KP_PLUS:
+ case SDLK_F8:
+ new_btn = BUTTON_ON;
+ break;
+ case SDLK_KP_ENTER:
+ case SDLK_RETURN:
+ case SDLK_a:
+ new_btn = BUTTON_OFF;
+ break;
+ case SDLK_KP_DIVIDE:
+ case SDLK_F1:
+ new_btn = BUTTON_F1;
+ break;
+ case SDLK_KP_MULTIPLY:
+ case SDLK_F2:
+ new_btn = BUTTON_F2;
+ break;
+ case SDLK_KP_MINUS:
+ case SDLK_F3:
+ new_btn = BUTTON_F3;
+ break;
+ case SDLK_KP5:
+ case SDLK_SPACE:
+ new_btn = BUTTON_SELECT;
+ break;
+
#elif CONFIG_KEYPAD == SANSA_E200_PAD
case SDLK_KP4:
case SDLK_LEFT:
diff --git a/uisimulator/sdl/uisdl.h b/uisimulator/sdl/uisdl.h
index e742155f6a..7f0a567e79 100644
--- a/uisimulator/sdl/uisdl.h
+++ b/uisimulator/sdl/uisdl.h
@@ -241,6 +241,19 @@
#define UI_LCD_WIDTH LCD_WIDTH /* * 1.5 */
#define UI_LCD_HEIGHT LCD_HEIGHT /* * 1.5 */
+#elif defined(ARCHOS_AV300)
+#define UI_TITLE "Archos AV300"
+/* We are temporarily using a 2bpp LCD driver and dummy bitmap */
+#define UI_WIDTH 420 /* width of GUI window */
+#define UI_HEIGHT 340 /* height of GUI window */
+#define UI_LCD_POSX 50 /* x position of lcd */
+#define UI_LCD_POSY 50 /* y position of lcd */
+#define UI_LCD_WIDTH 320
+#define UI_LCD_HEIGHT 240
+#define UI_LCD_BGCOLOR 90, 145, 90 /* bkgnd color of LCD (no backlight) */
+#define UI_LCD_BGCOLORLIGHT 173, 216, 230 /* bkgnd color of LCD (backlight) */
+#define UI_LCD_BLACK 0, 0, 0 /* black */
+
#endif
extern SDL_Surface *gui_surface;
extern bool background; /* True if the background image is enabled */