Thank you to anyone who has already donated - your generous donations helped make three months of treatment possible.

My brother Nate continues to fight stage IV Hodgkin's lymphoma. He's just 31, with a wife and baby girl. They have no active income (since he's been unable to return to work), no insurance, and cannot afford the treatment he needs. Nate and his family need your help. Please consider a donation, every dollar helps. Thanks.


diff --git a/rbutil/mkamsboot/dualboot.c b/rbutil/mkamsboot/dualboot.c
index 6aa4429..e283a8e 100644
--- a/rbutil/mkamsboot/dualboot.c
+++ b/rbutil/mkamsboot/dualboot.c
@@ -102,23 +102,33 @@ unsigned char dualboot_fuze[204] = {
     0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1,
     0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0b, 0xc8, 0x00, 0x00, 0x0d, 0xc8
 };
-unsigned char dualboot_clipv2[248] = {
+unsigned char dualboot_clipv2[408] = {
     0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
     0x24, 0x00, 0x1f, 0xe5, 0x24, 0x10, 0x1f, 0xe5, 0x01, 0x20, 0x40, 0xe0, 0x18, 0x30, 0x1f, 0xe5,
     0x01, 0x40, 0x50, 0xe4, 0x01, 0x40, 0x43, 0xe4, 0x00, 0x00, 0x52, 0xe1, 0xfb, 0xff, 0xff, 0x1a,
-    0x2c, 0x30, 0x0f, 0xe5, 0xa0, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3,
-    0x00, 0x10, 0x80, 0xe5, 0x94, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5,
-    0x00, 0x11, 0x90, 0xe5, 0x00, 0x00, 0x51, 0xe3, 0x13, 0x00, 0x00, 0x1a, 0x80, 0x00, 0x9f, 0xe5,
-    0x38, 0x10, 0xa0, 0xe3, 0x00, 0x14, 0x80, 0xe5, 0x08, 0x10, 0xa0, 0xe3, 0x20, 0x10, 0x80, 0xe5,
-    0x10, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5, 0x20, 0x10, 0xa0, 0xe3, 0x80, 0x10, 0x80, 0xe5,
-    0x00, 0x10, 0xa0, 0xe3, 0x40, 0x10, 0x80, 0xe5, 0x05, 0x10, 0xa0, 0xe3, 0x01, 0x10, 0x51, 0xe2,
-    0xfd, 0xff, 0xff, 0x1a, 0x04, 0x10, 0x90, 0xe5, 0x00, 0x00, 0x51, 0xe3, 0x02, 0x00, 0x00, 0x0a,
-    0xa4, 0x00, 0x1f, 0xe5, 0xa4, 0x10, 0x1f, 0xe5, 0x01, 0x00, 0x00, 0xea, 0xb8, 0x00, 0x1f, 0xe5,
-    0xb8, 0x10, 0x1f, 0xe5, 0xb0, 0x30, 0x1f, 0xe5, 0x02, 0x50, 0x83, 0xe2, 0x01, 0x40, 0x43, 0xe0,
-    0x01, 0x20, 0x50, 0xe4, 0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a,
-    0x01, 0x00, 0x83, 0xe2, 0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8,
-    0x00, 0x00, 0x0b, 0xc8, 0x00, 0x00, 0x0e, 0xc8
+    0x2c, 0x30, 0x0f, 0xe5, 0x3c, 0x01, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x01, 0x18, 0x81, 0xe3,
+    0x00, 0x10, 0x80, 0xe5, 0x30, 0x01, 0x9f, 0xe5, 0x00, 0x14, 0x90, 0xe5, 0x08, 0x10, 0xc1, 0xe3,
+    0x80, 0x10, 0x81, 0xe3, 0x00, 0x14, 0x80, 0xe5, 0x80, 0x10, 0xa0, 0xe3, 0x00, 0x12, 0x80, 0xe5,
+    0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, 0x01, 0x10, 0x81, 0xe2, 0x32, 0x00, 0x51, 0xe3,
+    0xfb, 0xff, 0xff, 0xba, 0x20, 0x20, 0x90, 0xe5, 0x7f, 0x10, 0xa0, 0xe3, 0x00, 0x12, 0x80, 0xe5,
+    0x00, 0x10, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe1, 0x01, 0x10, 0x81, 0xe2, 0x0a, 0x00, 0x51, 0xe3,
+    0xfb, 0xff, 0xff, 0xba, 0x00, 0x14, 0x90, 0xe5, 0x80, 0x10, 0xc1, 0xe3, 0x00, 0x14, 0x80, 0xe5,
+    0x00, 0x00, 0x52, 0xe3, 0x27, 0x00, 0x00, 0x0a, 0xd0, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0xa0, 0xe3,
+    0x00, 0x10, 0x80, 0xe5, 0xbc, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0x90, 0xe5, 0x02, 0x18, 0x81, 0xe3,
+    0x7f, 0x10, 0xc1, 0xe3, 0x00, 0x10, 0x80, 0xe5, 0xb4, 0x00, 0x9f, 0xe5, 0x00, 0x10, 0xa0, 0xe3,
+    0x24, 0x10, 0x80, 0xe5, 0x3c, 0x10, 0xa0, 0xe3, 0x1c, 0x10, 0x80, 0xe5, 0x00, 0x10, 0xa0, 0xe3,
+    0x20, 0x10, 0x80, 0xe5, 0x8c, 0x10, 0xa0, 0xe3, 0x04, 0x10, 0x80, 0xe5, 0x51, 0x20, 0xa0, 0xe3,
+    0x0c, 0x20, 0x80, 0xe5, 0x30, 0x10, 0x90, 0xe5, 0x01, 0x00, 0x11, 0xe3, 0xfc, 0xff, 0xff, 0x1a,
+    0x02, 0x17, 0xa0, 0xe3, 0x01, 0x10, 0x51, 0xe2, 0xfd, 0xff, 0xff, 0x1a, 0x25, 0x10, 0xa0, 0xe3,
+    0x44, 0x10, 0x80, 0xe5, 0x02, 0x20, 0x82, 0xe3, 0x0c, 0x20, 0x80, 0xe5, 0x01, 0x10, 0xa0, 0xe3,
+    0x10, 0x10, 0x80, 0xe5, 0x10, 0x10, 0x90, 0xe5, 0x00, 0x00, 0x51, 0xe3, 0xfc, 0xff, 0xff, 0x1a,
+    0x00, 0x10, 0x90, 0xe5, 0x08, 0x00, 0x11, 0xe3, 0x02, 0x00, 0x00, 0x1a, 0x40, 0x01, 0x1f, 0xe5,
+    0x40, 0x11, 0x1f, 0xe5, 0x01, 0x00, 0x00, 0xea, 0x54, 0x01, 0x1f, 0xe5, 0x54, 0x11, 0x1f, 0xe5,
+    0x4c, 0x31, 0x1f, 0xe5, 0x02, 0x50, 0x83, 0xe2, 0x01, 0x40, 0x43, 0xe0, 0x01, 0x20, 0x50, 0xe4,
+    0x01, 0x20, 0x43, 0xe4, 0x04, 0x00, 0x53, 0xe1, 0xfb, 0xff, 0xff, 0x1a, 0x01, 0x00, 0x83, 0xe2,
+    0x00, 0x20, 0xa0, 0xe3, 0x15, 0xff, 0x2f, 0xe1, 0x14, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x0b, 0xc8,
+    0x10, 0x00, 0x0f, 0xc8, 0x00, 0x00, 0x07, 0xc8
 };
 unsigned char dualboot_clipplus[340] = {
     0x06, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
diff --git a/rbutil/mkamsboot/dualboot.h b/rbutil/mkamsboot/dualboot.h
index 76d4641..9e199d2 100644
--- a/rbutil/mkamsboot/dualboot.h
+++ b/rbutil/mkamsboot/dualboot.h
@@ -6,6 +6,6 @@ extern unsigned char dualboot_e200v2[204];
 extern unsigned char dualboot_c200v2[400];
 extern unsigned char dualboot_m200v4[180];
 extern unsigned char dualboot_fuze[204];
-extern unsigned char dualboot_clipv2[248];
+extern unsigned char dualboot_clipv2[408];
 extern unsigned char dualboot_clipplus[340];
 extern unsigned char dualboot_fuzev2[332];
diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S
index 77fb4de..bc5f5f9 100644
--- a/rbutil/mkamsboot/dualboot/dualboot.S
+++ b/rbutil/mkamsboot/dualboot/dualboot.S
@@ -91,7 +91,7 @@ uclcopy:


 /* TODO : M200V4 ? */
-#if defined(SANSA_CLIP) || defined(SANSA_CLIPV2)
+#if defined(SANSA_CLIP)
 #define USB_PIN 6
 #elif defined(SANSA_FUZE) || defined(SANSA_E200V2)
 #define USB_PIN 3
@@ -182,28 +182,38 @@ uclcopy:
 .set row, (1<<4) /* enable output on D4 */
 .set col, (1<<0) /* read keyscan column D0 */

-        ldr     r0, =GPIOD
-        mov     r1, #((1<<5)|(1<<4)|(1<<3)) /* all rows as output */
+        ldr     r0, =GPIOA
+
+        ldr     r1, [r0, #0x400]
+        bic     r1, r1, #(1<<3)     @ A3 in
+        orr     r1, r1, #(1<<7)     @ A7 out
         str     r1, [r0, #0x400]

-        /* all rows high */
-        mov     r1, #(1<<3)
-        str     r1, [r0, #(4*(1<<3))]
-        mov     r1, #(1<<4)
-        str     r1, [r0, #(4*(1<<4))]
-        mov     r1, #(1<<5)
-        str     r1, [r0, #(4*(1<<5))]
+        mov     r1, #(1<<7)
+        str     r1, [r0, #0x200]    @ A7 = 1

-        mov     r1, #0                      /* button row low */
-        str     r1, [r0, #(4*row)]
+        mov     r1, #0
+1:      nop
+        add     r1, r1, #1
+        cmp     r1, #50
+        blt     1b

-        mov     r1, #5                      /* small delay */
-1:      subs    r1, r1, #1
-        bne     1b
+        ldr     r2, [r0, #0x20]     @ read A3

-        ldr     r1, [r0, #(4*col)]
+        mov     r1, #0x7f
+        str     r1, [r0, #0x200]    @ A7 = 0

-        cmp     r1, #0
+        mov     r1, #0
+1:      nop
+        add     r1, r1, #1
+        cmp     r1, #10
+        blt     1b
+
+        ldr     r1, [r0, #0x400]
+        bic     r1, r1, #(1<<7)     @ A7 in
+        str     r1, [r0, #0x400]
+
+        cmp     r2, #0
         beq     boot_of
 #elif defined(SANSA_E200V2) || defined(SANSA_FUZE)
         ldr     r0, =GPIOC
@@ -307,7 +317,7 @@ uclcopy:
         #error No target-specific key check defined!
 #endif

-#if defined(SANSA_CLIPPLUS) || defined(SANSA_FUZEV2)
+#if defined(SANSA_CLIPPLUS) || defined(SANSA_FUZEV2) || defined(SANSA_CLIPV2)
         /* Check for USB after buttons because I trust more the GPIO code than
          * the i2c code.
          * Also it seems we need to wait a bit before detecting USB connection
[fun@kru /media/bordel/rockbox/rbuti