diff --git a/rbutil/mkamsboot/dualboot/dualboot.S b/rbutil/mkamsboot/dualboot/dualboot.S index 8bb2059..2f94bc2 100644 --- a/rbutil/mkamsboot/dualboot/dualboot.S +++ b/rbutil/mkamsboot/dualboot/dualboot.S @@ -101,7 +101,7 @@ uclcopy: /* TODO : M200V4 ? */ #if defined(SANSA_CLIP) || defined(SANSA_CLIPV2) #define USB_PIN 6 -#elif defined(SANSA_FUZE) || defined(SANSA_E200V2) || defined(SANSA_FUZEV2) +#elif defined(SANSA_FUZE) || defined(SANSA_E200V2) #define USB_PIN 3 #endif @@ -213,19 +213,55 @@ uclcopy: cmp r1, #0 beq boot_of -#elif defined(SANSA_E200V2) || defined(SANSA_FUZE) || defined(SANSA_FUZEV2) +#elif defined(SANSA_E200V2) || defined(SANSA_FUZE) ldr r0, =GPIOC mov r1, #0 str r1, [r0, #0x400] ldr r1, [r0, #0x20] /* read pin C3 */ cmp r1, #0 /* C3 = #0 means button pressed */ -#ifdef SANSA_FUZEV2 - /* the logic is reversed on the fuzev2 */ - bne boot_of -#else beq boot_of -#endif /* SANSA_FUZEV2 */ + +#elif defined(SANSA_FUZEV2) + ldr r0, =GPIOC + mov r1, #0 + str r1, [r0, #0x400] + ldr r1, [r0, #0x40] /* read pin C4 */ + + cmp r1, #0 /* C4 != #0 means select pressed */ + bne boot_of + + ldr r2, =0xC810000C @ CCU_IO + ldr r3, [r2] + bic r3, r3, #(1<<12) @ clear bit 12 + str r3, [r2] + + ldr r2, =GPIOB + mov r3, #(1<<0) + ldr r4, [r2, #0x400] + orr r4, r4, r3 @ GPIOB_DIR: pin0 out + str r4, [r2, #0x400] + + str r3, [r2, #0x4] @ GPIOB_PIN(0) = 1 + mov r4, #500 +1: nop + subs r4, r4, #1 + bne 1b + + ldr r4, =GPIOD + ldr r3, [r4, #0x400] + bic r3, r3, #(1<<6) + ldr r3, [r4, #0x100] @ read d6 and discard it + + mov r3, #0 + str r3, [r2, #0x4] @ GPIOB_PIN(0) = 0 + mov r4, #240 +1: nop + subs r4, r4, #1 + bne 1b + + ldr r1, [r0, #0x20] /* read pin C3 */ + bne boot_of /* C3 != #0 means left pressed */ #elif defined(SANSA_CLIPPLUS) @ read pins