All pastes #256086 Raw Edit

Untitled

public text v1 · immutable
#256086 ·published 2006-11-23 19:04 UTC
rendered paste body
diff --git a/apps/keymaps/keymap-e200.c b/apps/keymaps/keymap-e200.c
index 1c90e46..8155adf 100644
--- a/apps/keymaps/keymap-e200.c
+++ b/apps/keymaps/keymap-e200.c
@@ -32,10 +32,10 @@ #include "settings.h"
  * Insert LAST_ITEM_IN_LIST at the end of each mapping
  */
 const struct button_mapping button_context_standard[]  = {
-    { ACTION_STD_PREV,        BUTTON_SCROLL_UP,                  BUTTON_NONE },
-    { ACTION_STD_PREVREPEAT,  BUTTON_SCROLL_UP|BUTTON_REPEAT,    BUTTON_NONE },
-    { ACTION_STD_NEXT,        BUTTON_SCROLL_DOWN,                BUTTON_NONE },
-    { ACTION_STD_NEXTREPEAT,  BUTTON_SCROLL_DOWN|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_STD_PREV,        BUTTON_UP,                  BUTTON_NONE },
+    { ACTION_STD_PREVREPEAT,  BUTTON_UP|BUTTON_REPEAT,    BUTTON_NONE },
+    { ACTION_STD_NEXT,        BUTTON_DOWN,                BUTTON_NONE },
+    { ACTION_STD_NEXTREPEAT,  BUTTON_DOWN|BUTTON_REPEAT,  BUTTON_NONE },

     { ACTION_STD_MENU,        BUTTON_POWER|BUTTON_REL,           BUTTON_POWER },
     { ACTION_STD_OK,          BUTTON_RIGHT|BUTTON_REL,           BUTTON_RIGHT },
@@ -55,21 +55,21 @@ const struct button_mapping button_conte
 const struct button_mapping button_context_wps[]  = {
     { ACTION_WPS_PLAY,     BUTTON_SELECT|BUTTON_REL,   BUTTON_SELECT },
     { ACTION_WPS_STOP,     BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT },
-    { ACTION_WPS_SKIPPREV, BUTTON_UP|BUTTON_REL,    BUTTON_UP},
-    { ACTION_WPS_SEEKBACK, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
-    { ACTION_WPS_STOPSEEK, BUTTON_UP|BUTTON_REL,    BUTTON_UP|BUTTON_REPEAT },
-    { ACTION_WPS_SKIPNEXT, BUTTON_DOWN|BUTTON_REL,     BUTTON_DOWN },
-    { ACTION_WPS_SEEKFWD,  BUTTON_DOWN|BUTTON_REPEAT,  BUTTON_NONE },
-    { ACTION_WPS_STOPSEEK, BUTTON_DOWN|BUTTON_REL,     BUTTON_DOWN|BUTTON_REPEAT },
+    { ACTION_WPS_SKIPPREV, BUTTON_SCROLL_UP|BUTTON_REL,    BUTTON_SCROLL_UP},
+    { ACTION_WPS_SEEKBACK, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE },
+    { ACTION_WPS_STOPSEEK, BUTTON_SCROLL_UP|BUTTON_REL,    BUTTON_SCROLL_UP|BUTTON_REPEAT },
+    { ACTION_WPS_SKIPNEXT, BUTTON_SCROLL_DOWN|BUTTON_REL,     BUTTON_SCROLL_DOWN },
+    { ACTION_WPS_SEEKFWD,  BUTTON_SCROLL_DOWN|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_WPS_STOPSEEK, BUTTON_SCROLL_DOWN|BUTTON_REL,     BUTTON_SCROLL_DOWN|BUTTON_REPEAT },

-    { ACTION_WPS_ABSETB_NEXTDIR,    BUTTON_POWER|BUTTON_DOWN,     BUTTON_POWER },
-    { ACTION_WPS_ABSETA_PREVDIR,    BUTTON_POWER|BUTTON_UP,    BUTTON_POWER },
+    { ACTION_WPS_ABSETB_NEXTDIR,    BUTTON_POWER|BUTTON_SCROLL_DOWN,     BUTTON_POWER },
+    { ACTION_WPS_ABSETA_PREVDIR,    BUTTON_POWER|BUTTON_SCROLL_UP,    BUTTON_POWER },
     { ACTION_WPSAB_RESET,           BUTTON_POWER|BUTTON_SELECT,   BUTTON_POWER },

-    { ACTION_WPS_VOLDOWN, BUTTON_SCROLL_DOWN,              BUTTON_NONE },
-    { ACTION_WPS_VOLDOWN, BUTTON_SCROLL_DOWN|BUTTON_REPEAT,BUTTON_NONE },
-    { ACTION_WPS_VOLUP,   BUTTON_SCROLL_UP,                BUTTON_NONE },
-    { ACTION_WPS_VOLUP,   BUTTON_SCROLL_UP|BUTTON_REPEAT,  BUTTON_NONE },
+    { 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_BROWSE,        BUTTON_LEFT|BUTTON_REL,       BUTTON_LEFT },
     { ACTION_WPS_CONTEXT,       BUTTON_RIGHT|BUTTON_REPEAT,   BUTTON_RIGHT },
@@ -82,10 +82,10 @@ const struct button_mapping button_conte
 }; /* button_context_wps */

 const struct button_mapping button_context_settings[] = {
-    { ACTION_SETTINGS_INC,      BUTTON_SCROLL_UP,                 BUTTON_NONE },
-    { ACTION_SETTINGS_INCREPEAT,BUTTON_SCROLL_UP|BUTTON_REPEAT,   BUTTON_NONE },
-    { ACTION_SETTINGS_DEC,      BUTTON_SCROLL_DOWN,               BUTTON_NONE },
-    { ACTION_SETTINGS_DECREPEAT,BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+    { 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 },
@@ -96,8 +96,8 @@ const struct button_mapping button_conte
 }; /* button_context_settings */

 const struct button_mapping button_context_list[]  = {
-    { ACTION_LISTTREE_PGUP,         BUTTON_UP|BUTTON_REL,       BUTTON_UP },
-    { ACTION_LISTTREE_PGDOWN,       BUTTON_DOWN|BUTTON_REL,        BUTTON_DOWN  },
+    { ACTION_LISTTREE_PGUP,         BUTTON_SCROLL_UP|BUTTON_REL,       BUTTON_SCROLL_UP },
+    { ACTION_LISTTREE_PGDOWN,       BUTTON_SCROLL_DOWN|BUTTON_REL,        BUTTON_SCROLL_DOWN  },

     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
 }; /* button_context_list */
@@ -110,24 +110,24 @@ const struct button_mapping button_conte
 }; /* button_context_tree */

 const struct button_mapping button_context_listtree_scroll_without_combo[]  = {
-    { ACTION_TREE_ROOT_INIT,    BUTTON_UP|BUTTON_REPEAT,     BUTTON_UP },
-    { ACTION_TREE_PGLEFT,       BUTTON_UP|BUTTON_REPEAT,     BUTTON_NONE },
-    { ACTION_TREE_PGRIGHT,      BUTTON_DOWN|BUTTON_REPEAT,      BUTTON_NONE },
+    { ACTION_TREE_ROOT_INIT,    BUTTON_SCROLL_UP|BUTTON_REPEAT,     BUTTON_SCROLL_UP },
+    { ACTION_TREE_PGLEFT,       BUTTON_SCROLL_UP|BUTTON_REPEAT,     BUTTON_NONE },
+    { ACTION_TREE_PGRIGHT,      BUTTON_SCROLL_DOWN|BUTTON_REPEAT,      BUTTON_NONE },
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
 }; /* button_context_listtree_scroll_without_combo */

 const struct button_mapping button_context_listtree_scroll_with_combo[]  = {
-    { ACTION_LISTTREE_PGUP,     BUTTON_UP|BUTTON_REPEAT,     BUTTON_UP },
-    { ACTION_LISTTREE_PGDOWN,   BUTTON_DOWN|BUTTON_REPEAT,      BUTTON_DOWN  },
-    { ACTION_TREE_PGLEFT,       BUTTON_UP|BUTTON_SELECT,       BUTTON_SELECT },
-    { ACTION_TREE_PGLEFT,       BUTTON_UP|BUTTON_REL,        BUTTON_UP|BUTTON_SELECT },
-    { ACTION_TREE_PGLEFT,       BUTTON_UP|BUTTON_SELECT,       BUTTON_UP|BUTTON_REL },
-    { ACTION_TREE_ROOT_INIT,    BUTTON_UP|BUTTON_SELECT|BUTTON_REPEAT,  BUTTON_UP|BUTTON_SELECT },
-    { ACTION_TREE_PGLEFT,       BUTTON_UP|BUTTON_SELECT|BUTTON_REPEAT,  BUTTON_NONE },
-    { ACTION_TREE_PGRIGHT,      BUTTON_DOWN|BUTTON_SELECT,        BUTTON_SELECT },
-    { ACTION_TREE_PGRIGHT,      BUTTON_DOWN|BUTTON_REL,         BUTTON_DOWN|BUTTON_SELECT },
-    { ACTION_TREE_PGRIGHT,      BUTTON_DOWN|BUTTON_SELECT,        BUTTON_DOWN|BUTTON_REL },
-    { ACTION_TREE_PGRIGHT,      BUTTON_DOWN|BUTTON_SELECT|BUTTON_REPEAT,   BUTTON_NONE },
+    { ACTION_LISTTREE_PGUP,     BUTTON_SCROLL_UP|BUTTON_REPEAT,     BUTTON_SCROLL_UP },
+    { ACTION_LISTTREE_PGDOWN,   BUTTON_SCROLL_DOWN|BUTTON_REPEAT,      BUTTON_SCROLL_DOWN  },
+    { ACTION_TREE_PGLEFT,       BUTTON_SCROLL_UP|BUTTON_SELECT,       BUTTON_SELECT },
+    { ACTION_TREE_PGLEFT,       BUTTON_SCROLL_UP|BUTTON_REL,        BUTTON_SCROLL_UP|BUTTON_SELECT },
+    { ACTION_TREE_PGLEFT,       BUTTON_SCROLL_UP|BUTTON_SELECT,       BUTTON_SCROLL_UP|BUTTON_REL },
+    { ACTION_TREE_ROOT_INIT,    BUTTON_SCROLL_UP|BUTTON_SELECT|BUTTON_REPEAT,  BUTTON_SCROLL_UP|BUTTON_SELECT },
+    { ACTION_TREE_PGLEFT,       BUTTON_SCROLL_UP|BUTTON_SELECT|BUTTON_REPEAT,  BUTTON_NONE },
+    { ACTION_TREE_PGRIGHT,      BUTTON_SCROLL_DOWN|BUTTON_SELECT,        BUTTON_SELECT },
+    { ACTION_TREE_PGRIGHT,      BUTTON_SCROLL_DOWN|BUTTON_REL,         BUTTON_SCROLL_DOWN|BUTTON_SELECT },
+    { ACTION_TREE_PGRIGHT,      BUTTON_SCROLL_DOWN|BUTTON_SELECT,        BUTTON_SCROLL_DOWN|BUTTON_REL },
+    { ACTION_TREE_PGRIGHT,      BUTTON_SCROLL_DOWN|BUTTON_SELECT|BUTTON_REPEAT,   BUTTON_NONE },
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
 }; /* button_context_listtree_scroll_with_combo */

@@ -137,27 +137,27 @@ const struct button_mapping button_conte
 }; /* button_context_settings_yesno */

 const struct button_mapping button_context_quickscreen[]  = {
-    { ACTION_QS_DOWNINV, BUTTON_SCROLL_UP,                 BUTTON_NONE },
-    { ACTION_QS_DOWNINV, BUTTON_SCROLL_UP|BUTTON_REPEAT,   BUTTON_NONE },
-    { ACTION_QS_DOWN,    BUTTON_SCROLL_DOWN,               BUTTON_NONE },
-    { ACTION_QS_DOWN,    BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
-    { ACTION_QS_LEFT,    BUTTON_UP,                       BUTTON_NONE },
-    { ACTION_QS_LEFT,    BUTTON_UP|BUTTON_REPEAT,         BUTTON_NONE },
-    { ACTION_QS_RIGHT,   BUTTON_DOWN,                        BUTTON_NONE },
-    { ACTION_QS_RIGHT,   BUTTON_DOWN|BUTTON_REPEAT,          BUTTON_NONE },
+    { 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_SCROLL_UP,                       BUTTON_NONE },
+    { ACTION_QS_LEFT,    BUTTON_SCROLL_UP|BUTTON_REPEAT,         BUTTON_NONE },
+    { ACTION_QS_RIGHT,   BUTTON_SCROLL_DOWN,                        BUTTON_NONE },
+    { ACTION_QS_RIGHT,   BUTTON_SCROLL_DOWN|BUTTON_REPEAT,          BUTTON_NONE },

     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
 }; /* button_context_quickscreen */

 const struct button_mapping button_context_settings_right_is_inc[]  = {
-    { ACTION_SETTINGS_INC,       BUTTON_SCROLL_UP,                BUTTON_NONE },
-    { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT,  BUTTON_NONE },
-    { ACTION_SETTINGS_DEC,       BUTTON_SCROLL_DOWN,              BUTTON_NONE },
-    { ACTION_SETTINGS_DECREPEAT, BUTTON_SCROLL_DOWN|BUTTON_REPEAT,BUTTON_NONE },
-    { ACTION_STD_PREV,           BUTTON_UP,                      BUTTON_NONE },
-    { ACTION_STD_PREVREPEAT,     BUTTON_UP|BUTTON_REPEAT,        BUTTON_NONE },
-    { ACTION_STD_NEXT,           BUTTON_DOWN,                       BUTTON_NONE },
-    { ACTION_STD_NEXTREPEAT,     BUTTON_DOWN|BUTTON_REPEAT,         BUTTON_NONE },
+    { 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_SCROLL_UP,                      BUTTON_NONE },
+    { ACTION_STD_PREVREPEAT,     BUTTON_SCROLL_UP|BUTTON_REPEAT,        BUTTON_NONE },
+    { ACTION_STD_NEXT,           BUTTON_SCROLL_DOWN,                       BUTTON_NONE },
+    { ACTION_STD_NEXTREPEAT,     BUTTON_SCROLL_DOWN|BUTTON_REPEAT,         BUTTON_NONE },
     { ACTION_NONE,               BUTTON_RIGHT,                    BUTTON_NONE },
     { ACTION_STD_OK,             BUTTON_RIGHT,                    BUTTON_NONE },
     { ACTION_NONE,               BUTTON_LEFT,                     BUTTON_NONE },
@@ -167,14 +167,14 @@ const struct button_mapping button_conte
 }; /* button_context_settings_right_is_inc */

 const struct button_mapping button_context_pitchscreen[]  = {
-    { ACTION_PS_INC_SMALL,      BUTTON_SCROLL_UP,                 BUTTON_NONE },
-    { ACTION_PS_INC_BIG,        BUTTON_SCROLL_UP|BUTTON_REPEAT,   BUTTON_NONE },
-    { ACTION_PS_DEC_SMALL,      BUTTON_SCROLL_DOWN,               BUTTON_NONE },
-    { ACTION_PS_DEC_BIG,        BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
-    { ACTION_PS_NUDGE_LEFT,     BUTTON_UP,                       BUTTON_NONE },
-    { ACTION_PS_NUDGE_LEFTOFF,  BUTTON_UP|BUTTON_REL,            BUTTON_NONE },
-    { ACTION_PS_NUDGE_RIGHT,    BUTTON_DOWN,                        BUTTON_NONE },
-    { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_DOWN|BUTTON_REL,             BUTTON_NONE },
+    { 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_SCROLL_UP,                       BUTTON_NONE },
+    { ACTION_PS_NUDGE_LEFTOFF,  BUTTON_SCROLL_UP|BUTTON_REL,            BUTTON_NONE },
+    { ACTION_PS_NUDGE_RIGHT,    BUTTON_SCROLL_DOWN,                        BUTTON_NONE },
+    { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_SCROLL_DOWN|BUTTON_REL,             BUTTON_NONE },
     { ACTION_PS_RESET,          BUTTON_SELECT,                      BUTTON_NONE },
     { ACTION_PS_EXIT,           BUTTON_LEFT,                      BUTTON_NONE },

@@ -186,19 +186,19 @@ const struct button_mapping button_conte
     { 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_SELECT,       BUTTON_UP|BUTTON_REL,            BUTTON_UP },
+    { ACTION_KBD_SELECT,       BUTTON_SCROLL_UP|BUTTON_REL,            BUTTON_SCROLL_UP },
     { ACTION_KBD_DONE,         BUTTON_SELECT,                      BUTTON_NONE },
-    { ACTION_KBD_ABORT,        BUTTON_DOWN,                        BUTTON_NONE },
-    { ACTION_KBD_UP,           BUTTON_SCROLL_UP,                 BUTTON_NONE },
-    { ACTION_KBD_UP,           BUTTON_SCROLL_UP|BUTTON_REPEAT,   BUTTON_NONE },
-    { ACTION_KBD_DOWN,         BUTTON_SCROLL_DOWN,               BUTTON_NONE },
-    { ACTION_KBD_DOWN,         BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
+    { ACTION_KBD_ABORT,        BUTTON_SCROLL_DOWN,                        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 */

 const struct button_mapping button_context_bmark[]  = {
-    { ACTION_BMS_DELETE,       BUTTON_UP,       BUTTON_NONE },
+    { ACTION_BMS_DELETE,       BUTTON_SCROLL_UP,       BUTTON_NONE },
     { ACTION_BMS_SELECT,       BUTTON_RIGHT,     BUTTON_NONE },
     { ACTION_BMS_EXIT,         BUTTON_LEFT,      BUTTON_NONE },
     LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES
index be8f2b6..1e71da0 100644
--- a/apps/plugins/bitmaps/native/SOURCES
+++ b/apps/plugins/bitmaps/native/SOURCES
@@ -253,6 +253,10 @@ #if (LCD_WIDTH >= 240) && (LCD_HEIGHT >=
 sudoku_start.320x240x16.bmp
 sudoku_normal.320x240x16.bmp
 sudoku_inverse.320x240x16.bmp
+#elif (LCD_WIDTH == 176) && (LCD_HEIGHT == 220) && (LCD_DEPTH == 16)
+sudoku_start.176x220x16.bmp
+sudoku_normal.176x220x16.bmp
+sudoku_inverse.176x220x16.bmp
 #endif
 #endif

diff --git a/apps/plugins/sudoku/SOURCES b/apps/plugins/sudoku/SOURCES
index 8b344bd..7cce555 100644
--- a/apps/plugins/sudoku/SOURCES
+++ b/apps/plugins/sudoku/SOURCES
@@ -1,5 +1,3 @@
-#if !defined(SANSA_E200)
 sudoku.c
 generator.c
 templates.c
-#endif
diff --git a/apps/plugins/sudoku/sudoku.c b/apps/plugins/sudoku/sudoku.c
index a6ccfb9..112d2c1 100644
--- a/apps/plugins/sudoku/sudoku.c
+++ b/apps/plugins/sudoku/sudoku.c
@@ -129,8 +129,7 @@ #elif ((LCD_HEIGHT==128) && (LCD_WIDTH==
 #define CELL_WIDTH  12
 #define CELL_HEIGHT 12

-#elif ((LCD_HEIGHT==176) && (LCD_WIDTH==220)) || \
-      ((LCD_HEIGHT==220) && (LCD_WIDTH==176))
+#elif ((LCD_HEIGHT==176) && (LCD_WIDTH==220))
 /* Iriver h300, iPod Color/Photo - 220x176, 9 cells @ 16x16 with 14 border lines */

 /* Internal dimensions of a cell */
@@ -158,6 +157,13 @@ #if (LCD_HEIGHT>=320) && (LCD_WIDTH>=240
 #define CELL_WIDTH  24
 #define CELL_HEIGHT 24

+#elif (LCD_HEIGHT==220) && (LCD_WIDTH==176)
+/* Sansa */
+
+/* Internal dimensions of a cell */
+#define CELL_WIDTH  16
+#define CELL_HEIGHT 16
+
 #else
   #error SUDOKU: Unsupported LCD size
 #endif
diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h
index 0bb80a0..6f5d1d1 100644
--- a/apps/plugins/sudoku/sudoku.h
+++ b/apps/plugins/sudoku/sudoku.h
@@ -102,12 +102,12 @@ #define SUDOKU_BUTTON_POSSIBLE BUTTON_FF

 #elif (CONFIG_KEYPAD == SANSA_E200_PAD)
 #define SUDOKU_BUTTON_QUIT BUTTON_POWER
-#define SUDOKU_BUTTON_UP BUTTON_UP
-#define SUDOKU_BUTTON_DOWN BUTTON_DOWN
+#define SUDOKU_BUTTON_UP BUTTON_SCROLL_UP
+#define SUDOKU_BUTTON_DOWN BUTTON_SCROLL_DOWN
 #define SUDOKU_BUTTON_LEFT BUTTON_LEFT
 #define SUDOKU_BUTTON_RIGHT BUTTON_RIGHT
 #define SUDOKU_BUTTON_TOGGLE BUTTON_SELECT
-#define SUDOKU_BUTTON_MENU (BUTTON_SELECT|BUTTON_REPEAT)
+#define SUDOKU_BUTTON_MENU BUTTON_DOWN
 #define SUDOKU_BUTTON_POSSIBLE BUTTON_REC

 #elif
diff --git a/bootloader/e200.c b/bootloader/e200.c
index c88290b..f03fb4a 100644
--- a/bootloader/e200.c
+++ b/bootloader/e200.c
@@ -5,10 +5,13 @@
  *   Jukebox    |    |   (  <_> )  \___|    < | \_\ (  <_> > <  <
  *   Firmware   |____|_  /\____/ \___  >__|_ \|___  /\____/__/\_ \
  *                     \/            \/     \/    \/            \/
- * $Id: e200.c,v 1.5 2006-10-16 17:21:30 dan_a Exp $
+ * $Id: h10.c,v 1.4 2006-08-28 08:11:32 barrywardell Exp $
  *
- * Copyright (C) 2006 Daniel Stenberg
+ * Copyright (C) 2006 by Barry Wardell
  *
+ * Based on Rockbox iriver bootloader by Linus Nielsen Feltzing
+ * and the ipodlinux bootloader by Daniel Palffy and Bernard Leach
+ *
  * 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.
  *
@@ -32,63 +35,252 @@ #include "disk.h"
 #include "font.h"
 #include "adc.h"
 #include "backlight.h"
+#include "button.h"
 #include "panic.h"
 #include "power.h"
 #include "file.h"

-static inline void blink(void)
+/* Size of the buffer to store the loaded Rockbox/Sansa image */
+#define MAX_LOADSIZE (10*1024*1024)
+
+/* A buffer to load the iriver firmware or Rockbox into */
+unsigned char loadbuffer[MAX_LOADSIZE];
+
+char version[] = APPSVERSION;
+
+/* To store the original state of the GPIOs.
+We only use A-F in the bootloader */
+unsigned long gpio_en[7];
+unsigned long gpio_output_en[7];
+
+#define DRAM_START              0x10000000
+
+int line=0;
+
+/* Save the initial GPIO status from the Sansa bootloader */
+void gpio_save(void)
 {
-    volatile unsigned int* ptr;
-    int i;
-    ptr = (volatile unsigned int*)0x70000020;
+    int i = 0;
+    gpio_en[i] = GPIOA_ENABLE;
+    gpio_output_en[i++] = GPIOA_OUTPUT_EN;
+    gpio_en[i] = GPIOB_ENABLE;
+    gpio_output_en[i++] = GPIOB_OUTPUT_EN;
+    gpio_en[i] = GPIOC_ENABLE;
+    gpio_output_en[i++] = GPIOC_OUTPUT_EN;
+    gpio_en[i] = GPIOD_ENABLE;
+    gpio_output_en[i++] = GPIOD_OUTPUT_EN;
+    gpio_en[i] = GPIOE_ENABLE;
+    gpio_output_en[i++] = GPIOE_OUTPUT_EN;
+    gpio_en[i] = GPIOF_ENABLE;
+    gpio_output_en[i++] = GPIOF_OUTPUT_EN;
+    gpio_en[i] = GPIOG_ENABLE;
+    gpio_output_en[i++] = GPIOG_OUTPUT_EN;
+}
+
+/* Restore the GPIO status */
+void gpio_restore(void)
+{
+    int i = 0;
+    GPIOA_ENABLE = gpio_en[i];
+    GPIOA_OUTPUT_EN = gpio_output_en[i++];
+    GPIOB_ENABLE = gpio_en[i];
+    GPIOB_OUTPUT_EN = gpio_output_en[i++];
+    GPIOC_ENABLE = gpio_en[i];
+    GPIOC_OUTPUT_EN = gpio_output_en[i++];
+    GPIOD_ENABLE = gpio_en[i];
+    GPIOD_OUTPUT_EN = gpio_output_en[i++];
+    GPIOE_ENABLE = gpio_en[i];
+    GPIOE_OUTPUT_EN = gpio_output_en[i++];
+    GPIOF_ENABLE = gpio_en[i];
+    GPIOF_OUTPUT_EN = gpio_output_en[i++];
+    GPIOG_ENABLE = gpio_en[i];
+    GPIOG_OUTPUT_EN = gpio_output_en[i++];
+}
+
+/* Load original iriver firmware. This function expects a file called
+   "/System/Original.mi4" on the player. It should be decrypted
+   and have the header stripped using mi4code. It reads the file in to a memory
+   buffer called buf. The rest of the loading is done in main() and crt0.S
+*/
+int load_iriver(unsigned char* buf)
+{
+    int fd;
+    int rc;
+    int len;
+
+    fd = open("/.rockbox/OF.bin", O_RDONLY);
+
+    len = filesize(fd);
+
+    if (len > MAX_LOADSIZE)
+        return -6;

-    *ptr &= ~(1 << 13);
-    for(i = 0; i < 0xfffff; i++)
+    rc = read(fd, buf, len);
+    if(rc < len)
+        return -4;
+
+    close(fd);
+    gpio_restore();
+    return len;
+}
+
+/* Load Rockbox firmware (rockbox.h10) */
+int load_rockbox(unsigned char* buf)
+{
+    int fd;
+    int rc;
+    int len;
+    unsigned long chksum;
+    char model[5];
+    unsigned long sum;
+    int i;
+    char str[80];
+
+    fd = open("/.rockbox/" BOOTFILE, O_RDONLY);
+    if(fd < 0)
     {
+        fd = open("/" BOOTFILE, O_RDONLY);
+        if(fd < 0)
+            return -1;
     }
-    *ptr |= (1 << 13);
-    for(i = 0; i < 0xfffff; i++)
-    {
+
+    len = filesize(fd) - 8;
+
+    snprintf(str, sizeof(str), "Length: %x", len);
+    lcd_puts(0, line++ ,str);
+    lcd_update();
+
+    if (len > MAX_LOADSIZE)
+        return -6;
+
+    lseek(fd, FIRMWARE_OFFSET_FILE_CRC, SEEK_SET);
+
+    rc = read(fd, &chksum, 4);
+    chksum=betoh32(chksum); /* Rockbox checksums are big-endian */
+    if(rc < 4)
+        return -2;
+
+    snprintf(str, sizeof(str), "Checksum: %x", chksum);
+    lcd_puts(0, line++ ,str);
+    lcd_update();
+
+    rc = read(fd, model, 4);
+    if(rc < 4)
+        return -3;
+
+    model[4] = 0;
+
+    snprintf(str, sizeof(str), "Model name: %s", model);
+    lcd_puts(0, line++ ,str);
+    lcd_update();
+
+    lseek(fd, FIRMWARE_OFFSET_FILE_DATA, SEEK_SET);
+
+    rc = read(fd, buf, len);
+    if(rc < len)
+        return -4;
+
+    close(fd);
+
+    sum = MODEL_NUMBER;
+
+    for(i = 0;i < len;i++) {
+        sum += buf[i];
     }
+
+    /* I don't know why my checksums aren't matching.  Figure this out before committing.  Hack around it for now */
+    sum += 4;
+
+    snprintf(str, sizeof(str), "Sum: %x", sum);
+    lcd_puts(0, line++ ,str);
+    lcd_update();
+
+    if(sum != chksum)
+        return -5;
+
+    return len;
 }

-static inline void slow_blink(void)
+void* main(void)
 {
-    volatile unsigned int* ptr;
+    char buf[256];
     int i;
-    ptr = (volatile unsigned int*)0x70000020;
+    int rc;
+    unsigned short* identify_info;
+    struct partinfo* pinfo;

-    *ptr &= ~(1 << 13);
-    for(i = 0; i < (0xfffff); i++)
-    {
-    }
-    for(i = 0; i < (0xfffff); i++)
-    {
-    }
-    for(i = 0; i < (0xfffff); i++)
-    {
-    }
+    gpio_save();
+    system_init();
+    kernel_init();
+    lcd_init();
+    font_init();

-    *ptr |= (1 << 13);
-    for(i = 0; i < (0xfffff); i++)
-    {
+    line=0;
+
+    lcd_setfont(FONT_SYSFIXED);
+
+    lcd_puts(0, line++, "Rockbox boot loader");
+    snprintf(buf, sizeof(buf), "Version: 20%s", version);
+    lcd_puts(0, line++, buf);
+    snprintf(buf, sizeof(buf), "iriver H10");
+    lcd_puts(0, line++, buf);
+    lcd_update();
+
+    i=ata_init();
+    if (i==0) {
+      identify_info=ata_get_identify();
+      /* Show model */
+      for (i=0; i < 20; i++) {
+        ((unsigned short*)buf)[i]=htobe16(identify_info[i+27]);
+      }
+      buf[40]=0;
+      for (i=39; i && buf[i]==' '; i--) {
+        buf[i]=0;
+      }
+      lcd_puts(0, line++, buf);
+      lcd_update();
+    } else {
+      snprintf(buf, sizeof(buf), "ATA: %d", i);
+      lcd_puts(0, line++, buf);
+      lcd_update();
     }
-    for(i = 0; i < (0xfffff); i++)
+
+    disk_init();
+    rc = disk_mount_all();
+    if (rc<=0)
     {
+        lcd_puts(0, line++, "No partition found");
+        lcd_update();
     }
-    for(i = 0; i < (0xfffff); i++)
+
+    pinfo = disk_partinfo(0);
+    snprintf(buf, sizeof(buf), "Partition 0: 0x%02x %ld MB",
+                  pinfo->type, pinfo->size / 2048);
+    lcd_puts(0, line++, buf);
+    lcd_update();
+
+    i=button_read_device();
+    if(i==BUTTON_LEFT)
     {
+        lcd_puts(0, line, "Loading iriver firmware...");
+        lcd_update();
+        rc=load_iriver(loadbuffer);
+    } else {
+        lcd_puts(0, line, "Loading Rockbox...");
+        lcd_update();
+        rc=load_rockbox(loadbuffer);
     }
-}

-static inline unsigned long get_pc(void)
-{
-    unsigned long pc;
-    asm volatile (
-        "mov %0, pc\n"
-        : "=r"(pc)
-    );
-    return pc;
+    if (rc < 0) {
+            snprintf(buf, sizeof(buf), "Rockbox error: %d",rc);
+            lcd_puts(0, line++, buf);
+            lcd_update();
+            while(1) {}
+    }
+
+    memcpy((void*)DRAM_START,loadbuffer,rc);
+
+    return (void*)DRAM_START;
 }

 /* These functions are present in the firmware library, but we reimplement
@@ -100,62 +292,7 @@ void reset_poweroff_timer(void)

 int dbg_ports(void)
 {
-    unsigned int gpio_a, gpio_b, gpio_c, gpio_d;
-    unsigned int gpio_e, gpio_f, gpio_g, gpio_h;
-    unsigned int gpio_i, gpio_j, gpio_k, gpio_l;
-
-    char buf[128];
-    int line;
-
-    lcd_setmargins(0, 0);
-    lcd_clear_display();
-    lcd_setfont(FONT_SYSFIXED);
-
-    while(1)
-    {
-        gpio_a = GPIOA_INPUT_VAL;
-        gpio_b = GPIOB_INPUT_VAL;
-        gpio_c = GPIOC_INPUT_VAL;
-
-        gpio_g = GPIOG_INPUT_VAL;
-        gpio_h = GPIOH_INPUT_VAL;
-        gpio_i = GPIOI_INPUT_VAL;
-
-        line = 0;
-        snprintf(buf, sizeof(buf), "GPIO_A: %02x GPIO_G: %02x", gpio_a, gpio_g);
-        lcd_puts(0, line++, buf);
-        snprintf(buf, sizeof(buf), "GPIO_B: %02x GPIO_H: %02x", gpio_b, gpio_h);
-        lcd_puts(0, line++, buf);
-        snprintf(buf, sizeof(buf), "GPIO_C: %02x GPIO_I: %02x", gpio_c, gpio_i);
-        lcd_puts(0, line++, buf);
-        line++;
-
-        gpio_d = GPIOD_INPUT_VAL;
-        gpio_e = GPIOE_INPUT_VAL;
-        gpio_f = GPIOF_INPUT_VAL;
-
-        gpio_j = GPIOJ_INPUT_VAL;
-        gpio_k = GPIOK_INPUT_VAL;
-        gpio_l = GPIOL_INPUT_VAL;
-
-        snprintf(buf, sizeof(buf), "GPIO_D: %02x GPIO_J: %02x", gpio_d, gpio_j);
-        lcd_puts(0, line++, buf);
-        snprintf(buf, sizeof(buf), "GPIO_E: %02x GPIO_K: %02x", gpio_e, gpio_k);
-        lcd_puts(0, line++, buf);
-        snprintf(buf, sizeof(buf), "GPIO_F: %02x GPIO_L: %02x", gpio_f, gpio_l);
-        lcd_puts(0, line++, buf);
-        line++;
-        snprintf(buf, sizeof(buf), "ADC_1: %02x", adc_read(ADC_0));
-        lcd_puts(0, line++, buf);
-        snprintf(buf, sizeof(buf), "ADC_2: %02x", adc_read(ADC_1));
-        lcd_puts(0, line++, buf);
-        snprintf(buf, sizeof(buf), "ADC_3: %02x", adc_read(ADC_2));
-        lcd_puts(0, line++, buf);
-        snprintf(buf, sizeof(buf), "ADC_4: %02x", adc_read(ADC_3));
-        lcd_puts(0, line++, buf);
-        lcd_update();
-    }
-    return 0;
+   return 0;
 }

 void mpeg_stop(void)
@@ -173,18 +310,3 @@ void usb_wait_for_disconnect(void)
 void sys_poweroff(void)
 {
 }
-
-void system_reboot(void)
-{
-
-}
-
-void main(void)
-{
-    kernel_init();
-    adc_init();
-    lcd_init_device();
-
-    dbg_ports();
-}
-
diff --git a/firmware/export/config-e200.h b/firmware/export/config-e200.h
index 1bbdd60..c33873d 100644
--- a/firmware/export/config-e200.h
+++ b/firmware/export/config-e200.h
@@ -36,7 +36,7 @@ #define CONFIG_CODEC SWCODEC

 /* define this if you have a real-time clock */
 #ifndef BOOTLOADER
-#define CONFIG_RTC RTC_E8564  /* TODO: figure this out */
+#define CONFIG_RTC RTC_E8564 /* TODO: figure this out */
 #endif

 /* Define this if you have a software controlled poweroff */
diff --git a/firmware/target/arm/crt0-pp.S b/firmware/target/arm/crt0-pp.S
index 0f915d5..a9c3781 100644
--- a/firmware/target/arm/crt0-pp.S
+++ b/firmware/target/arm/crt0-pp.S
@@ -163,6 +163,12 @@ #ifndef STUB
 #endif /* !STUB */
 #endif /* !BOOTLOADER */

+#ifdef BOOTLOADER
+    ldr    r1, =CACHE_CTRL
+    mov    r2, #0x0
+    str    r2, [r1]
+#endif
+
     /* Initialise bss section to zero */
     ldr    r2, =_edata
     ldr    r3, =_end
@@ -252,6 +258,14 @@ start_loc:
     mov    r3, #WAKE
     str    r3, [r4]

+    nop
+    nop
+    nop
+    nop
+    nop
+    nop
+    nop
+
     /* jump to start location */
     mov    pc, r0

diff --git a/firmware/target/arm/sandisk/sansa-e200/usb-target.h b/firmware/target/arm/sandisk/sansa-e200/usb-target.h
index e14c106..341770b 100644
--- a/firmware/target/arm/sandisk/sansa-e200/usb-target.h
+++ b/firmware/target/arm/sandisk/sansa-e200/usb-target.h
@@ -22,4 +22,3 @@ #define USB_TARGET_H
 bool usb_init_device(void);

 #endif
-
diff --git a/tools/configure b/tools/configure
index 7b4f9d2..a7c2b80 100755
--- a/tools/configure
+++ b/tools/configure
@@ -1097,10 +1097,11 @@ EOF
     target="-DSANSA_E200"
     memory=32 # supposedly
     arm7tdmicc
-    tool="$rootdir/tools/mkmi4.sh e200"
+    #tool="$rootdir/tools/mkmi4.sh e200"
+    tool="$rootdir/tools/scramble -add=e200"
     bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
     bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
-    output="PP5022.mi4"
+    output="rockbox.e200"
     appextra="recorder:gui"
     archosrom=""
     flash=""
diff --git a/tools/scramble.c b/tools/scramble.c
index e7de1cb..31b5d6b 100644
--- a/tools/scramble.c
+++ b/tools/scramble.c
@@ -207,6 +207,8 @@ int main (int argc, char** argv)
             modelnum = 14;
         else if(!strcmp(&argv[1][5], "tpj2"))
             modelnum = 15;
+        else if(!strcmp(&argv[1][5], "e200"))
+            modelnum = 16;
         else {
             fprintf(stderr, "unsupported model: %s\n", &argv[1][5]);
             return 2;