diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S
index 5210ba5..30afa5e 100644
--- a/rbutil/mkamsboot/dualboot/dualboot.S
+++ b/rbutil/mkamsboot/dualboot/dualboot.S
@@ -34,6 +34,9 @@
.set GPIOD, 0xC80E0000
.set CGU_PERI, 0xC80F0014

+.set CGU_DBOP, 0xC80F0038
+.set DBOP, 0xC8120000
+

/* Vectors */

@@ -157,14 +160,56 @@ uclcopy:
cmp r1, #0 /* C3 = #0 means button pressed */
beq boot_of
#elif defined(SANSA_C200V2)
- /* check for RIGHT on C6, should changed to LEFT as soon as it
- * known in which pin that is in order for consistency */
- ldr r0, =GPIOC
- mov r1, #0
- str r1, [r0, #0x400] /* set pin to output */
+ ldr r0, =CGU_DBOP
+ mov r1, #(1<<3) @ no divider
+ str r1, [r0]

- ldr r1, [r0, #256] /* 1<<(6+2) */
- cmp r1, #0 /* C6 low means button pressed */
+ ldr r0, =DBOP
+ ldr r1, =0xe167e167
+ str r1, [r0] @ DBOP_TIMPOL_01
+ ldr r1, =0xe167006e
+ str r1, [r0, #4] @ DBOP_TIMPOL_23
+
+ ldr r2, =GPIOB
+ mov r1, #0xc
+ str r1, [r2, #0x420] @ GPIOB_AFSEL
+ ldr r2, =GPIOC
+ mov r1, #0xff
+ str r1, [r2, #0x420] @ GPIOC_AFSEL
+
+ ldr r1, =0x6006e
+ str r1, [r0, #4] @ DBOP_TIMPOL_23
+ ldr r1, =0x52008
+ str r1, [r0, #8] @ DBOP_CTRL
+ ldr r1, =0x6e167
+ str r1, [r0] @ DBOP_TIMPOL_01
+ ldr r1, =0xa167e06f
+ str r1, [r0, #4] @ DBOP_TIMPOL_23
+
+1: ldr r1, [r0, #0xc] @ DOBP_STAT
+ orrs r1, r1, #(1<<10)
+ beq 1b @ make sure fifo is empty
+
+ ldr r1, =0xe167e167
+ str r1, [r0, #4] @ DBOP_TIMPOL_23
+ mov r1, #(1<<16) @ enable write
+ orr r1, r1, #(1<<12) @ 16 bit data width
+ str r1, [r0, #8] @ DBOP_CTRL
+ mvn r1, #0 @ 0xffff
+ strh r1, [r0, #0x10] @ DBOP_DOUT
+
+1: ldr r1, [r0, #0xc] @ DOBP_STAT
+ orrs r1, r1, #(1<<10)
+ beq 1b @ make sure fifo is empty
+
+ mov r1, #31
+ orr r1, r1, #(1<<12) @ 16 bit data width
+ orr r1, r1, #(1<<15) @ start read
+ str r1, [r0, #8] @ DBOP_CTRL
+
+ ldrh r1, [r0, #0x14] @ DBOP_DIN
+
+ ands r1, r1, #(1<<2) @ button left
beq boot_of
#elif defined(SANSA_M200V4)
.set row, (1<<5) /* enable output on A5 */