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