Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/capt_seq.c
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/capt_seq.c	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/capt_seq.c	(revision 1937)
@@ -0,0 +1,932 @@
+#include "lolevel.h"
+#include "platform.h"
+#include "core.h"
+
+static long *nrflag = (long*)0x9B44;  // FF23C248
+#define NR_AUTO (0)		    // have to explictly reset value back to 0 to enable auto
+#define PAUSE_FOR_FILE_COUNTER 100 // Enable delay in capt_seq_hook_raw_here to ensure file counter is updated
+
+#include "../../../generic/capt_seq.c"
+
+/*----------------------------------------------------------------------
+	capt_seq_task()
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) capt_seq_task() {
+// FF0769F8
+    asm volatile (
+        "    STMFD   SP!, {R3-R9,LR} \n" 
+        "    LDR     R4, =0x3B3CC \n" 
+        "    LDR     R7, =0x2E98 \n" 
+        "    MOV     R6, #0 \n" 
+        "loc_FF076A08:\n"
+        "    LDR     R0, [R7, #4] \n" 
+        "    MOV     R2, #0 \n" 
+        "    MOV     R1, SP \n" 
+        "    BL      sub_FF02B314 \n" 
+        "    TST     R0, #1 \n" 
+        "    BEQ     loc_FF076A34 \n" 
+        "    LDR     R1, =0x491 \n" 
+        "    LDR     R0, =0xFF0764B4 \n" // **"SsShootTask.c" 
+        //"    BL      sub_FF00EDBC \n" // original 
+        "    BL      _DebugAssert \n"
+        //"    BL      sub_FF00ED74 \n" // original
+        "    BL      _ExitTask \n "
+        "    LDMFD   SP!, {R3-R9,PC} \n" 
+        "loc_FF076A34:\n"
+        "    LDR     R0, [SP] \n" 
+        "    LDR     R1, [R0] \n" 
+        "    CMP     R1, #0x23 \n" 
+        "    ADDCC   PC, PC, R1, LSL #2 \n" 
+        "    B       loc_FF076CCC \n" 
+        "    B       loc_FF076AD4 \n" 
+        "    B       loc_FF076AEC \n" 
+        "    B       loc_FF076B68 \n" 
+        "    B       loc_FF076B7C \n" 
+        "    B       loc_FF076B74 \n" 
+        "    B       loc_FF076B88 \n" 
+        "    B       loc_FF076B90 \n" 
+        "    B       loc_FF076B98 \n" 
+        "    B       loc_FF076BB4 \n" 
+        "    B       loc_FF076BF4 \n" 
+        "    B       loc_FF076BC0 \n" 
+        "    B       loc_FF076BCC \n" 
+        "    B       loc_FF076BD4 \n" 
+        "    B       loc_FF076BDC \n" 
+        "    B       loc_FF076BE4 \n" 
+        "    B       loc_FF076BEC \n" 
+        "    B       loc_FF076BFC \n" 
+        "    B       loc_FF076C04 \n" 
+        "    B       loc_FF076C0C \n" 
+        "    B       loc_FF076C14 \n" 
+        "    B       loc_FF076C1C \n" 
+        "    B       loc_FF076C28 \n" 
+        "    B       loc_FF076C30 \n" 
+        "    B       loc_FF076C38 \n" 
+        "    B       loc_FF076C40 \n" 
+        "    B       loc_FF076C48 \n" 
+        "    B       loc_FF076C54 \n" 
+        "    B       loc_FF076C5C \n" 
+        "    B       loc_FF076C64 \n" 
+        "    B       loc_FF076C6C \n" 
+        "    B       loc_FF076C74 \n" 
+        "    B       loc_FF076C80 \n" 
+        "    B       loc_FF076C88 \n" 
+        "    B       loc_FF076C94 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076AD4:\n" // jump table entry 0
+        "    BL      shooting_expo_iso_override \n" // added
+        "    BL      sub_FF0772A4 \n"
+        "    BL      shooting_expo_param_override \n" // added
+        "    BL      sub_FF07416C \n" 
+        //"    LDR     R0, [R4, #0x28] \n" 
+        //"    CMP     R0, #0 \n" 
+        //"    BLNE    sub_FF18C580 \n" // above 3 lines removed - redundant with added lines below
+        "    MOV     R0, #0 \n" // added
+        "    STR     R0, [R5,#0x28] \n" //added, fixes overrides behavior at short shutter press (S95)
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076AEC:\n" // jump table entry 1
+        "    LDR     R5, [R0, #0x10] \n" 
+        "    LDR     R0, [R4, #0x28] \n" 
+        "    CMP     R0, #0 \n" 
+        "    BNE     loc_FF076B40 \n" 
+        "    LDRH    R0, [R4] \n" 
+        "    SUB     R1, R0, #0x8200 \n" 
+        "    SUBS    R1, R1, #0x2F \n" 
+        "    SUBNE   R1, R0, #0x8200 \n" 
+        "    SUBNES  R1, R1, #0x2E \n" 
+        "    BLEQ    sub_FF0790F0 \n" 
+        "    BL      sub_FF078D90 \n" 
+        "    MOV     R1, R5 \n" 
+        "    BL      sub_FF078DE8 \n" 
+        "    LDR     R0, =0x10F \n" 
+        "    MOV     R2, #4 \n" 
+        "    ADD     R1, R5, #0x24 \n" 
+        "    BL      sub_FF08A1D4 \n" 
+        "    MOV     R2, #4 \n" 
+        "    ADD     R1, R5, #0x28 \n" 
+        "    MOV     R0, #0x2C \n" 
+        "    BL      sub_FF08A1D4 \n" 
+        "loc_FF076B40:\n"
+        "    MOV     R0, R5 \n" 
+        "    BL      sub_FF18C410 \n" // original -- diff from 100b - sub_FF18C3EC
+        //"    BL      sub_FF18C3EC_my \n" // patched
+        "    BL      capt_seq_hook_raw_here \n" // added
+        "    MOV     R8, R0 \n" 
+        "    MOV     R2, R5 \n" 
+        "    MOV     R1, #1 \n" 
+        "    BL      sub_FF074B24 \n" 
+        "    TST     R8, #1 \n" 
+        "    MOVEQ   R0, R5 \n" 
+        "    BLEQ    sub_FF18BD80 \n" // diff from 100b - sub_FF18BD5C
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076B68:\n" // jump table entry 2
+        "    MOV     R0, #1 \n" 
+        "    BL      sub_FF0775A0 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076B74:\n" // jump table entry 4
+        "    BL      sub_FF076EA8 \n" 
+        "    B       loc_FF076B80 \n" 
+        "loc_FF076B7C:\n" // jump table entry 3
+        "    BL      sub_FF077284 \n" 
+        "loc_FF076B80:\n"
+        "    STR     R6, [R4, #0x28] \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076B88:\n" // jump table entry 5
+        "    BL      sub_FF07728C \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076B90:\n" // jump table entry 6
+        "    BL      sub_FF077478 \n" 
+        "    B       loc_FF076BB8 \n" 
+        "loc_FF076B98:\n" // jump table entry 7
+        "    LDR     R5, [R0, #0x10] \n" 
+        "    MOV     R0, R5 \n" 
+        "    BL      sub_FF18C62C \n" // diff from 100b - sub_FF18C608
+        "    MOV     R2, R5 \n" 
+        "    MOV     R1, #9 \n" 
+        "    BL      sub_FF074B24 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BB4:\n"  // jump table entry 8
+        "    BL      sub_FF077508 \n" 
+        "loc_FF076BB8:\n"
+        "    BL      sub_FF07416C \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BC0:\n"  // jump table entry 10
+        "    LDR     R0, [R4, #0x58] \n" 
+        "    BL      sub_FF077C2C \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BCC:\n"  // jump table entry 11
+        "    BL      sub_FF077F10 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BD4:\n"  // jump table entry 12
+        "    BL      sub_FF077F74 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BDC:\n"  // jump table entry 13
+        "    BL      sub_FF078168 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BE4:\n"  // jump table entry 14
+        "    BL      sub_FF0785B8 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BEC:\n"  // jump table entry 15
+        "    BL      sub_FF078668 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BF4:\n"  // jump table entry 9
+        "    BL      sub_FF077284 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076BFC:\n"  // jump table entry 16
+        "    BL      sub_FF18AFF4 \n" // diff from 100b - sub_FF18AFD0
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C04:\n"  // jump table entry 17
+        "    BL      sub_FF18B260 \n" // diff from 100b - sub_FF18B23C
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C0C:\n"  // jump table entry 18
+        "    BL      sub_FF18B31C \n" // diff from 100b - sub_FF18B2F8
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C14:\n"  // jump table entry 19
+        "    BL      sub_FF18B3F0 \n" // diff from 100b - sub_FF18B3CC
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C1C:\n"  // jump table entry 20
+        "    MOV     R0, #0 \n" 
+        "    BL      sub_FF18B6A4 \n" // diff from 100b - sub_FF18B680
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C28:\n"  // jump table entry 21
+        "    BL      sub_FF18B814 \n" // diff from 100b - sub_FF18B7F0
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C30:\n"  // jump table entry 22
+        "    BL      sub_FF18B8A8 \n" // diff from 100b - sub_FF18B884
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C38:\n"  // jump table entry 23
+        "    BL      sub_FF18B964 \n" // diff from 100b - sub_FF18B940
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C40:\n"  // jump table entry 24
+        "    BL      sub_FF077758 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C48:\n"  // jump table entry 25
+        "    BL      sub_FF0777EC \n" 
+        "    BL      sub_FF028E3C \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C54:\n"  // jump table entry 26
+        "    BL      sub_FF18B4C0 \n" // diff from 100b - sub_FF18B49C
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C5C:\n"  // jump table entry 27
+        "    BL      sub_FF18B528 \n" // diff from 100b - sub_FF18B504
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C64:\n"  // jump table entry 28
+        "    BL      sub_FF07ACBC \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C6C:\n"  // jump table entry 29
+        "    BL      sub_FF07AD44 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C74:\n"  // jump table entry 30
+        "    LDR     R0, [R0, #0xC] \n" 
+        "    BL      sub_FF18BA8C \n" // diff from 100b - sub_FF18BA68
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C80:\n"  // jump table entry 31
+        "    BL      sub_FF18BAFC \n" // diff from 100b - sub_FF18BAD8
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C88:\n"  // jump table entry 32
+        "    BL      sub_FF07ADAC \n" 
+        "    BL      sub_FF07AD64 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076C94:\n"  // jump table entry 33
+        "    MOV     R0, #1 \n" 
+        "    BL      sub_FF18CD94 \n" // diff from 100b - sub_FF18CD70
+        "    MOV     R0, #1 \n" 
+        "    BL      sub_FF18CEC8 \n" // diff from 100b - sub_FF18CEA4
+        "    LDRH    R0, [R4, #0x98] \n" 
+        "    CMP     R0, #4 \n" 
+        "    LDRNEH  R0, [R4] \n" 
+        "    SUBNE   R1, R0, #0x8200 \n" 
+        "    SUBNES  R1, R1, #0x2B \n" 
+        "    BNE     loc_FF076CD8 \n" 
+        "    BL      sub_FF07AD44 \n" 
+        "    BL      sub_FF07B378 \n" 
+        "    BL      sub_FF07B1D4 \n" 
+        "    B       loc_FF076CD8 \n" 
+        "loc_FF076CCC:\n" // jump table default entry
+        "    LDR     R1, =0x5F2 \n" 
+        "    LDR     R0, =0xFF0764B4 \n"  // *"SsShootTask.c"
+        //"    BL      sub_FF00EDBC \n" // original 
+        "    BL      _DebugAssert \n"
+        "loc_FF076CD8:\n" // jump table entry 34
+        "    LDR     R0, [SP] \n" 
+        "    LDR     R1, [R0, #4] \n" 
+        "    LDR     R0, [R7] \n" 
+        "    BL      sub_FF081D00 \n" 
+        "    LDR     R5, [SP] \n" 
+        "    LDR     R0, [R5, #8] \n" 
+        "    CMP     R0, #0 \n" 
+        "    LDREQ   R1, =0x117 \n" 
+        "    LDREQ   R0, =0xFF0764B4 \n" 
+        //"    BLEQ  sub_FF00EDBC \n" // original 
+        "    BLEQ    _DebugAssert \n"
+        "    STR     R6, [R5, #8] \n" 
+        "    B       loc_FF076A08 \n" 
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF18C3EC_my() --  sub_FF18C410 in 100e
+-----------------------------------------------------------------------*/
+/* void __attribute__((naked,noinline)) sub_FF18C3EC_my() {
+// FF18C3EC
+    asm volatile (
+        "    STMFD   SP!, {R3-R7,LR} \n" 
+        "    LDR     R5, =0x3B3CC \n" 
+        "    MOV     R4, R0 \n" 
+        "    LDR     R0, [R5, #0x28] \n" 
+        "    LDR     R6, =0x820D \n" 
+        "    CMP     R0, #0 \n" 
+        "    MOV     R7, #0 \n" 
+        "    BNE     loc_FF18C47C \n" 
+        "    LDR     R0, [R5, #0xBC] \n" 
+        "    CMP     R0, #0 \n" 
+        "    BNE     loc_FF18C42C \n" 
+        "    MOV     R0, #0xC \n" 
+        "    BL      sub_FF07CA70 \n" 
+        "    TST     R0, #1 \n" 
+        "    BEQ     loc_FF18C47C \n" 
+        "    B       loc_FF18C474 \n" 
+        "loc_FF18C42C:\n"
+        "    LDRH    R0, [R5] \n" 
+        "    CMP     R0, R6 \n" 
+        "    LDRNEH  R0, [R5, #0x96] \n" 
+        "    CMPNE   R0, #3 \n" 
+        "    LDRNE   R0, [R4, #8] \n" 
+        "    CMPNE   R0, #1 \n" 
+        "    BLS     loc_FF18C45C \n" 
+        "    BL      sub_FF022E64 \n" 
+        "    TST     R0, #1 \n" 
+        "    BEQ     loc_FF18C47C \n" 
+        "    BL      sub_FF07CAD8 \n" 
+        "    B       loc_FF18C474 \n" 
+        "loc_FF18C45C:\n"
+        "    MOV     R0, #0xC \n" 
+        "    BL      sub_FF07CA70 \n" 
+        "    TST     R0, #1 \n" 
+        "    BEQ     loc_FF18C47C \n" 
+        "    BL      sub_FF18CBE8 \n" 
+        "    BL      sub_FF074820 \n" 
+        "loc_FF18C474:\n"
+        "    MOV     R0, #1 \n" 
+        "    LDMFD   SP!, {R3-R7,PC} \n" 
+        "loc_FF18C47C:\n"
+        "    BL      sub_FF077294 \n" 
+        "    LDR     R0, [R5, #0x28] \n" 
+        "    CMP     R0, #0 \n" 
+        "    BNE     sub_FF18C568 \n" 
+        "    MOV     R0, R4 \n" 
+        "    BL      sub_FF18BC50 \n" 
+        "    TST     R0, #1 \n" 
+        "    LDMNEFD SP!, {R3-R7,PC} \n" 
+        "    LDR     R0, [R5, #0xBC] \n" 
+        "    CMP     R0, #0 \n" 
+        "    LDRNEH  R0, [R5] \n" 
+        "    CMPNE   R0, R6 \n" 
+        "    LDRNEH  R0, [R5, #0x96] \n" 
+        "    CMPNE   R0, #3 \n" 
+        "    LDRNE   R0, [R4, #8] \n" 
+        "    CMPNE   R0, #1 \n" 
+        "    BHI     loc_FF18C4D8 \n" 
+        "    MOV     R0, R4 \n" 
+        "    BL      sub_FF18C020 \n" 
+        "    BL      sub_FF18CB2C \n" 
+        "    LDR     R0, [R5, #0xBC] \n" 
+        "    CMP     R0, #0 \n" 
+        "    BEQ     loc_FF18C4F4 \n" 
+        "loc_FF18C4D8:\n"
+        "    LDRH    R0, [R5] \n" 
+        "    CMP     R0, R6 \n" 
+        "    LDRNEH  R0, [R5, #0x96] \n" 
+        "    CMPNE   R0, #3 \n" 
+        "    LDRNE   R0, [R4, #8] \n" 
+        "    CMPNE   R0, #1 \n" 
+        "    BHI     loc_FF18C4FC \n" 
+        "loc_FF18C4F4:\n"
+        "    MOV     R0, #2 \n" 
+        "    BL      sub_FF07E118 \n" 
+        "loc_FF18C4FC:\n"
+        "    LDRH    R0, [R5] \n" 
+        "    SUB     R1, R0, #0x8200 \n" 
+        "    SUBS    R1, R1, #0x2E \n" 
+        "    BNE     sub_FF18C558 \n" 
+        "    MOV     R5, #1 \n" 
+        "    MOV     R2, #2 \n" 
+        "    MOV     R1, SP \n" 
+        "    ADD     R0, R2, #0x15C \n" 
+        "    STR     R5, [SP] \n" 
+        "    BL      sub_FF08A35C \n" 
+        "    TST     R0, #1 \n" 
+        "    MOVNE   R1, #0xC5 \n" 
+        "    LDRNE   R0, =0xFF18C6EC \n" 
+        "    BLNE    sub_FF00EDBC \n" 
+        "    LDRH    R0, [SP] \n" 
+        "    CMP     R0, #1 \n" 
+        "    BLS     sub_FF18C550 \n" 
+        "    MOV     R0, R4 \n" 
+        "    STR     R5, [R4, #0xD8] \n" 
+        "    BL      sub_FF2EE7DC \n" 
+        "    BL      capt_seq_hook_raw_here \n" // added
+        "    B       sub_FF18C560 \n" 
+    );
+}*/
+
+/*----------------------------------------------------------------------
+	exp_drv_task()
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) exp_drv_task(){
+// FF0C0E24
+    asm volatile (
+        "    STMFD   SP!, {R4-R9,LR} \n" 
+        "    SUB     SP, SP, #0x24 \n" 
+        "    LDR     R6, =0x42D0 \n" 
+        "    LDR     R7, =0xBB8 \n" 
+        "    LDR     R4, =0x58390 \n" 
+        "    MOV     R0, #0 \n" 
+        "    ADD     R5, SP, #0x14 \n" 
+        "    STR     R0, [SP, #0x10] \n" 
+        "loc_FF0C0E44:\n"
+        "    LDR     R0, [R6, #0x20] \n" 
+        "    MOV     R2, #0 \n" 
+        "    ADD     R1, SP, #0x20 \n" 
+        "    BL      sub_FF02B314 \n" 
+        "    LDR     R0, [SP, #0x10] \n" 
+        "    CMP     R0, #1 \n" 
+        "    BNE     loc_FF0C0E90 \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    LDR     R0, [R0] \n" 
+        "    CMP     R0, #0x14 \n" 
+        "    CMPNE   R0, #0x15 \n" 
+        "    CMPNE   R0, #0x16 \n" 
+        "    CMPNE   R0, #0x17 \n" 
+        "    BEQ     loc_FF0C0FF0 \n" 
+        "    CMP     R0, #0x29 \n" 
+        "    BEQ     loc_FF0C0F78 \n" 
+        "    ADD     R1, SP, #0x10 \n" 
+        "    MOV     R0, #0 \n" 
+        "    BL      sub_FF0C0DD4 \n" 
+        "loc_FF0C0E90:\n"
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    LDR     R1, [R0] \n" 
+        "    CMP     R1, #0x2F \n" 
+        "    BNE     loc_FF0C0EBC \n" 
+        "    BL      sub_FF0C2254 \n" 
+        "    LDR     R0, [R6, #0x1C] \n" 
+        "    MOV     R1, #1 \n" 
+        "    BL      sub_FF081D00 \n" 
+        "    BL      sub_FF00ED74 \n" 
+        "    ADD     SP, SP, #0x24 \n" 
+        "    LDMFD   SP!, {R4-R9,PC} \n" 
+        "loc_FF0C0EBC:\n"
+        "    CMP     R1, #0x2E \n" 
+        "    BNE     loc_FF0C0ED8 \n" 
+        "    LDR     R2, [R0, #0x8C]! \n" 
+        "    LDR     R1, [R0, #4] \n" 
+        "    MOV     R0, R1 \n" 
+        "    BLX     R2 \n" 
+        "    B       loc_FF0C1480 \n" 
+        "loc_FF0C0ED8:\n"
+        "    CMP     R1, #0x27 \n" 
+        "    BNE     loc_FF0C0F28 \n" 
+        "    LDR     R0, [R6, #0x1C] \n" 
+        "    MOV     R1, #0x80 \n" 
+        "    BL      sub_FF081D34 \n" 
+        "    LDR     R0, =0xFF0BBDD8 \n" 
+        "    MOV     R1, #0x80 \n" 
+        "    BL      sub_FF17C4A8 \n" 
+        "    LDR     R0, [R6, #0x1C] \n" 
+        "    MOV     R2, R7 \n" 
+        "    MOV     R1, #0x80 \n" 
+        "    BL      sub_FF081C40 \n" 
+        "    TST     R0, #1 \n" 
+        "    LDRNE   R1, =0x151F \n" 
+        "    BNE     loc_FF0C0FE4 \n" 
+        "loc_FF0C0F14:\n"
+        "    LDR     R1, [SP, #0x20] \n" 
+        "    LDR     R0, [R1, #0x90] \n" 
+        "    LDR     R1, [R1, #0x8C] \n" 
+        "    BLX     R1 \n" 
+        "    B       loc_FF0C1480 \n" 
+        "loc_FF0C0F28:\n"
+        "    CMP     R1, #0x28 \n" 
+        "    BNE     loc_FF0C0F70 \n" 
+        "    ADD     R1, SP, #0x10 \n" 
+        "    BL      sub_FF0C0DD4 \n" 
+        "    LDR     R0, [R6, #0x1C] \n" 
+        "    MOV     R1, #0x100 \n" 
+        "    BL      sub_FF081D34 \n" 
+        "    LDR     R0, =0xFF0BBDE8 \n" 
+        "    MOV     R1, #0x100 \n" 
+        "    BL      sub_FF17C860 \n" 
+        "    LDR     R0, [R6, #0x1C] \n" 
+        "    MOV     R2, R7 \n" 
+        "    MOV     R1, #0x100 \n" 
+        "    BL      sub_FF081C40 \n" 
+        "    TST     R0, #1 \n" 
+        "    BEQ     loc_FF0C0F14 \n" 
+        "    LDR     R1, =0x1529 \n" 
+        "    B       loc_FF0C0FE4 \n" 
+        "loc_FF0C0F70:\n"
+        "    CMP     R1, #0x29 \n" 
+        "    BNE     loc_FF0C0F88 \n" 
+        "loc_FF0C0F78:\n"
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    ADD     R1, SP, #0x10 \n" 
+        "    BL      sub_FF0C0DD4 \n" 
+        "    B       loc_FF0C0F14 \n" 
+        "loc_FF0C0F88:\n"
+        "    CMP     R1, #0x2C \n" 
+        "    BNE     loc_FF0C0FA0 \n" 
+        "    BL      sub_FF0ACB90 \n" 
+        "    BL      sub_FF0AD864 \n" 
+        "    BL      sub_FF0AD3C8 \n" 
+        "    B       loc_FF0C0F14 \n" 
+        "loc_FF0C0FA0:\n"
+        "    CMP     R1, #0x2D \n" 
+        "    BNE     loc_FF0C0FF0 \n" 
+        "    LDR     R0, [R6, #0x1C] \n" 
+        "    MOV     R1, #4 \n" 
+        "    BL      sub_FF081D34 \n" 
+        "    LDR     R1, =0xFF0BBE08 \n" 
+        "    LDR     R0, =0xFFFFF400 \n" 
+        "    MOV     R2, #4 \n" 
+        "    BL      sub_FF0AC5E0 \n" 
+        "    BL      sub_FF0AC870 \n" 
+        "    LDR     R0, [R6, #0x1C] \n" 
+        "    MOV     R2, R7 \n" 
+        "    MOV     R1, #4 \n" 
+        "    BL      sub_FF081B5C \n" 
+        "    TST     R0, #1 \n" 
+        "    BEQ     loc_FF0C0F14 \n" 
+        "    LDR     R1, =0x1551 \n" 
+        "loc_FF0C0FE4:\n"
+        "    LDR     R0, =0xFF0BC598 \n" // **"ExpDrv.c"
+        //"    BL      sub_FF00EDBC \n" // original 
+        "    BL      _DebugAssert \n"
+        "    B       loc_FF0C0F14 \n" 
+        "loc_FF0C0FF0:\n"
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    MOV     R8, #1 \n" 
+        "    LDR     R1, [R0] \n" 
+        "    CMP     R1, #0x12 \n" 
+        "    CMPNE   R1, #0x13 \n" 
+        "    BNE     loc_FF0C1058 \n" 
+        "    LDR     R1, [R0, #0x7C] \n" 
+        "    ADD     R1, R1, R1, LSL #1 \n" 
+        "    ADD     R1, R0, R1, LSL #2 \n" 
+        "    SUB     R1, R1, #8 \n" 
+        "    LDMIA   R1, {R2,R3,R9} \n" 
+        "    STMIA   R5, {R2,R3,R9} \n" 
+        "    BL      sub_FF0BEFE8 \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    LDR     R1, [R0, #0x7C] \n" 
+        "    LDR     R3, [R0, #0x8C] \n" 
+        "    LDR     R2, [R0, #0x90] \n" 
+        "    ADD     R0, R0, #4 \n" 
+        "    BLX     R3 \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    BL      sub_FF0C2664 \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    LDR     R1, [R0, #0x7C] \n" 
+        "    LDR     R2, [R0, #0x98] \n" 
+        "    LDR     R3, [R0, #0x94] \n" 
+        "    B       loc_FF0C136C \n" 
+        "loc_FF0C1058:\n"
+        "    CMP     R1, #0x14 \n" 
+        "    CMPNE   R1, #0x15 \n" 
+        "    CMPNE   R1, #0x16 \n" 
+        "    CMPNE   R1, #0x17 \n" 
+        "    BNE     loc_FF0C1110 \n" 
+        "    ADD     R3, SP, #0x10 \n" 
+        "    ADD     R2, SP, #4 \n" 
+        "    ADD     R1, SP, #0x14 \n" 
+        "    BL      sub_FF0BF250 \n" 
+        "    CMP     R0, #1 \n" 
+        "    MOV     R9, R0 \n" 
+        "    CMPNE   R9, #5 \n" 
+        "    BNE     loc_FF0C10AC \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    MOV     R2, R9 \n" 
+        "    LDR     R1, [R0, #0x7C]! \n" 
+        "    LDR     R12, [R0, #0x10]! \n" 
+        "    LDR     R3, [R0, #4] \n" 
+        "    ADD     R0, SP, #4 \n" 
+        "    BLX     R12 \n" 
+        "    B       loc_FF0C10E4 \n" 
+        "loc_FF0C10AC:\n"
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    CMP     R9, #2 \n" 
+        "    LDR     R3, [R0, #0x90] \n" 
+        "    CMPNE   R9, #6 \n" 
+        "    BNE     loc_FF0C10F8 \n" 
+        "    LDR     R12, [R0, #0x8C] \n" 
+        "    MOV     R2, R9 \n" 
+        "    MOV     R1, #1 \n" 
+        "    ADD     R0, SP, #4 \n" 
+        "    BLX     R12 \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    ADD     R2, SP, #4 \n" 
+        "    ADD     R1, SP, #0x14 \n" 
+        "    BL      sub_FF0C0AC4 \n" 
+        "loc_FF0C10E4:\n"
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    LDR     R2, [SP, #0x10] \n" 
+        "    MOV     R1, R9 \n" 
+        "    BL      sub_FF0C0D74 \n" 
+        "    B       loc_FF0C1374 \n" 
+        "loc_FF0C10F8:\n"
+        "    LDR     R1, [R0, #0x7C] \n" 
+        "    LDR     R12, [R0, #0x8C] \n" 
+        "    MOV     R2, R9 \n" 
+        "    ADD     R0, R0, #4 \n" 
+        "    BLX     R12 \n" 
+        "    B       loc_FF0C1374 \n" 
+        "loc_FF0C1110:\n"
+        "    CMP     R1, #0x23 \n" 
+        "    CMPNE   R1, #0x24 \n" 
+        "    BNE     loc_FF0C115C \n" 
+        "    LDR     R1, [R0, #0x7C] \n" 
+        "    ADD     R1, R1, R1, LSL #1 \n" 
+        "    ADD     R1, R0, R1, LSL #2 \n" 
+        "    SUB     R1, R1, #8 \n" 
+        "    LDMIA   R1, {R2,R3,R9} \n" 
+        "    STMIA   R5, {R2,R3,R9} \n" 
+        "    BL      sub_FF0BDD58 \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    LDR     R1, [R0, #0x7C] \n" 
+        "    LDR     R3, [R0, #0x8C] \n" 
+        "    LDR     R2, [R0, #0x90] \n" 
+        "    ADD     R0, R0, #4 \n" 
+        "    BLX     R3 \n" 
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    BL      sub_FF0BE22C \n" 
+        "    B       loc_FF0C1374 \n" 
+        "loc_FF0C115C:\n"
+        "    ADD     R1, R0, #4 \n" 
+        "    LDMIA   R1, {R2,R3,R9} \n" 
+        "    STMIA   R5, {R2,R3,R9} \n" 
+        "    LDR     R1, [R0] \n" 
+        "    CMP     R1, #0x27 \n" 
+        "    ADDCC   PC, PC, R1, LSL #2 \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C1214 \n" 
+        "    B       loc_FF0C1214 \n" 
+        "    B       loc_FF0C121C \n" 
+        "    B       loc_FF0C1224 \n" 
+        "    B       loc_FF0C1224 \n" 
+        "    B       loc_FF0C1224 \n" 
+        "    B       loc_FF0C1214 \n" 
+        "    B       loc_FF0C121C \n" 
+        "    B       loc_FF0C1224 \n" 
+        "    B       loc_FF0C1224 \n" 
+        "    B       loc_FF0C123C \n" 
+        "    B       loc_FF0C123C \n" 
+        "    B       loc_FF0C1348 \n" 
+        "    B       loc_FF0C1350 \n" 
+        "    B       loc_FF0C1350 \n" 
+        "    B       loc_FF0C1350 \n" 
+        "    B       loc_FF0C1350 \n" 
+        "    B       loc_FF0C1358 \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C122C \n" 
+        "    B       loc_FF0C1234 \n" 
+        "    B       loc_FF0C1234 \n" 
+        "    B       loc_FF0C1248 \n" 
+        "    B       loc_FF0C1248 \n" 
+        "    B       loc_FF0C1250 \n" 
+        "    B       loc_FF0C1288 \n" 
+        "    B       loc_FF0C12C0 \n" 
+        "    B       loc_FF0C12F8 \n" 
+        "    B       loc_FF0C1330 \n" 
+        "    B       loc_FF0C1330 \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C135C \n" 
+        "    B       loc_FF0C1338 \n" 
+        "    B       loc_FF0C1340 \n" 
+        "loc_FF0C1214:\n" // jump table entries 0,1,6
+        "    BL      sub_FF0BC3CC \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C121C:\n"  // jump table entries 2,7
+        "    BL      sub_FF0BC6C4 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1224:\n"  // jump table entries 3-5,8,9
+        "    BL      sub_FF0BC92C \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C122C:\n" // jump table entries 24
+        "    BL      sub_FF0BCC20 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1234:\n" // jump table entries 25,26
+        "    BL      sub_FF0BCE38 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C123C:\n"  // jump table entries 10,11
+        //"    BL      sub_FF0BD2F4 \n" // original
+        "    BL      sub_FF0BD2F4_my \n" // patched
+        "    MOV     R8, #0 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1248:\n" // jump table entries 27,28
+        "    BL      sub_FF0BD4CC \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1250:\n" // jump table entries 29
+        "    LDRH    R1, [R0, #4] \n" 
+        "    STRH    R1, [SP, #0x14] \n" 
+        "    LDRH    R1, [R4, #2] \n" 
+        "    STRH    R1, [SP, #0x16] \n" 
+        "    LDRH    R1, [R4, #4] \n" 
+        "    STRH    R1, [SP, #0x18] \n" 
+        "    LDRH    R1, [R4, #6] \n" 
+        "    STRH    R1, [SP, #0x1A] \n" 
+        "    LDRH    R1, [R0, #0xC] \n" 
+        "    STRH    R1, [SP, #0x1C] \n" 
+        "    LDRH    R1, [R4, #0xA] \n" 
+        "    STRH    R1, [SP, #0x1E] \n" 
+        "    BL      sub_FF0C22E8 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1288:\n" // jump table entries 30
+        "    LDRH    R1, [R0, #4] \n" 
+        "    STRH    R1, [SP, #0x14] \n" 
+        "    LDRH    R1, [R4, #2] \n" 
+        "    STRH    R1, [SP, #0x16] \n" 
+        "    LDRH    R1, [R4, #4] \n" 
+        "    STRH    R1, [SP, #0x18] \n" 
+        "    LDRH    R1, [R4, #6] \n" 
+        "    STRH    R1, [SP, #0x1A] \n" 
+        "    LDRH    R1, [R4, #8] \n" 
+        "    STRH    R1, [SP, #0x1C] \n" 
+        "    LDRH    R1, [R4, #0xA] \n" 
+        "    STRH    R1, [SP, #0x1E] \n" 
+        "    BL      sub_FF0C2464 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C12C0:\n" // jump table entries 31
+        "    LDRH    R1, [R4] \n" 
+        "    STRH    R1, [SP, #0x14] \n" 
+        "    LDRH    R1, [R0, #6] \n" 
+        "    STRH    R1, [SP, #0x16] \n" 
+        "    LDRH    R1, [R4, #4] \n" 
+        "    STRH    R1, [SP, #0x18] \n" 
+        "    LDRH    R1, [R4, #6] \n" 
+        "    STRH    R1, [SP, #0x1A] \n" 
+        "    LDRH    R1, [R4, #8] \n" 
+        "    STRH    R1, [SP, #0x1C] \n" 
+        "    LDRH    R1, [R4, #0xA] \n" 
+        "    STRH    R1, [SP, #0x1E] \n" 
+        "    BL      sub_FF0C2518 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C12F8:\n" // jump table entries 32
+        "    LDRH    R1, [R4] \n" 
+        "    STRH    R1, [SP, #0x14] \n" 
+        "    LDRH    R1, [R4, #2] \n" 
+        "    STRH    R1, [SP, #0x16] \n" 
+        "    LDRH    R1, [R4, #4] \n" 
+        "    STRH    R1, [SP, #0x18] \n" 
+        "    LDRH    R1, [R4, #6] \n" 
+        "    STRH    R1, [SP, #0x1A] \n" 
+        "    LDRH    R1, [R0, #0xC] \n" 
+        "    STRH    R1, [SP, #0x1C] \n" 
+        "    LDRH    R1, [R4, #0xA] \n" 
+        "    STRH    R1, [SP, #0x1E] \n" 
+        "    BL      sub_FF0C25C0 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1330:\n" // jump table entries 33,34
+        "    BL      sub_FF0BDB0C \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1338:\n" // jump table entries 37
+        "    BL      sub_FF0BE330 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1340:\n" // jump table entries 38
+        "    BL      sub_FF0BE890 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1348:\n"  // jump table entries 12
+        "    BL      sub_FF0BEAB4 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1350:\n" // jump table entries 13-16
+        "    BL      sub_FF0BEC70 \n" 
+        "    B       loc_FF0C135C \n" 
+        "loc_FF0C1358:\n" // jump table entries 17
+        "    BL      sub_FF0BEDE0 \n" 
+        "loc_FF0C135C:\n" // jump table default entry
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    LDR     R1, [R0, #0x7C] \n" 
+        "    LDR     R2, [R0, #0x90] \n" 
+        "    LDR     R3, [R0, #0x8C] \n" 
+        "loc_FF0C136C:\n"
+        "    ADD     R0, R0, #4 \n" 
+        "    BLX     R3 \n" 
+        "loc_FF0C1374:\n"
+        "    LDR     R1, [SP, #0x20] \n" 
+        "    LDR     R0, [R1] \n" 
+        "    CMP     R0, #0x10 \n" 
+        "    BEQ     loc_FF0C13AC \n" 
+        "    BGT     loc_FF0C139C \n" 
+        "    CMP     R0, #1 \n" 
+        "    CMPNE   R0, #4 \n" 
+        "    CMPNE   R0, #0xE \n" 
+        "    BNE     loc_FF0C13BC \n" 
+        "    B       loc_FF0C13AC \n" 
+        "loc_FF0C139C:\n"
+        "    CMP     R0, #0x13 \n" 
+        "    CMPNE   R0, #0x17 \n" 
+        "    CMPNE   R0, #0x1A \n" 
+        "    BNE     loc_FF0C13BC \n" 
+        "loc_FF0C13AC:\n"
+        "    LDRH    R0, [R4] \n" 
+        "    STRH    R0, [SP, #0x14] \n" 
+        "    LDRH    R0, [R4, #8] \n" 
+        "    STRH    R0, [SP, #0x1C] \n" 
+        "loc_FF0C13BC:\n"
+        "    CMP     R8, #1 \n" 
+        "    BNE     loc_FF0C1408 \n" 
+        "    LDR     R0, [R1, #0x7C] \n" 
+        "    MOV     R2, #0xC \n" 
+        "    ADD     R0, R0, R0, LSL #1 \n" 
+        "    ADD     R0, R1, R0, LSL #2 \n" 
+        "    SUB     R8, R0, #8 \n" 
+        "    LDR     R0, =0x58390 \n" 
+        "    ADD     R1, SP, #0x14 \n" 
+        "    BL      sub_FF3A2ACC \n" // diff from 100b - sub_FF3A2A8C
+        "    LDR     R0, =0x5839C \n" 
+        "    MOV     R2, #0xC \n" 
+        "    ADD     R1, SP, #0x14 \n" 
+        "    BL      sub_FF3A2ACC \n" // diff from 100b - sub_FF3A2A8C
+        "    LDR     R0, =0x583A8 \n" 
+        "    MOV     R2, #0xC \n" 
+        "    MOV     R1, R8 \n" 
+        "    BL      sub_FF3A2ACC \n" // diff from 100b - sub_FF3A2A8C
+        "    B       loc_FF0C1480 \n" 
+        "loc_FF0C1408:\n"
+        "    LDR     R0, [R1] \n" 
+        "    MOV     R3, #1 \n" 
+        "    CMP     R0, #0xB \n" 
+        "    BNE     loc_FF0C144C \n" 
+        "    MOV     R2, #0 \n" 
+        "    STRD    R2, [SP] \n" 
+        "    MOV     R2, R3 \n" 
+        "    MOV     R1, R3 \n" 
+        "    MOV     R0, #0 \n" 
+        "    BL      sub_FF0BC1A0 \n" 
+        "    MOV     R3, #1 \n" 
+        "    MOV     R2, #0 \n" 
+        "    STRD    R2, [SP] \n" 
+        "    MOV     R2, R3 \n" 
+        "    MOV     R1, R3 \n" 
+        "    MOV     R0, #0 \n" 
+        "    B       loc_FF0C147C \n" 
+        "loc_FF0C144C:\n"
+        "    MOV     R2, #1 \n" 
+        "    STRD    R2, [SP] \n" 
+        "    MOV     R3, R2 \n" 
+        "    MOV     R1, R2 \n" 
+        "    MOV     R0, R2 \n" 
+        "    BL      sub_FF0BC1A0 \n" 
+        "    MOV     R3, #1 \n" 
+        "    MOV     R2, R3 \n" 
+        "    MOV     R1, R3 \n" 
+        "    MOV     R0, R3 \n" 
+        "    STR     R3, [SP] \n" 
+        "    STR     R3, [SP, #4] \n" 
+        "loc_FF0C147C:\n"
+        "    BL      sub_FF0BC318 \n" 
+        "loc_FF0C1480:\n"
+        "    LDR     R0, [SP, #0x20] \n" 
+        "    BL      sub_FF0C2254 \n" 
+        "    B       loc_FF0C0E44 \n" 
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF0BD2F4_my()
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) sub_FF0BD2F4_my() {
+// FF0BD2F4
+    asm volatile (
+        "    STMFD   SP!, {R4-R8,LR} \n" 
+        "    LDR     R7, =0x42D0 \n" 
+        "    MOV     R4, R0 \n" 
+        "    LDR     R0, [R7, #0x1C] \n" 
+        "    MOV     R1, #0x3E \n" 
+        "    BL      sub_FF081D34 \n" 
+        "    MOV     R2, #0 \n" 
+        "    LDRSH   R0, [R4, #4] \n" 
+        "    MOV     R1, R2 \n" 
+        "    BL      sub_FF0BBE68 \n" 
+        "    MOV     R5, R0 \n" 
+        "    LDRSH   R0, [R4, #6] \n" 
+        "    BL      sub_FF0BBFB8 \n" 
+        "    LDRSH   R0, [R4, #8] \n" 
+        "    BL      sub_FF0BC010 \n" 
+        "    LDRSH   R0, [R4, #0xA] \n" 
+        "    BL      sub_FF0BC068 \n" 
+        "    LDRSH   R0, [R4, #0xC] \n" 
+        "    MOV     R1, #0 \n" 
+        "    BL      sub_FF0BC0C0 \n" 
+        "    MOV     R6, R0 \n" 
+        "    LDRSH   R0, [R4, #0xE] \n" 
+        "    BL      sub_FF0C2284 \n" 
+        "    LDR     R0, [R4] \n" 
+        "    LDR     R8, =0x583A8 \n" 
+        "    CMP     R0, #0xB \n" 
+        "    MOVEQ   R5, #0 \n" 
+        "    MOVEQ   R6, R5 \n" 
+        "    BEQ     loc_FF0BD390 \n" 
+        "    CMP     R5, #1 \n" 
+        "    BNE     loc_FF0BD390 \n" 
+        "    LDRSH   R0, [R4, #4] \n" 
+        "    LDR     R1, =0xFF0BBDC8 \n" 
+        "    MOV     R2, #2 \n" 
+        "    BL      sub_FF17C5FC \n" 
+        "    STRH    R0, [R4, #4] \n" 
+        "    MOV     R0, #0 \n" 
+        "    STR     R0, [R7, #0x28] \n" 
+        "    B       loc_FF0BD398 \n" 
+        "loc_FF0BD390:\n"
+        "    LDRH    R0, [R8] \n" 
+        "    STRH    R0, [R4, #4] \n" 
+        "loc_FF0BD398:\n"
+        "    CMP     R6, #1 \n" 
+        "    LDRNEH  R0, [R8, #8] \n" 
+        "    BNE     loc_FF0BD3B4 \n" 
+        "    LDRSH   R0, [R4, #0xC] \n" 
+        "    LDR     R1, =0xFF0BBE4C \n" 
+        "    MOV     R2, #0x20 \n" 
+        "    BL      sub_FF0C22A4 \n" 
+        "loc_FF0BD3B4:\n"
+        "    STRH    R0, [R4, #0xC] \n" 
+        "    LDRSH   R0, [R4, #6] \n" 
+        //"    BL      sub_FF0AC8DC \n" // original
+        "    BL      sub_FF0AC8DC_my \n" // patched
+        "    B       sub_FF0BD3C0 \n" // continue in firmware
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF0AC8DC_my()
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) sub_FF0AC8DC_my() {
+// FF0AC8DC
+    asm volatile (
+        "    STMFD   SP!, {R4-R6,LR} \n" 
+        "    LDR     R5, =0x3F6C \n" 
+        "    MOV     R4, R0 \n" 
+        "    LDR     R0, [R5, #4] \n" 
+        "    CMP     R0, #1 \n" 
+        "    LDRNE   R1, =0x14D \n" 
+        "    LDRNE   R0, =0xFF0AC714 \n" 
+        //"    BLNE    sub_FF00EDBC \n" // original
+        "    BLNE    _DebugAssert \n"
+        "    CMN     R4, #0xC00 \n" 
+        "    LDREQSH R4, [R5, #2] \n" 
+        "    CMN     R4, #0xC00 \n" 
+        "    LDREQ   R1, =0x153 \n" 
+        "    LDREQ   R0, =0xFF0AC714 \n" 
+        "    STRH    R4, [R5, #2] \n" 
+        //"    BLEQ    sub_FF00EDBC \n" // original
+        "    BLEQ    _DebugAssert \n"
+        "    MOV     R0, R4 \n" 
+        //"    BL      sub_FF236124\n" // original -- diff from 100b - sub_FF236100
+        "    BL      apex2us \n" // patched
+        "    B       sub_FF0AC920 \n" // continue in firmware
+    );
+}
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_entry.S
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_entry.S	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_entry.S	(revision 1937)
@@ -0,0 +1,238 @@
+// !!! THIS FILE IS GENERATED. DO NOT EDIT. !!!
+#include "stubs_asm.h"
+
+// Camera info:
+//   DRYOS R49 (DRYOS version 2.3, release #0049)
+//   Firmware Ver GM1.00E
+//   Canon IXUS 230 HS
+
+// Values for makefile.inc
+//   PLATFORMID = 12855 (0x3237) // Found @ 0xfff40040
+//   MAXRAMADDR = 0x07ffffff
+//   KEYSYS = d4c                // Found @ 0xffff360c
+//   NEED_ENCODED_DISKBOOT = 7   // Found @ 0xffff361c
+
+// Stubs below should be checked. Stub not matched 100%, or difference found to current 'stubs_entry_2.S'
+//    Name                                     Address      Rule  %  Comp to stubs_entry_2.S
+NSTUB(kbd_pwr_off                             ,0xff057fc8) //  2 60%
+// ERROR: kbd_pwr_on is not found.                         //--- ---    *** != 0x00000000
+
+// Check of modemap from 'platform/CAMERA/shooting.c':
+// Firmware modemap table found @ff0931a8 -> ff08fab8 -> ff1b3bd0 -> ff301264 -> ff457cb8
+// No problems found with modemap table.
+
+// Values below can be overridden in 'stubs_min.S':
+DEF(physw_status                            ,0x00034108) // Found @0xff025814
+DEF(physw_run                               ,0x00001c4c) // Found @0xff0253ac
+DEF(levent_table                            ,0xff3f7e40) // Found @0xff3f7e40
+DEF(FlashParamsTable                        ,0xff457f10) // Found @0xff457f10
+DEF(movie_status                            ,0x00006d04) // Found @0xff1854e0
+DEF(full_screen_refresh                     ,0x00009a2c) // Found @0xff22fce0
+DEF(canon_menu_active                       ,0x00003284) // Found @0xff08ae14
+DEF(canon_shoot_menu_active                 ,0x000083bd) // Found @0xff1d0b64
+DEF(playrec_mode                            ,0x00002fb0) // Found @0xff07cb48
+DEF(zoom_status                             ,0x0000dacc) // Found @0xff304b78
+// focus_len_table contains zoom focus lengths for use in 'get_focal_length' (main.c).
+// each entry contains 2 int value(s), the first is the zoom focus length.
+// there are 127 entries in the table - set NUM_FL to 127
+DEF(focus_len_table                         ,0xfff4abc8) // Found @0xfff4abc8
+DEF(zoom_busy                               ,0x00006ba0) // Found @0xff17f438
+DEF(focus_busy                              ,0x00006a40) // Found @0xff17aa94
+DEF(recreview_hold                          ,0x000038ec) // Found @0xff09a5d4
+DEF(palette_control                         ,0x00009a2c) // Found @0xff22fc5c
+DEF(active_palette_buffer                   ,0x00009a34) // Found @0xff22fc60
+DEF(palette_buffer                          ,0x000b9c80) // Found @0xff230128
+DEF(bitmap_buffer                           ,0x00009a70) // Found @0xff23396c
+DEF(active_bitmap_buffer                    ,0x00009a68) // Found @0xff233970
+
+// Values below go in 'lib.c':
+//void *vid_get_bitmap_fb()        { return (void*)0x40471000; }             // Found @0xff053204
+//void *vid_get_viewport_fb()      { return (void*)0x405c6b80; }             // Found @0xff365694
+//void *vid_get_viewport_fb_d()    { return (void*)(*(int*)(0x2c58+0x58)); } // Found @0xff06c234 & 0xff06c26c
+//char *camera_jpeg_count_str()    { return (char*)0x000b9574; }             // Found @0xff2263bc
+//long hook_raw_size()             { return 0x0123eaf0; }                    // Found @0xff3684dc
+//int get_flash_params_count(void) { return 0x9f; }                          // Found @0xff1b4c80
+
+// Bitmap masks and physw_status index values for SD_READONLY and USB power flags (for kbd.c).
+//#define SD_READONLY_FLAG    0x00020000 // Found @0xff3a8090, levent 0x20a
+//#define SD_READONLY_IDX     2
+//#define USB_MASK            0x04000000 // Found @0xff3a80b0, levent 0x202
+//#define USB_IDX             2
+
+// Keymap values for kbd.c. Additional keys may be present, only common values included here.
+//static KeyMap keymap[] = {
+//    { 2, KEY_SHOOT_FULL      ,0x00000300 }, // Found @0xff3a8058, levent 0x01
+//    { 2, KEY_SHOOT_FULL_ONLY ,0x00000200 }, // Found @0xff3a8058, levent 0x01
+//    { 2, KEY_SHOOT_HALF      ,0x00000100 }, // Found @0xff3a8050, levent 0x00
+//    { 2, KEY_MENU            ,0x00000001 }, // Found @0xff3a8010, levent 0x09
+//    { 2, KEY_SET             ,0x00000002 }, // Found @0xff3a8018, levent 0x08
+//    { 2, KEY_ZOOM_IN         ,0x00000004 }, // Found @0xff3a8020, levent 0x02
+//    { 2, KEY_ZOOM_OUT        ,0x00000008 }, // Found @0xff3a8028, levent 0x03
+//    { 2, KEY_LEFT            ,0x00000010 }, // Found @0xff3a8030, levent 0x06
+//    { 2, KEY_RIGHT           ,0x00000020 }, // Found @0xff3a8038, levent 0x07
+//    { 2, KEY_DOWN            ,0x00000040 }, // Found @0xff3a8040, levent 0x05
+//    { 2, KEY_UP              ,0x00000080 }, // Found @0xff3a8048, levent 0x04
+//    { 0, 0, 0 }
+//};
+
+// Values below go in 'platform_camera.h':
+//#define CAM_DRYOS         1
+//#define CAM_DRYOS_2_3_R39 1 // Defined for cameras with DryOS version R39 or higher
+//#define CAM_DRYOS_2_3_R47 1 // Defined for cameras with DryOS version R47 or higher
+//#define CAM_RAW_ROWPIX    4168 // Found @0xff14d678
+//#define CAM_RAW_ROWS      3060 // Found @0xff14d684
+//#undef  CAM_UNCACHED_BIT
+//#define CAM_UNCACHED_BIT  0x40000000 // Found @0xff02be50
+
+// Misc stuff
+DEF(ctypes, 0xff3a6852)
+
+// For capt_seq.c
+//static long *nrflag = (long*)(0x9b44+0x00);  // Found @ ff23c26c & ff23c2f4
+//#define NR_AUTO (0)                          // have to explictly reset value back to 0 to enable auto
+
+// Stubs below matched 100%.
+//    Name                                     Address                Comp to stubs_entry_2.S
+NSTUB(AllocateMemory                          ,0xff2efd74) //101
+NSTUB(AllocateUncacheableMemory               ,0xff02be08) //112
+NSTUB(Close                                   ,0xff028024) //101
+NSTUB(CreateTask                              ,0xff00eae4) //101
+NSTUB(DebugAssert                             ,0xff00edbc) //111
+NSTUB(DeleteDirectory_Fut                     ,0xff027a20) //  1
+NSTUB(DeleteFile_Fut                          ,0xff02793c) //112
+NSTUB(DoAFLock                                ,0xff0298cc) //102
+NSTUB(EnterToCompensationEVF                  ,0xff029b2c) //104
+NSTUB(ExecuteEventProcedure                   ,0xff0862bc) //  1
+NSTUB(ExitFromCompensationEVF                 ,0xff029b70) //104
+NSTUB(ExitTask                                ,0xff00ed74) //101
+NSTUB(ExpCtrlTool_StartContiAE                ,0xff037a8c) //104
+NSTUB(ExpCtrlTool_StopContiAE                 ,0xff037b6c) //104
+NSTUB(Fclose_Fut                              ,0xff027ab8) //101
+NSTUB(Feof_Fut                                ,0xff027ca4) //  1
+NSTUB(Fflush_Fut                              ,0xff027ce0) //  1
+NSTUB(Fgets_Fut                               ,0xff027c0c) //  6
+NSTUB(Fopen_Fut                               ,0xff027a78) //101
+NSTUB(Fread_Fut                               ,0xff027b64) //101
+NSTUB(FreeMemory                              ,0xff2efd6c) //101
+NSTUB(FreeUncacheableMemory                   ,0xff02be48) //112
+NSTUB(Fseek_Fut                               ,0xff027c58) //101
+NSTUB(Fwrite_Fut                              ,0xff027bb8) //101
+NSTUB(GetBatteryTemperature                   ,0xff05b944) //102
+NSTUB(GetCCDTemperature                       ,0xff05b8d0) //102
+NSTUB(GetCurrentAvValue                       ,0xff17c8dc) //102
+NSTUB(GetDrive_ClusterSize                    ,0xff069cb0) //  6
+NSTUB(GetDrive_FreeClusters                   ,0xff069d08) //  6
+NSTUB(GetDrive_TotalClusters                  ,0xff069ce0) //  6
+NSTUB(GetFocusLensSubjectDistance             ,0xff17b810) //102
+NSTUB(GetFocusLensSubjectDistanceFromLens     ,0xff17bc60) //  3
+NSTUB(GetImageFolder                          ,0xff156c74) //  6
+NSTUB(GetKbdState                             ,0xff057fb0) //109
+NSTUB(GetMemInfo                              ,0xff00a2ac) //  3
+NSTUB(GetOpticalTemperature                   ,0xff05b9b8) //102
+NSTUB(GetParameterData                        ,0xff1b4c40) //101
+NSTUB(GetPropertyCase                         ,0xff08a35c) //102
+NSTUB(GetSystemTime                           ,0xff2efdcc) //101
+NSTUB(GetZoomLensCurrentPoint                 ,0xff17f8b0) //102
+NSTUB(GetZoomLensCurrentPosition              ,0xff2dbd18) //102
+NSTUB(GiveSemaphore                           ,0xff02b800) //112
+NSTUB(IsStrobeChargeCompleted                 ,0xff0de288) //102
+NSTUB(LEDDrive                                ,0xff057508) //101
+NSTUB(LocalTime                               ,0xff083b54) //  6
+NSTUB(LockMainPower                           ,0xff08f6b0) //103
+NSTUB(Lseek                                   ,0xff028240) //101
+NSTUB(MakeDirectory_Fut                       ,0xff0279b0) //  6
+NSTUB(MakeSDCardBootable                      ,0xff069f40) //105
+NSTUB(MoveFocusLensToDistance                 ,0xff3618d4) //102
+NSTUB(MoveIrisWithAv                          ,0xff2ec0d8) //102
+NSTUB(MoveZoomLensWithPoint                   ,0xff2ec80c) //102
+NSTUB(NewTaskShell                            ,0xff089cdc) //101
+NSTUB(Open                                    ,0xff027f5c) //101
+NSTUB(PB2Rec                                  ,0xff0927cc) //104
+NSTUB(PT_MoveDigitalZoomToWide                ,0xff073c5c) //102
+NSTUB(PT_MoveOpticalZoomAt                    ,0xff073c34) //102
+NSTUB(PT_PlaySound                            ,0xff07e868) //  6
+NSTUB(PostLogicalEventForNotPowerType         ,0xff08eda4) //103
+NSTUB(PostLogicalEventToUI                    ,0xff08edf0) //103
+NSTUB(PutInNdFilter                           ,0xff2ec5e4) //102
+NSTUB(PutOutNdFilter                          ,0xff2ec608) //102
+NSTUB(Read                                    ,0xff00ad68) //101
+NSTUB(ReadFastDir                             ,0xff2c99f8) //  6
+NSTUB(Rec2PB                                  ,0xff09280c) //104
+NSTUB(RefreshPhysicalScreen                   ,0xff0a6da4) //104
+NSTUB(Remove                                  ,0xff028198) //  6
+NSTUB(RenameFile_Fut                          ,0xff0278a8) //  6
+NSTUB(Restart                                 ,0xff02d620) //106
+NSTUB(ScreenLock                              ,0xff0a7f9c) //  4
+NSTUB(ScreenUnlock                            ,0xff0a8000) //  3
+NSTUB(SetAE_ShutterSpeed                      ,0xff36480c) //102
+NSTUB(SetAutoShutdownTime                     ,0xff08f724) //103
+NSTUB(SetCurrentCaptureModeType               ,0xff097c44) //101
+NSTUB(SetFileAttributes                       ,0xff028428) //  6
+NSTUB(SetFileTimeStamp                        ,0xff0283b0) //  6
+NSTUB(SetLogicalEventActive                   ,0xff08f42c) //101
+NSTUB(SetParameterData                        ,0xff1b4bb0) //101
+NSTUB(SetPropertyCase                         ,0xff08a1d4) //102
+NSTUB(SetScriptMode                           ,0xff08f47c) //101
+NSTUB(SleepTask                               ,0xff02baac) //101
+NSTUB(TakeSemaphore                           ,0xff02b730) //101
+NSTUB(TurnOffBackLight                        ,0xff09f01c) //104
+NSTUB(TurnOnBackLight                         ,0xff09f004) //104
+NSTUB(UIFS_WriteFirmInfoToFile                ,0xff1a1c40) //101
+NSTUB(UnlockAF                                ,0xff029904) //102
+NSTUB(UnlockMainPower                         ,0xff08f604) //103
+NSTUB(VbattGet                                ,0xff023148) //101
+NSTUB(Write                                   ,0xff028078) //101
+NSTUB(WriteSDCard                             ,0xff16a9b4) //108
+NSTUB(_log                                    ,0xff3a3378) //111
+NSTUB(_log10                                  ,0xff3a38b8) //112
+NSTUB(_pow                                    ,0xff3a3a30) //114
+NSTUB(_sqrt                                   ,0xff3a5654) //  6
+NSTUB(add_ptp_handler                         ,0xff278404) //  6
+NSTUB(apex2us                                 ,0xff236124) //  4
+NSTUB(close                                   ,0xff00abc4) //  6
+NSTUB(closedir                                ,0xff2c9854) //  4
+NSTUB(err_init_task                           ,0xff006020) //  4
+NSTUB(exmem_alloc                             ,0xff084b14) //101
+NSTUB(free                                    ,0xff004258) //112
+NSTUB(kbd_p1_f                                ,0xff025864) //109
+NSTUB(kbd_p1_f_cont                           ,0xff025870) //109
+NSTUB(kbd_p2_f                                ,0xff025044) //109
+NSTUB(kbd_read_keys                           ,0xff025814) //109
+NSTUB(kbd_read_keys_r2                        ,0xff0579c8) //109
+NSTUB(lseek                                   ,0xff028240) //101
+NSTUB(malloc                                  ,0xff004200) //112
+NSTUB(memcmp                                  ,0xff010a14) //101
+NSTUB(memcpy                                  ,0xff03152c) //101
+NSTUB(memset                                  ,0xff23415c) //101
+NSTUB(mkdir                                   ,0xff0284c0) //  6
+NSTUB(mktime_ext                              ,0xff0a8df0) //  1
+NSTUB(open                                    ,0xff00ab14) //  6
+NSTUB(opendir                                 ,0xff2c98a4) //  6
+NSTUB(openfastdir                             ,0xff2c98a4) //  6
+NSTUB(qsort                                   ,0xff342dfc) //  6
+NSTUB(rand                                    ,0xff234298) //  6
+NSTUB(read                                    ,0xff00ad68) //101
+NSTUB(reboot_fw_update                        ,0xff2cef38) //  6
+NSTUB(rename                                  ,0xff0278a8) //  6
+NSTUB(set_control_event                       ,0xff08f0ec) //111
+NSTUB(srand                                   ,0xff23428c) //  6
+NSTUB(stat                                    ,0xff028288) //  3
+NSTUB(strcat                                  ,0xff0a85a8) //  1
+NSTUB(strchr                                  ,0xff0040cc) //  1
+NSTUB(strcmp                                  ,0xff0109d0) //101
+NSTUB(strcpy                                  ,0xff0109b8) //101
+NSTUB(strftime                                ,0xff0a87f0) //113
+NSTUB(strlen                                  ,0xff004118) //101
+NSTUB(strncmp                                 ,0xff004080) //  1
+NSTUB(strncpy                                 ,0xff004044) //  1
+NSTUB(strrchr                                 ,0xff0040f0) //  1
+NSTUB(strtol                                  ,0xff03182c) //101
+NSTUB(strtolx                                 ,0xff031630) //109
+  DEF(task_CaptSeq                            ,0xff0769f8) //110
+  DEF(task_ExpDrv                             ,0xff0c0e24) //110
+  DEF(task_InitFileModules                    ,0xff09301c) //110
+  DEF(task_MovieRecord                        ,0xff18676c) //110
+  DEF(task_PhySw                              ,0xff0253a8) //110
+NSTUB(time                                    ,0xff084130) //  6
+NSTUB(vsprintf                                ,0xff010978) //  6
+NSTUB(write                                   ,0xff028078) //101
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_entry_2.S
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_entry_2.S	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_entry_2.S	(revision 1937)
@@ -0,0 +1,10 @@
+#include "stubs_asm.h"
+#define NULL_SUB 0xFF000B20
+
+// Override stubs_entry.S
+NHSTUB(kbd_pwr_on,                  NULL_SUB)
+
+// These don't exist
+NHSTUB(SetZoomActuatorSpeedPercent, NULL_SUB)
+
+// Additional
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/boot.c
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/boot.c	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/boot.c	(revision 1937)
@@ -0,0 +1,452 @@
+#include "lolevel.h"
+#include "platform.h"
+#include "core.h"
+#include "dryos31.h"
+
+#define offsetof(TYPE, MEMBER) ((int) &((TYPE *)0)->MEMBER)
+
+const char * const new_sa = &_end;
+
+// Forward declarations
+void CreateTask_PhySw();
+void CreateTask_spytask();
+extern void task_CaptSeq();
+extern void task_InitFileModules();
+extern void task_MovieRecord();
+extern void task_ExpDrv();
+
+void taskHook(context_t **context)
+{
+	task_t *tcb=(task_t*)((char*)context-offsetof(task_t, context));
+
+	// Replace firmware task addresses with ours - UNCOMMENT WHEN
+        // VERIFIED!!!
+	if(tcb->entry == (void*)task_CaptSeq)			tcb->entry = (void*)capt_seq_task;
+	if(tcb->entry == (void*)task_InitFileModules)	tcb->entry = (void*)init_file_modules_task;
+	if(tcb->entry == (void*)task_MovieRecord)		tcb->entry = (void*)movie_record_task;
+	if(tcb->entry == (void*)task_ExpDrv)			tcb->entry = (void*)exp_drv_task;
+}
+
+/*---------------------------------------------------------------------
+  Memory Map:
+	0001900     MEMBASEADDR             start of data - used for initialized vars
+	0010797???                          end of inited data
+	0010798???                          start of bss - used for zeroed/uninited vars
+	016E81F???                          end of bss
+	016E820???  MEMISOSTART             start of our data / bss
+
+	0400000                             raw buffers
+	8000000                             end of raw buffers
+
+	C0xxxxxx                            I/O
+
+	FF000000    ROMBASEADDR             start of rom
+	FFFFFFFF                            end of rom
+----------------------------------------------------------------------*/
+
+/*----------------------------------------------------------------------
+	boot()
+
+	Main entry point for the CHDK code
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) boot() {
+    asm volatile (
+            "	LDR	R1, =0xC0410000 \n"
+            "	MOV	R0, #0 \n"
+            "	STR	R0, [R1] \n"
+            "	MOV	R1, #0x78 \n"
+            "	MCR	p15, 0, R1, c1, c0 \n"
+            "	MOV	R1, #0 \n"
+            "	MCR	p15, 0, R1, c7, c10, 4 \n"
+            "	MCR	p15, 0, R1, c7, c5 \n"
+            "	MCR	p15, 0, R1, c7, c6 \n"
+            "	MOV	R0, #0x3D \n"
+            "	MCR	p15, 0, R0, c6, c0 \n"
+            "	MOV	R0, #0xC000002F \n"
+            "	MCR	p15, 0, R0, c6, c1 \n"
+            "	MOV	R0, #0x35 \n"
+            "	MCR	p15, 0, R0, c6, c2 \n"
+            "	MOV	R0, #0x40000035 \n"
+            "	MCR	p15, 0, R0, c6, c3 \n"
+            "	MOV	R0, #0x80000017 \n"
+            "	MCR	p15, 0, R0, c6, c4 \n"
+            "	LDR	R0, =0xFF00002F \n"
+            "	MCR	p15, 0, R0, c6, c5 \n"
+            "	MOV	R0, #0x34 \n"
+            "	MCR	p15, 0, R0, c2, c0 \n"
+            "	MOV	R0, #0x34 \n"
+            "	MCR	p15, 0, R0, c2, c0, 1 \n"
+            "	MOV	R0, #0x34 \n"
+            "	MCR	p15, 0, R0, c3, c0 \n"
+            "	LDR	R0, =0x3333330 \n"
+            "	MCR	p15, 0, R0, c5, c0, 2 \n"
+            "	LDR	R0, =0x3333330 \n"
+            "	MCR	p15, 0, R0, c5, c0, 3 \n"
+            "	MRC	p15, 0, R0, c1, c0 \n"
+            "	ORR	R0, R0, #0x1000 \n"
+            "	ORR	R0, R0, #4 \n"
+            "	ORR	R0, R0, #1 \n"
+            "	MCR	p15, 0, R0, c1, c0 \n"
+            "	MOV	R1, #0x80000006 \n"
+            "	MCR	p15, 0, R1, c9, c1 \n"
+            "	MOV	R1, #6 \n"
+            "	MCR	p15, 0, R1, c9, c1, 1 \n"
+            "	MRC	p15, 0, R1, c1, c0 \n"
+            "	ORR	R1, R1, #0x50000 \n"
+            "	MCR	p15, 0, R1, c1, c0 \n"
+            "	LDR	R2, =0xC0200000 \n"
+            "	MOV	R1, #1 \n"
+            "	STR	R1, [R2, #0x10C] \n"
+            "	MOV	R1, #0xFF \n"
+            "	STR	R1, [R2, #0xC] \n"
+            "	STR	R1, [R2, #0x1C] \n"
+            "	STR	R1, [R2, #0x2C] \n"
+            "	STR	R1, [R2, #0x3C] \n"
+            "	STR	R1, [R2, #0x4C] \n"
+            "	STR	R1, [R2, #0x5C] \n"
+            "	STR	R1, [R2, #0x6C] \n"
+            "	STR	R1, [R2, #0x7C] \n"
+            "	STR	R1, [R2, #0x8C] \n"
+            "	STR	R1, [R2, #0x9C] \n"
+            "	STR	R1, [R2, #0xAC] \n"
+            "	STR	R1, [R2, #0xBC] \n"
+            "	STR	R1, [R2, #0xCC] \n"
+            "	STR	R1, [R2, #0xDC] \n"
+            "	STR	R1, [R2, #0xEC] \n"
+            "	STR	R1, [R2, #0xFC] \n"
+            "	LDR	R1, =0xC0400008 \n"
+            "	LDR	R2, =0x430005 \n"
+            "	STR	R2, [R1] \n"
+            "	MOV	R1, #1 \n"
+            "	LDR	R2, =0xC0243100 \n"
+            "	STR	R2, [R1] \n"
+            "	LDR	R2, =0xC0242010 \n"
+            "	LDR	R1, [R2] \n"
+            "	ORR	R1, R1, #1 \n"
+            "	STR	R1, [R2] \n"
+            "	LDR	R0, =0xFF497460 \n" // diff from 100b - 0xFF497420
+            "	LDR	R1, =0x1900 \n"
+            "	LDR	R3, =0x102DC \n"
+            "loc_FF00013C:\n"
+            "	CMP	R1, R3 \n"
+            "	LDRCC	R2, [R0], #4 \n"
+            "	STRCC	R2, [R1], #4 \n"
+            "	BCC	loc_FF00013C \n"
+            "	LDR	R1, =0x181A9C \n"
+            "	MOV	R2, #0 \n"
+            "loc_FF000154:\n"
+            "	CMP	R3, R1 \n"
+            "	STRCC	R2, [R3], #4 \n"
+            "	BCC	loc_FF000154 \n"
+            //"	B	sub_FF000358 \n" // original
+            "	B	sub_FF000358_my \n" // patched
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF000358_my
+-----------------------------------------------------------------------*/
+// FF000358
+void __attribute__((naked,noinline)) sub_FF000358_my() {
+
+    //http://chdk.setepontos.com/index.php/topic,4194.0.html
+    *(int*)0x1938=(int)taskHook;
+    *(int*)0x193C=(int)taskHook;
+    //*(int*)0x1930=(int)taskHook;
+    //*(int*)0x1934=(int)taskHook;
+
+    // replacement of sub_FF025560 for correct power-on.
+    *(int*)(0x2610) = (*(int*)0xC0220130)&1 ? 0x200000 : 0x100000;
+
+    asm volatile (
+            "	LDR	R0, =0xFF0003D0 \n"
+            "	MOV	R1, #0 \n"
+            "	LDR	R3, =0xFF000408 \n"
+            "loc_FF000364:\n"
+            "	CMP	R0, R3 \n"
+            "	LDRCC	R2, [R0], #4 \n"
+            "	STRCC	R2, [R1], #4 \n"
+            "	BCC	loc_FF000364 \n"
+            "	LDR	R0, =0xFF000408 \n"
+            "	MOV	R1, #0x4B0 \n"
+            "	LDR	R3, =0xFF00061C \n"
+            "loc_FF000380:\n"
+            "	CMP	R0, R3 \n"
+            "	LDRCC	R2, [R0], #4 \n"
+            "	STRCC	R2, [R1], #4 \n"
+            "	BCC	loc_FF000380 \n"
+            "	MOV	R0, #0xD2 \n"
+            "	MSR	CPSR_cxsf, R0 \n"
+            "	MOV	SP, #0x1000 \n"
+            "	MOV	R0, #0xD3 \n"
+            "	MSR	CPSR_cxsf, R0 \n"
+            "	MOV	SP, #0x1000 \n"
+            "	LDR	R0, =0x6C4 \n"
+            "	LDR	R2, =0xEEEEEEEE \n"
+            "	MOV	R3, #0x1000 \n"
+            "loc_FF0003B4:\n"
+            "	CMP	R0, R3 \n"
+            "	STRCC	R2, [R0], #4 \n"
+            "	BCC	loc_FF0003B4 \n"
+            //"	BL	sub_FF0011B0 \n" // original
+            "	BL	sub_FF0011B0_my \n" // patched
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF0011B0_my
+-----------------------------------------------------------------------*/
+// FF0011B0
+void __attribute__((naked,noinline)) sub_FF0011B0_my() {
+    asm volatile (
+            "	STR	LR, [SP, #-4]! \n"
+            "	SUB	SP, SP, #0x74 \n"
+            "	MOV	R1, #0x74 \n"
+            "	MOV	R0, SP \n"
+            "	BL	sub_FF3A2D98 \n" // diff from 100b - sub_FF3A2D58
+            "	MOV	R0, #0x57000 \n"
+            "	STR	R0, [SP, #4] \n"
+#if defined(OPT_CHDK_IN_EXMEM)
+            "	LDR	R0, =0x181A9C \n" // use original heap offset since CHDK is loaded in high memory
+#else
+            "   LDR     R0, =new_sa \n" // otherwise use patched value
+            "   LDR     R0, [R0] \n"
+#endif
+            "	LDR	R2, =0x36D788 \n"
+            "	STR	R0, [SP, #8] \n"
+            "	SUB	R0, R2, R0 \n"
+            "	STR	R0, [SP, #0xC] \n"
+            "	MOV	R0, #0x22 \n"
+            "	STR	R0, [SP, #0x18] \n"
+            "	MOV	R0, #0x72 \n"
+            "	STR	R0, [SP, #0x1C] \n"
+            "	LDR	R1, =0x375C00 \n"
+            "	LDR	R0, =0x1CD \n"
+            "	STR	R1, [SP] \n"
+            "	STR	R0, [SP, #0x20] \n"
+            "	MOV	R0, #0x96 \n"
+            "	STR	R2, [SP, #0x10] \n"
+            "	STR	R1, [SP, #0x14] \n"
+            "	STR	R0, [SP, #0x24] \n"
+            "	STR	R0, [SP, #0x28] \n"
+            "	MOV	R0, #0x64 \n"
+            "	STR	R0, [SP, #0x2C] \n"
+            "	MOV	R0, #0 \n"
+            "	STR	R0, [SP, #0x30] \n"
+            "	STR	R0, [SP, #0x34] \n"
+            "	MOV	R0, #0x10 \n"
+            "	STR	R0, [SP, #0x5C] \n"
+            "	MOV	R0, #0x800 \n"
+            "	STR	R0, [SP, #0x60] \n"
+            "	MOV	R0, #0xA0 \n"
+            "	STR	R0, [SP, #0x64] \n"
+            "	MOV	R0, #0x280 \n"
+            "	STR	R0, [SP, #0x68] \n"
+            //"	LDR	R1, =0xFF005F2C \n" // original
+            "	LDR	R1, =sub_FF005F2C_my \n" // patched
+            "   B       sub_FF00124C \n" // continue in firmware
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF005F2C_my
+-----------------------------------------------------------------------*/
+// FF005F2C
+void __attribute__((naked,noinline)) sub_FF005F2C_my() {
+    asm volatile (
+            "	STMFD	SP!, {R4,LR} \n"
+            "	BL	sub_FF000B28 \n"
+            "	BL	sub_FF00A384 \n"
+            "	CMP	R0, #0 \n"
+            "	LDRLT	R0, =0xFF006040 \n" // *"dmSetup"
+            //"	BLLT	loc_FF006020 \n" // original
+            "	BLLT	_err_init_task \n" // patched
+            "	BL	sub_FF005B64 \n"
+            "	CMP	R0, #0 \n"
+            "	LDRLT	R0, =0xFF006048 \n" // *"termDriverInit"
+            //"	BLLT	loc_FF006020 \n" // original
+            "	BLLT	_err_init_task \n" // patched
+            "	LDR	R0, =0xFF006058 \n" // *"/_term"
+            "	BL	sub_FF005C4C \n"
+            "	CMP	R0, #0 \n"
+            "	LDRLT	R0, =0xFF006060 \n" // *"termDeviceCreate"
+            //"	BLLT	loc_FF006020 \n" // original
+            "	BLLT	_err_init_task \n" // patched
+            "	LDR	R0, =0xFF006058 \n" // *"/_term"
+            "	BL	sub_FF003CA8 \n"
+            "	CMP	R0, #0 \n"
+            "	LDRLT	R0, =0xFF006074 \n" // *"stdioSetup"
+            //"	BLLT	loc_FF006020 \n" // original
+            "	BLLT	_err_init_task \n" // patched
+            "	BL	sub_FF009CEC \n"
+            "	CMP	R0, #0 \n"
+            "	LDRLT	R0, =0xFF006080 \n" // *"stdlibSetup"
+            //"	BLLT	loc_FF006020 \n" // original
+            "	BLLT	_err_init_task \n" // patched
+            "	BL	sub_FF001690 \n"
+            "	CMP	R0, #0 \n"
+            "	LDRLT	R0, =0xFF00608C \n" // *"armlib_setup"
+            //"	BLLT	loc_FF006020 \n" // original
+            "	BLLT	_err_init_task \n" // patched
+            "	LDMFD	SP!, {R4,LR} \n"
+            //"	B	sub_FF00FDA0 \n" // original
+            "	B	sub_FF00FDA0_my \n" // patched
+    );
+}
+
+/*----------------------------------------------------------------------
+        sub_FF00FDA0_my
+-----------------------------------------------------------------------*/
+// FF00FDA0
+void __attribute__((naked,noinline)) sub_FF00FDA0_my() {
+    asm volatile (
+            "	STMFD	SP!, {R4,LR} \n"
+            "	BL	sub_FF025558 \n"
+            //"	BL	sub_FF00FDB4 \n" // original taskcreate_Startup
+            "	BL	taskcreate_Startup_my \n" // patched taskcreate_Startup
+            "	MOV	R0, #0 \n"
+            "	LDMFD	SP!, {R4,PC} \n"
+    );
+}
+
+/*----------------------------------------------------------------------
+	taskcreate_Startup_my
+-----------------------------------------------------------------------*/
+// FF00FDB4
+void __attribute__((naked,noinline)) taskcreate_Startup_my() {
+    asm volatile (
+            "	STMFD	SP!, {R3-R9,LR} \n"
+            "	MOV	R6, #0 \n"
+            "	BL	sub_FF02D710 \n"
+            "	LDR	R9, =0xC0220000 \n"
+            "	MOVS	R7, R0 \n"
+            "	MOV	R8, #1 \n"
+            "	BNE	loc_FF00FE18 \n"
+            "	BL	sub_FF026F24 \n"
+            "	CMP	R0, #0 \n"
+            "	BEQ	loc_FF00FE18 \n"
+            "	LDR	R0, [R9, #0x128] \n"
+            "	BIC	R5, R8, R0 \n"
+            "	LDR	R0, [R9, #0x12C] \n"
+            "	BIC	R4, R8, R0 \n"
+            "	BL	sub_FF02396C \n"
+            "	CMP	R0, #1 \n"
+            "	MOVEQ	R6, #1 \n"
+            "	ORR	R0, R4, R5 \n"
+            "	ORRS	R0, R0, R6 \n"
+            "	BNE	loc_FF00FE28 \n"
+            "	BL	sub_FF024634 \n"
+            "	MOV	R0, #0x44 \n"
+            "	STR	R0, [R9, #0x1C] \n"
+            "	BL	sub_FF024824 \n"
+            "loc_FF00FE14:\n"
+            "	B	loc_FF00FE14 \n"
+            "loc_FF00FE18:\n"
+            "	LDR	R0, [R9, #0x12C] \n"
+            "	BIC	R4, R8, R0 \n"
+            "	LDR	R0, [R9, #0x128] \n"
+            "	BIC	R5, R8, R0 \n"
+            "loc_FF00FE28:\n"
+            "	MOV	R3, R6 \n"
+            "	MOV	R2, R7 \n"
+            "	MOV	R1, R5 \n"
+            "	MOV	R0, R4 \n"
+            "	BL	sub_FF025560 \n" // see begining of sub_FF000358_my
+            "	BL	sub_FF02555C \n"
+            "	BL	sub_FF02B8DC \n"
+            "	LDR	R1, =0x3CE000 \n"
+            "	MOV	R0, #0 \n"
+            "	BL	sub_FF02BD4C \n"
+            "	BL	sub_FF02BAF4 \n"
+            "	MOV	R3, #0 \n"
+            "	STR	R3, [SP] \n"
+            //"	LDR	R3, =0xFF00FD28 \n" // original
+            "	LDR	R3, =task_Startup_my \n" // patched
+            "   B       sub_FF00FE60 \n" // continue in firmware
+    );
+}
+
+/*----------------------------------------------------------------------
+	task_Startup_my
+-----------------------------------------------------------------------*/
+// FF00FD28
+void __attribute__((naked,noinline)) task_Startup_my() {
+    asm volatile (
+            "	STMFD	SP!, {R4,LR} \n"
+            "	BL	sub_FF0065DC \n"
+            "	BL	sub_FF026668 \n"
+            "	BL	sub_FF023EF0 \n"
+            "	BL	sub_FF024270 \n"
+            //"	BL	sub_FF02D758 \n"    // j_nullsub_???
+            "	BL	sub_FF02D944 \n"
+            "	BL	sub_FF024954 \n"
+            "	BL	sub_FF02397C \n"
+            "	MOV	R0, #1 \n"
+            "	BL	sub_FF023E64 \n"
+            //"	BL	sub_FF02D7EC \n" // skip starting diskboot.bin again
+            "	BL	sub_FF02DAFC \n"
+            "	BL	sub_FF022378 \n"
+            "	BL	sub_FF02D974 \n"
+            "	BL	sub_FF02B080 \n"
+            "	BL	sub_FF02DB00 \n"
+            //"	BL	sub_FF0253DC \n" // original *PhySw*
+            "   BL      CreateTask_spytask \n" // added to create the Spytask
+            "   BL      taskcreatePhySw_my \n" // patched taskcreate_PhySw()
+            "   B       sub_FF00FD70 \n" // continue in firmware
+    );
+}
+
+/*----------------------------------------------------------------------
+	taskcreatePhySw_my ff0253dc
+-----------------------------------------------------------------------*/
+// FF0253DC
+void __attribute__((naked,noinline)) taskcreatePhySw_my() {
+    asm volatile (
+            "	STMFD	SP!, {R3-R5,LR} \n"
+            "	LDR	R4, =0x1C4C \n"
+            "	LDR	R0, [R4, #4] \n"
+            "	CMP	R0, #0 \n"
+            "	BNE	sub_FF025410 \n"
+            "	MOV	R3, #0 \n"
+            "	STR	R3, [SP] \n"
+            //"	LDR	R3, =0xFF0253A8 \n" // original
+            "	LDR	R3, =mykbd_task \n" // patched
+            //"	MOV	R2, #0x800 \n" // original
+            "	MOV	R2, #0x2000 \n" // stack size for new task_PhySw so we don't have to do stack switch
+            "	B	sub_FF025400 \n" // continue in firmware
+    );
+}
+
+/*----------------------------------------------------------------------
+	spytask
+-----------------------------------------------------------------------*/
+void spytask(long ua, long ub, long uc, long ud, long ue, long uf)
+{
+    core_spytask();
+}
+
+/*----------------------------------------------------------------------
+	CreateTask_spytask
+-----------------------------------------------------------------------*/
+void CreateTask_spytask() {
+	_CreateTask("SpyTask", 0x19, 0x2000, spytask, 0);
+}
+
+/*----------------------------------------------------------------------
+	init_file_modules_task
+-----------------------------------------------------------------------*/
+// FF09301C
+void __attribute__((naked,noinline)) init_file_modules_task() {
+    asm volatile (
+            "	STMFD	SP!, {R4-R6,LR} \n"
+            "	BL	sub_FF08ABA0 \n"
+            "	LDR	R5, =0x5006 \n"
+            "	MOVS	R4, R0 \n"
+            "	MOVNE	R1, #0 \n"
+            "	MOVNE	R0, R5 \n"
+            "	BLNE	sub_FF08EDF0 \n"
+            "	BL	sub_FF08ABCC \n"
+            "   BL      core_spytask_can_start\n" // added CHDK: Set "it's-safe-to-start"-Flag for spytask
+            "   B       sub_FF09303C \n" // continue in firmware
+    );
+}
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_min.S
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_min.S	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_min.S	(revision 1937)
@@ -0,0 +1,2 @@
+#include "stubs_asm.h"
+
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/makefile.inc
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/makefile.inc	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/makefile.inc	(revision 1937)
@@ -0,0 +1,28 @@
+
+#override OPT_EXMEM_MALLOC=1
+#override OPT_CHDK_IN_EXMEM=1
+
+PLATFORMID=12855
+
+PLATFORMOS=dryos
+
+MEMBASEADDR=0x1900
+RESTARTSTART=0x50000
+
+ifdef OPT_CHDK_IN_EXMEM
+MEMISOSTART=0x75867E0  # MAXRAMADDR+1 - EXMEM_HEAP_SKIP - EXMEM_BUFFER_SIZE - 32(0x20) (exmem allocates 64 bytes extra, 32 before and 32 after block allocated)
+else					#265kb=79467E0, 512kb=79067E0, 640kb=78E67E0
+MEMISOSTART=0x181A9C   # original non-exmem value
+endif
+
+ROMBASEADDR=0xFF000000
+
+MAXRAMADDR=0x7FFFFFF # found @ff084db4
+EXMEM_BUFFER_SIZE=0xA0000  # 40000=256KB, 80000=512KB, A0000=640kb, C0000=768KB, 100000=1MB 
+EXMEM_HEAP_SKIP=0x679800
+
+PLFLAGS=-DMEMBASEADDR=$(MEMBASEADDR) -DMEMISOSTART=$(MEMISOSTART) -DMEMISOSIZE=$(MEMISOSIZE)
+PLFLAGS+=-DRESTARTSTART=$(RESTARTSTART)
+
+NEED_ENCODED_DISKBOOT=7
+KEYSYS=d4c
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_asm.h
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_asm.h	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_asm.h	(revision 1937)
@@ -0,0 +1,20 @@
+    .text
+
+#define DEF(n,a) \
+    .globl n; n = a
+
+#define NSTUB(name, addr)\
+    .globl _##name ;\
+    .weak _##name ;\
+    _##name: ;\
+	ldr  pc, = ## addr
+
+#define NHSTUB(name, addr)\
+    .globl _##name ;\
+    _##name: ;\
+	ldr  pc, = ## addr
+
+#define STUB(addr)\
+    .globl sub_ ## addr ;\
+    sub_ ## addr: ;\
+	ldr  pc, =0x ## addr
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/lib.c
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/lib.c	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/lib.c	(revision 1937)
@@ -0,0 +1,67 @@
+#include "platform.h"
+
+/*
+IXUS230HS / ELPH310HS
+full 19131120
+0x1048 *  BF4   =  C29CA0
+4168 * 3060 = 12754080 
+*/
+
+char *hook_raw_image_addr()
+{
+	if (*((int*)(0x2EF8 + 0xC)) != 0) // FF0795BC
+		return (char*) 0x46000000;  // 
+	else
+		return (char*) 0x413391A0; // FF368444
+
+}
+
+char *hook_alt_raw_image_addr()
+{
+	if (*((int*)(0x2EF8 + 0xC)) == 0) // FF0795BC
+		return (char*) 0x46000000;  // 
+	else
+		return (char*) 0x413391A0; // FF368444
+
+}
+
+long hook_raw_size()
+{
+	//FF36849C
+	return 0x0123eaf0;
+	
+}
+
+void *vid_get_viewport_live_fb()
+{
+	return (void*)(void*)(*(int*)(0x2158)); // FF044208
+}
+
+// OSD buffer
+void *vid_get_bitmap_fb()
+{	
+	//FF053204
+	return (void*)0x40471000;
+}	                           
+
+// Live picture buffer (shoot half-pressed)
+void *vid_get_viewport_fb()
+{
+	return (void*)0x405c6b80;  					                   // found by search for VRAM Address @FF365654
+}
+
+void *vid_get_viewport_fb_d()
+{
+	//FF06C234
+	//FF06C26C
+	return (void*)(*(int*)(0x2C58+0x58));                  
+
+}
+
+char *camera_jpeg_count_str()
+{
+	//FF226398
+	return (void*)0x000B9574;                                      
+
+}
+
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/movie_rec.c
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/movie_rec.c	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/movie_rec.c	(revision 1937)
@@ -0,0 +1,554 @@
+#include "conf.h"
+
+void change_video_tables(int a, int b){
+}
+
+void  set_quality(int *x){ // -17 highest; +12 lowest
+ if (conf.video_mode) *x=12-((conf.video_quality-1)*(12+17)/(99-1));
+}
+
+/*----------------------------------------------------------------------
+	movie_record_task()
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) movie_record_task() {
+// FF18676C
+    asm volatile (
+        "    STMFD   SP!, {R2-R10,LR} \n" 
+        "    LDR     R6, =0xFF1854DC \n" // diff
+        "    LDR     R7, =0xFF1861D8 \n" // diff
+        "    LDR     R4, =0x6CC0 \n" 
+        "    LDR     R9, =0x6D6 \n" 
+        "    LDR     R10, =0x2710 \n" 
+        "    MOV     R8, #1 \n" 
+        "    MOV     R5, #0 \n" 
+        "loc_FF18678C:\n"       // diff
+        "    LDR     R0, [R4, #0x24] \n" 
+        "    MOV     R2, #0 \n" 
+        "    ADD     R1, SP, #4 \n" 
+        "    BL      sub_FF02B314 \n" 
+        "    LDR     R0, [R4, #0x2C] \n" 
+        "    CMP     R0, #0 \n" 
+        "    LDRNE   R0, [R4, #0xC] \n" 
+        "    CMPNE   R0, #2 \n" 
+        "    LDRNE   R0, [R4, #0x44] \n" 
+        "    CMPNE   R0, #6 \n" 
+        "    BNE     loc_FF1868C8 \n" // diff
+        "    LDR     R0, [SP, #4] \n" 
+        "    LDR     R1, [R0] \n" 
+        "    SUB     R1, R1, #2 \n" 
+        "    CMP     R1, #0xD \n" 
+        "    ADDCC   PC, PC, R1, LSL #2 \n" 
+        "    B       loc_FF1868C8 \n" // diff until next loc
+        "    B       loc_FF186868 \n" 
+        "    B       loc_FF18688C \n" 
+        "    B       loc_FF18689C \n" 
+        "    B       loc_FF1868A4 \n" 
+        "    B       loc_FF1868AC \n" 
+        "    B       loc_FF1868B4 \n" 
+        "    B       loc_FF186870 \n" 
+        "    B       loc_FF1868BC \n" 
+        "    B       loc_FF18687C \n" 
+        "    B       loc_FF1868C8 \n" 
+        "    B       loc_FF1868C4 \n" 
+        "    B       loc_FF186834 \n" 
+        "    B       loc_FF186804 \n" 
+        "loc_FF186804:\n" // jump table entry 12
+        "    STR     R5, [R4, #0x40] \n" 
+        "    STR     R5, [R4, #0x30] \n" 
+        "    STR     R5, [R4, #0x34] \n" 
+        "    STRH    R5, [R4, #6] \n" 
+        "    STR     R6, [R4, #0xD8] \n" 
+        "    STR     R7, [R4, #0xF4] \n" 
+        "    LDR     R0, [R4, #0xC] \n" 
+        "    ADD     R0, R0, #1 \n" 
+        "    STR     R0, [R4, #0xC] \n" 
+        "    MOV     R0, #6 \n" 
+        "    STR     R0, [R4, #0x44] \n" 
+        "    B       loc_FF186854 \n" //diff
+        "loc_FF186834:\n" // jump table entry 11
+        "    STR     R5, [R4, #0x40] \n" 
+        "    STR     R5, [R4, #0x30] \n" 
+        "    STR     R6, [R4, #0xD8] \n" 
+        "    STR     R7, [R4, #0xF4] \n" 
+        "    LDR     R0, [R4, #0xC] \n" 
+        "    ADD     R0, R0, #1 \n" 
+        "    STR     R0, [R4, #0xC] \n" 
+        "    STR     R8, [R4, #0x44] \n" 
+        "loc_FF186854:\n"
+        "    LDR     R2, =0xFF184A84 \n" 
+        "    LDR     R1, =0xB1A28 \n" 
+        "    LDR     R0, =0xFF184B98 \n" 
+        "    BL      sub_FF045B24 \n" 
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF186868:\n"    // jump table entry 0
+        //"    BL      sub_FF185DBC \n" //original
+        "    BL      sub_FF185D98_my \n" // patched
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF186870:\n" // jump table entry 6
+        "    LDR     R1, [R4, #0xF4] \n" 
+        "    BLX     R1 \n" 
+        "    LDR     R0, =0x6D48-4 \n" // added - found at FF1866A4 in 100b
+        "    BL      set_quality \n" // added
+        "    B       loc_FF1868C8 \n" // diff
+        "loc_FF18687C:\n" // jump table entry 8
+        "    LDR     R1, [R0, #0x18] \n" 
+        "    LDR     R0, [R0, #4] \n" 
+        "    BL      sub_FF2E47C0 \n" // diff
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF18688C:\n" // jump table entry 1
+        "    LDR     R0, [R4, #0x44] \n" 
+        "    CMP     R0, #5 \n" 
+        "    STRNE   R8, [R4, #0x34] \n" 
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF18689C:\n" // jump table entry 2
+        "    BL      sub_FF185150 \n" 
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF1868A4:\n" // jump table entry 3
+        "    BL      sub_FF184E48 \n" 
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF1868AC:\n" // jump table entry 4
+        "    BL      sub_FF184BF0 \n" 
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF1868B4:\n" // jump table entry 5
+        "    BL      sub_FF184810 \n" 
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF1868BC:\n" // jump table entry 7
+        "    BL      sub_FF184790 \n" 
+        "    B       loc_FF1868C8 \n" 
+        "loc_FF1868C4:\n" // jump table entry 10
+        "    BL      sub_FF186E40 \n" 
+        "loc_FF1868C8:\n" // jump table default entry & 9
+        "    LDR     R1, [SP, #4] \n" 
+        "    LDR     R3, =0xFF1844E4 \n" // **"MovieRecorder.c"
+        "    STR     R5, [R1] \n" 
+        "    STR     R9, [SP] \n" 
+        "    LDR     R0, [R4, #0x28] \n" 
+        "    MOV     R2, R10 \n" 
+        "    BL      sub_FF02BC8C \n" 
+        "    B       loc_FF18678C \n" // diff
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF185D98_my()
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) sub_FF185D98_my() {
+// FF185DBC 
+    asm volatile (
+        "    STMFD   SP!, {R0-R8,LR} \n" 
+        "    LDR     R6, =0x6CC0 \n" 
+        "    MOV     R0, #0 \n" 
+        "    STR     R0, [R6, #0x34] \n" 
+        "    STR     R0, [R6, #0x38] \n" 
+        "    ADD     R0, R6, #0 \n" 
+        "    LDR     R0, [R0, #0x5C] \n" 
+        "    LDRH    R1, [R6, #6] \n" 
+        "    MOV     R3, #0x3E8 \n" 
+        "    MUL     R0, R3, R0 \n" 
+        "    CMP     R1, #0 \n" 
+        "    MOV     R2, #1 \n" 
+        "    BNE     loc_FF185E00 \n" 
+        "    LDR     R1, [R6, #0x90] \n" 
+        "    CMP     R1, #0 \n" 
+        "    BNE     loc_FF185E10 \n" 
+        "    B       loc_FF185E08 \n" 
+        "loc_FF185E00:\n"
+        "    CMP     R1, #3 \n" 
+        "    BNE     loc_FF185E10 \n" 
+        "loc_FF185E08:\n"
+        "    STR     R2, [R6, #0x48] \n" 
+        "    B       loc_FF185E1C \n" 
+        "loc_FF185E10:\n"
+        "    MOV     R1, #0x3E8 \n" 
+        "    BL      sub_FF3A2FD0 \n" 
+        "    STR     R0, [R6, #0x48] \n" 
+        "loc_FF185E1C:\n"
+        "    LDR     R4, =0xB1A5C \n" 
+        "    MOV     R7, #2 \n" 
+        "    LDR     R0, [R4, #8] \n" 
+        "    CMP     R0, #0 \n" 
+        "    BEQ     loc_FF185E84 \n" 
+        "    LDR     R0, [R6, #0x58] \n" 
+        "    MOV     R1, #4 \n" 
+        "    CMP     R0, #0x18 \n" 
+        "    BEQ     loc_FF186018 \n" 
+        "    BGT     loc_FF185E60 \n" 
+        "    CMP     R0, #0xA \n" 
+        "    CMPNE   R0, #0xF \n" 
+        "    STREQ   R7, [R4, #0x14] \n" 
+        "    BEQ     loc_FF185E84 \n" 
+        "    CMP     R0, #0x14 \n" 
+        "    BNE     loc_FF185E78 \n" 
+        "    B       loc_FF186018 \n" 
+        "loc_FF185E60:\n"
+        "    CMP     R0, #0x1E \n" 
+        "    BEQ     loc_FF186018 \n" 
+        "    CMP     R0, #0x3C \n" 
+        "    MOVEQ   R0, #8 \n" 
+        "    STREQ   R0, [R4, #0x14] \n" 
+        "    BEQ     loc_FF185E84 \n" 
+        "loc_FF185E78:\n"
+        "    LDR     R1, =0x7D9 \n" 
+                "    LDR     R0, =0xFF1844E4 \n" // **"MovieRecorder.c" // diff
+                //"    BL      sub_FF00EDBC \n" // original
+                "    BL      _DebugAssert \n" // patched
+        "loc_FF185E84:\n"
+        "    LDR     R2, =0x6CC2 \n" 
+        "    LDR     R0, [R6, #0xB8] \n" 
+        "    MOV     R3, #2 \n" 
+        "    MOV     R1, #0xAA \n" 
+        "    BL      sub_FF08A794 \n" 
+        "    LDR     R2, =0x6CC4 \n" 
+        "    LDR     R0, [R6, #0xB8] \n" 
+        "    MOV     R3, #2 \n" 
+        "    MOV     R1, #0xA9 \n" 
+        "    BL      sub_FF08A794 \n" 
+        "    LDR     R2, =0x6D10 \n" 
+        "    LDR     R0, [R6, #0xB8] \n" 
+        "    MOV     R3, #4 \n" 
+        "    MOV     R1, #0xA2 \n" 
+        "    BL      sub_FF08A794 \n" 
+        "    LDR     R2, =0x6D14 \n" 
+        "    LDR     R0, [R6, #0xB8] \n" 
+        "    MOV     R3, #4 \n" 
+        "    MOV     R1, #0xA3 \n" 
+        "    BL      sub_FF08A794 \n" 
+        "    LDR     R0, [R6, #0x90] \n" 
+        "    CMP     R0, #0 \n" 
+        "    LDRNE   R2, =0x6DC0 \n" 
+        "    MOVNE   R1, #0 \n" 
+        "    MOVNE   R0, #0xD \n" 
+        "    BLNE    sub_FF084970 \n" 
+        "    LDR     R0, [R6, #0x4C] \n" 
+        "    LDR     R5, =0x6DC0 \n" 
+        "    LDR     R8, =0xB1A44 \n" 
+        "    CMP     R0, #2 \n" 
+        "    CMPNE   R0, #3 \n" 
+        "    BNE     loc_FF185F80 \n" 
+        "    LDR     R0, [R6, #0x90] \n" 
+        "    CMP     R0, #0 \n" 
+        "    LDRNE   R0, =0x443FC000 \n" 
+        "    STRNE   R0, [R5] \n" 
+        "    BNE     loc_FF185F80 \n" 
+        "    LDR     R0, =0x460B8600 \n" 
+        "    LDR     R1, =0x10959E0 \n" 
+        "    STR     R0, [R5] \n" 
+        "    STR     R1, [R5, #4] \n" 
+        "    LDMIA   R8, {R1,R2} \n" 
+        "    STR     R0, [R6, #0xA0] \n" 
+        "    MUL     R1, R2, R1 \n" 
+        "    MOV     R2, #0 \n" 
+        "    MOV     R3, R1, LSL #1 \n" 
+        "    ADD     R1, R0, R3 \n" 
+        "    STR     R3, [R6, #0x9C] \n" 
+        "    STR     R1, [R6, #0xA4] \n" 
+        "    STMEA   SP, {R1-R3} \n" 
+        "    MOV     R3, R2 \n" 
+        "    MOV     R2, #9 \n" 
+        "    MOV     R1, #5 \n" 
+        "    MOV     R0, #0x10 \n" 
+        "    BL      sub_FF29934C \n" 
+        "    LDR     R1, [R5] \n" 
+        "    LDR     R0, [R6, #0x9C] \n" 
+        "    ADD     R1, R1, R0, LSL #1 \n" 
+        "    STR     R1, [R5] \n" 
+        "    LDR     R1, [R5, #4] \n" 
+        "    RSB     R0, R0, #0 \n" 
+        "    ADD     R0, R1, R0, LSL #1 \n" 
+        "    STR     R0, [R5, #4] \n" 
+        "loc_FF185F80:\n"
+        "    LDR     R3, =0xFF185D88 \n" 
+        "    LDMIA   R5, {R0,R1} \n" 
+        "    STR     R3, [SP] \n" 
+        "    LDR     R3, =0xB1A5C \n" 
+        "    SUB     R2, R3, #0x18 \n" 
+        //"    BL      sub_FF2E325C \n" // original // diff
+        "    BL      sub_FF2E321C_my \n" // patched
+        "    LDR     R3, [R6, #0xB8] \n" 
+        "    STR     R3, [SP] \n" 
+        "    LDR     R0, [R6, #0x90] \n" 
+        "    LDRD    R2, [R6, #0xF8] \n" 
+        "    BL      sub_FF2E3698 \n" 
+        "    LDR     R0, [R6, #0x64] \n" 
+        "    LDR     R3, =0x6D48 \n" 
+        "    AND     R1, R0, #0xFF \n" 
+        "    LDR     R0, [R8] \n" 
+        "    SUB     R2, R3, #4 \n" 
+        "    BL      sub_FF2E11F8 \n" 
+        "    LDRH    R0, [R6, #6] \n" 
+        "    CMP     R0, #2 \n" 
+        "    LDREQ   R0, =0xFF185A60 \n" 
+        "    STREQ   R0, [R6, #0xF4] \n" 
+        "    LDR     R0, [R6, #0x90] \n" 
+        "    CMP     R0, #0 \n" 
+        "    LDREQ   R1, =0xFF185694 \n" 
+        "    STREQ   R1, [R6, #0xF4] \n" 
+        "    LDR     R2, [R6, #0xC] \n" 
+        "    LDR     R1, =0xFF3EC2C0 \n" 
+        "    CMP     R2, #2 \n" 
+        "    BNE     sub_FF186020 \n" 
+        "    LDR     R0, [R6, #0x4C] \n" 
+        "    ADD     R0, R1, R0, LSL #3 \n" 
+        "    LDR     R1, [R8, #0xC] \n" 
+        "    LDR     R0, [R0, R1, LSL #2] \n" 
+        "    BL      sub_FF29F3BC \n" 
+        "    LDR     R0, =0xFF1855B8 \n" 
+        "    MOV     R1, #0 \n" 
+        "    BL      sub_FF29F8B8 \n" 
+        "    B       sub_FF18605C \n" 
+        "loc_FF186018:\n"
+        "    STR     R1, [R4, #0x14] \n" 
+        "    B       loc_FF185E84 \n" 
+    );
+}
+
+/*----------------------------------------------------------------------
+	sub_FF2E321C_my()
+-----------------------------------------------------------------------*/
+void __attribute__((naked,noinline)) sub_FF2E321C_my() {
+// FF2E325C
+    asm volatile (
+        "    STMFD   SP!, {R0-R12,LR} \n" 
+        "    MOV     R9, R0 \n" 
+        "    LDR     R0, [R2, #0x10] \n" 
+        "    LDR     R8, [SP, #0x38] \n" 
+        "    CMP     R0, #0 \n" 
+        "    LDREQ   R1, =0x346 \n" 
+        "    LDREQ   R0, =0xFF2E20E0 \n" // **"MovWriter.c"
+        "    MOV     R5, #0 \n" 
+        "    MOV     R4, R2 \n" 
+        "    MOV     R10, R3 \n" 
+        "    MOV     R7, R5 \n" 
+        "    BLEQ    sub_FF00EDBC \n" 
+        "    LDR     R6, =0xC318 \n" 
+        "    LDR     R0, [R4] \n" 
+        "    MOV     R11, #0x1E \n" 
+        "    STR     R0, [R6, #0xD0] \n" 
+        "    LDR     R0, [R4, #4] \n" 
+        "    STR     R0, [R6, #0xD4] \n" 
+        "    LDR     R0, [R4, #0x10] \n" 
+        "    STR     R0, [R6, #0xE0] \n" 
+        "    LDR     R1, [R4, #8] \n" 
+        "    LDR     R0, =0x7530 \n" 
+        "    CMP     R1, #0xB \n" 
+        "    ADDCC   PC, PC, R1, LSL #2 \n" 
+        "    B       loc_FF2E3348 \n" 
+        "    B       loc_FF2E32FC \n" 
+        "    B       loc_FF2E32EC \n" 
+        "    B       loc_FF2E3324 \n" 
+        "    B       loc_FF2E3338 \n" 
+        "    B       loc_FF2E3348 \n" 
+        "    B       loc_FF2E3348 \n" 
+        "    B       loc_FF2E3348 \n" 
+        "    B       loc_FF2E3348 \n" 
+        "    B       loc_FF2E331C \n" 
+        "    B       loc_FF2E3314 \n" 
+        "    B       loc_FF2E3304 \n" 
+        "loc_FF2E32EC:\n" // jump table entry 1
+        "    LDR     R7, =0x5DC0 \n" 
+        "    MOV     R0, #0x18 \n" 
+        "    STR     R7, [R6, #0x12C] \n" 
+        "    B       loc_FF2E3330 \n" 
+        "loc_FF2E32FC:\n" // jump table entry 0
+        "    MOV     R7, R0 \n" 
+        "    B       loc_FF2E3308 \n" 
+        "loc_FF2E3304:\n" // jump table entry 10
+        "    LDR     R7, =0x5DC \n" 
+        "loc_FF2E3308:\n"
+        "    STR     R0, [R6, #0x12C] \n" 
+        "    STR     R11, [R6, #0xD8] \n" 
+        "    B       loc_FF2E3354 \n" 
+        "loc_FF2E3314:\n" // jump table entry 9
+        "    LDR     R7, =0xBB8 \n" 
+        "    B       loc_FF2E3308 \n" 
+        "loc_FF2E331C:\n" // jump table entry 8
+        "    LDR     R7, =0x1770 \n" 
+        "    B       loc_FF2E3308 \n" 
+        "loc_FF2E3324:\n" // jump table entry 2
+        "    LDR     R7, =0x57600000 \n" // 2hrs, orignal 0x3A980
+        "    STR     R0, [R6, #0x12C] \n" 
+        "    MOV     R0, #240 \n" // original 0xF0
+        "loc_FF2E3330:\n"
+        "    STR     R0, [R6, #0xD8] \n" 
+        "    B       loc_FF2E3354 \n" 
+        "loc_FF2E3338:\n" // jump table entry 3
+        "    STR     R0, [R6, #0x12C] \n" 
+        "    LDR     R7, =0x28800000 \n" // 2hrs, original 0x1D4C0
+        "    MOV     R0, #0x78 \n" // 120 fps (0x78 = dec 120)
+        "    B       loc_FF2E3330 \n" 
+        "loc_FF2E3348:\n" // jump table default entry & 4-7
+        "    LDR     R1, =0x377 \n" 
+        "    LDR     R0, =0xFF2E20E0 \n" // **"MovWriter.c"
+        //"    BL      sub_FF00EDBC \n" // original
+        "    BL      _DebugAssert \n" // patched
+        "loc_FF2E3354:\n"
+        "    LDR     R0, [R6, #0xD8] \n" 
+        "    LDR     R1, =0xE0F \n" 
+        "    MOV     R0, R0, LSR #1 \n" 
+        "    STR     R0, [R6, #0xDC] \n" 
+        "    LDR     R0, [R10] \n" 
+        "    STR     R0, [R6, #0xE4] \n" 
+        "    LDRH    R0, [R10, #0x10] \n" 
+        "    STR     R0, [R6, #0xE8] \n" 
+        "    LDR     R0, [R10, #4] \n" 
+        "    STRH    R0, [R6, #2] \n" 
+        "    LDR     R0, [R10, #8] \n" 
+        "    STRH    R0, [R6, #4] \n" 
+        "    LDR     R0, [R10, #0x14] \n" 
+        "    STR     R0, [R6, #0xEC] \n" 
+        "    STR     R8, [R6, #0x128] \n" 
+        "    LDR     R0, [R6, #0xD0] \n" 
+        "    CMP     R0, #0x140 \n" 
+        "    MOVEQ   R0, #0x20000 \n" 
+        "    MOVEQ   R5, #1 \n" 
+        "    STREQ   R0, [R6, #0xAC] \n" 
+        "    BEQ     loc_FF2E33E8 \n" 
+        "    CMP     R0, #0x280 \n" 
+        "    LDREQ   R0, =0x7A760 \n" 
+        "    MOVEQ   R5, #2 \n" 
+        "    STREQ   R0, [R6, #0xAC] \n" 
+        "    BEQ     loc_FF2E33E8 \n" 
+        "    CMP     R0, #0x500 \n" 
+        "    LDREQ   R0, =0x11DA50 \n"         
+        "    LDR     R1, =7200 \n" // 2hrs, original 0x257
+        "    MOVEQ   R5, #4 \n" 
+        "    STREQ   R0, [R6, #0xAC] \n" 
+        "    BEQ     loc_FF2E33E8 \n" 
+        "    CMP     R0, #0x780 \n" 
+        "    BNE     loc_FF2E33F0 \n" 
+        "    MOV     R0, #2097152 \n" // 10mins, original 0x200000
+        "    MOV     R5, #5 \n" 
+        "    STR     R0, [R6, #0xAC] \n" 
+        "loc_FF2E33E8:\n"
+        "    STR     R1, [R6, #0x4C] \n" 
+        "    B       loc_FF2E33FC \n" 
+        "loc_FF2E33F0:\n"
+        "    LDR     R1, =0x39F \n" 
+        "    LDR     R0, =0xFF2E20E0 \n" // **"MovWriter.c"
+        //"    BL      sub_FF00EDBC \n" // original
+        "    BL      _DebugAssert \n" // patched
+        "loc_FF2E33FC:\n"
+        "    LDR     R0, [R6, #0x4C] \n" 
+        "    LDR     R1, =0x138D \n" 
+        "    MUL     R0, R7, R0 \n" 
+        "    BL      sub_FF3A2FD0 \n" 
+        "    ADD     R0, R0, #1 \n" 
+        "    ADD     R0, R0, R0, LSL #2 \n" 
+        "    STR     R0, [R6, #0x48] \n" 
+        "    LDR     R8, [R4, #8] \n" 
+        "    CMP     R8, #0xA \n" 
+        "    CMPNE   R8, #9 \n" 
+        "    CMPNE   R8, #8 \n" 
+        "    BNE     loc_FF2E3440 \n" 
+        "    LDR     R1, =0x3E9 \n" 
+        "    MUL     R0, R1, R0 \n" 
+        "    MOV     R1, R7 \n" 
+        "    BL      sub_FF3A2FD0 \n" 
+        "    STR     R0, [R6, #0x4C] \n" 
+        "loc_FF2E3440:\n"
+        "    CMP     R8, #2 \n" 
+        "    CMPNE   R8, #3 \n" 
+        "    BNE     loc_FF2E3478 \n" 
+        "    RSB     R0, R7, R7, LSL #4 \n" 
+        "    LDR     R1, =0x3E9 \n" 
+        "    MOV     R0, R0, LSL #1 \n" 
+        "    STR     R11, [R6, #0x4C] \n" 
+        "    BL      sub_FF3A2FD0 \n" 
+        "    LDR     R1, [R6, #0xE0] \n" 
+        "    MOV     R7, R1 \n" 
+        "    BL      sub_FF3A2FD0 \n" 
+        "    ADD     R0, R0, #1 \n" 
+        "    MUL     R0, R7, R0 \n" 
+        "    STR     R0, [R6, #0x48] \n" 
+        "loc_FF2E3478:\n"
+        "    LDR     R0, [R4, #0xC] \n" 
+        "    LDR     R7, [R10, #0xC] \n" 
+        "    ADDS    R1, R0, #0 \n" 
+        "    MOV     R0, R7, LSR #1 \n" 
+        "    STR     R7, [R6, #0x94] \n" 
+        "    STR     R0, [R6, #0x98] \n" 
+        "    ADD     R0, R9, #3 \n" 
+        "    BIC     R0, R0, #3 \n" 
+        "    STR     R0, [R6, #0xF4] \n" 
+        "    LDR     R2, [R6, #0x48] \n" 
+        "    MOVNE   R1, #1 \n" 
+        "    MOV     R2, R2, LSL #2 \n" 
+        "    ADD     R3, R0, R2 \n" 
+        "    STR     R3, [R6, #0xF8] \n" 
+        "    LDRH    R12, [R6, #4] \n" 
+        "    LDR     R0, [SP, #4] \n" 
+        "    ADD     R2, R2, R3 \n" 
+        "    CMP     R12, #0 \n" 
+        "    ADD     R0, R0, R9 \n" 
+        "    BEQ     loc_FF2E35F8 \n" 
+        "    STR     R2, [R6, #0xFC] \n" 
+        "    LDR     R3, [R6, #0x4C] \n" 
+        "    LDR     R9, =0x15E4BC \n" 
+        "    ADD     R2, R2, R3, LSL #3 \n" 
+        "    ADD     R2, R2, #0x1F \n" 
+        "    BIC     R2, R2, #0x1F \n" 
+        "    STR     R2, [R6, #0x100] \n" 
+        "    LDR     R3, [R6, #0xAC] \n" 
+        "    LDR     R11, =0xC498 \n" 
+        "    ADD     R2, R2, R3 \n" 
+        "    ADD     R3, R2, #0x100000 \n" 
+        "    STR     R2, [R6, #0x78] \n" 
+        "    SUB     R0, R0, R3 \n" 
+        "    RSB     R2, R7, #0 \n" 
+        "    ADD     R0, R0, R2, LSL #1 \n" 
+        "    MOV     R0, R0, LSR #0xF \n" 
+        "    MOV     R0, R0, LSL #0xF \n" 
+        "    STR     R3, [R6, #0x104] \n" 
+        "    ADD     R8, R3, R0 \n" 
+        "    STR     R0, [R6, #0x110] \n" 
+        "    STR     R8, [R6, #0x108] \n" 
+        "    MOV     R2, #0 \n" 
+        "    ADD     R10, R9, #0x10 \n" 
+        "    STR     R8, [R6, #0x10C] \n" 
+        "loc_FF2E3528:\n"
+        "    MLA     R0, R2, R7, R8 \n" 
+        "    ADD     R12, R9, R2, LSL #3 \n" 
+        "    ADD     R0, R0, #3 \n" 
+        "    BIC     R0, R0, #3 \n" 
+        "    STR     R0, [R11, R2, LSL #2] \n" 
+        "    MOV     R0, #0 \n" 
+        "    ADD     R6, R10, R2, LSL #3 \n" 
+        "loc_FF2E3544:\n"
+        "    STR     R3, [R12, R0, LSL #2] \n" 
+        "    STR     R3, [R6, R0, LSL #2] \n" 
+        "    ADD     R0, R0, #1 \n" 
+        "    CMP     R0, #2 \n" 
+        "    BLT     loc_FF2E3544 \n" 
+        "    ADD     R2, R2, #1 \n" 
+        "    CMP     R2, #2 \n" 
+        "    BLT     loc_FF2E3528 \n" 
+        "    LDRH    R3, [R4, #0x14] \n" 
+        "    LDR     R2, [R4, #8] \n" 
+        "    MOV     R0, R5 \n" 
+        "    BL      sub_FF0D5C48 \n" 
+        "    LDR     R1, =0xC318 \n" 
+        "    LDR     R2, [R1, #0x94] \n" 
+        "    ADD     R0, R0, R2 \n" 
+        "    STR     R0, [R1, #0x8C] \n" 
+        "    LDMFD   SP!, {R0-R12,PC} \n"         
+        "loc_FF2E35F8:\n"
+        "    ADD     R2, R2, #0x1F \n" 
+        "    BIC     R2, R2, #0x1F \n" 
+        "    STR     R2, [R6, #0x100] \n" 
+        "    LDR     R3, [R6, #0xAC] \n" 
+        "    ADD     R2, R2, R3 \n" 
+        "    SUB     R0, R0, R2 \n" 
+        "    MOV     R0, R0, LSR #0xF \n" 
+        "    MOV     R0, R0, LSL #0xF \n" 
+        "    STR     R2, [R6, #0x104] \n" 
+        "    STR     R0, [R6, #0x110] \n" 
+        "    ADD     R0, R0, R2 \n" 
+        "    STR     R0, [R6, #0x108] \n" 
+        "    LDRH    R3, [R4, #0x14] \n" 
+        "    MOV     R2, R8 \n" 
+        "    MOV     R0, R5 \n" 
+        "    BL      sub_FF0D5C48 \n" 
+        "    STR     R0, [R6, #0x8C] \n" 
+        "    LDMFD   SP!, {R0-R12,PC} \n" 
+    );
+}
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_auto.S
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_auto.S	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/stubs_auto.S	(revision 1937)
@@ -0,0 +1,195 @@
+/* THIS FILE IS GENERATED */
+/* DO NOT EDIT THIS FILE! */
+
+#include "stubs_asm.h"
+
+STUB(FF000358)
+STUB(FF000B28)
+STUB(FF0011B0)
+STUB(FF00124C)
+STUB(FF001690)
+STUB(FF003CA8)
+STUB(FF005B64)
+STUB(FF005C4C)
+STUB(FF0065DC)
+STUB(FF009CEC)
+STUB(FF00A384)
+STUB(FF00ED74)
+STUB(FF00EDBC)
+STUB(FF00FD70)
+STUB(FF00FDA0)
+STUB(FF00FDB4)
+STUB(FF00FE60)
+STUB(FF022378)
+STUB(FF022E64)
+STUB(FF02396C)
+STUB(FF02397C)
+STUB(FF023E64)
+STUB(FF023EF0)
+STUB(FF024270)
+STUB(FF024634)
+STUB(FF024824)
+STUB(FF024954)
+STUB(FF0253DC)
+STUB(FF025400)
+STUB(FF025410)
+STUB(FF025558)
+STUB(FF02555C)
+STUB(FF025560)
+STUB(FF026668)
+STUB(FF026F24)
+STUB(FF028E3C)
+STUB(FF02B080)
+STUB(FF02B314)
+STUB(FF02B8DC)
+STUB(FF02BAF4)
+STUB(FF02BC8C)
+STUB(FF02BD4C)
+STUB(FF02D710)
+STUB(FF02D758)
+STUB(FF02D7EC)
+STUB(FF02D944)
+STUB(FF02D974)
+STUB(FF02DAFC)
+STUB(FF02DB00)
+STUB(FF045B24)
+STUB(FF07416C)
+STUB(FF074820)
+STUB(FF074B24)
+STUB(FF076EA8)
+STUB(FF077284)
+STUB(FF07728C)
+STUB(FF077294)
+STUB(FF0772A4)
+STUB(FF077478)
+STUB(FF077508)
+STUB(FF0775A0)
+STUB(FF077758)
+STUB(FF0777EC)
+STUB(FF077C2C)
+STUB(FF077F10)
+STUB(FF077F74)
+STUB(FF078168)
+STUB(FF0785B8)
+STUB(FF078668)
+STUB(FF078D90)
+STUB(FF078DE8)
+STUB(FF0790F0)
+STUB(FF07ACBC)
+STUB(FF07AD44)
+STUB(FF07AD64)
+STUB(FF07ADAC)
+STUB(FF07B1D4)
+STUB(FF07B378)
+STUB(FF07CA70)
+STUB(FF07CAD8)
+STUB(FF07E118)
+STUB(FF081B5C)
+STUB(FF081C40)
+STUB(FF081D00)
+STUB(FF081D34)
+STUB(FF084970)
+STUB(FF08A1D4)
+STUB(FF08A35C)
+STUB(FF08A794)
+STUB(FF08ABA0)
+STUB(FF08ABCC)
+STUB(FF08EDF0)
+STUB(FF09303C)
+STUB(FF0AC5E0)
+STUB(FF0AC870)
+STUB(FF0AC8DC)
+STUB(FF0AC920)
+STUB(FF0ACB90)
+STUB(FF0AD3C8)
+STUB(FF0AD864)
+STUB(FF0BBE68)
+STUB(FF0BBFB8)
+STUB(FF0BC010)
+STUB(FF0BC068)
+STUB(FF0BC0C0)
+STUB(FF0BC1A0)
+STUB(FF0BC318)
+STUB(FF0BC3CC)
+STUB(FF0BC6C4)
+STUB(FF0BC92C)
+STUB(FF0BCC20)
+STUB(FF0BCE38)
+STUB(FF0BD2F4)
+STUB(FF0BD3C0)
+STUB(FF0BD4CC)
+STUB(FF0BDB0C)
+STUB(FF0BDD58)
+STUB(FF0BE22C)
+STUB(FF0BE330)
+STUB(FF0BE890)
+STUB(FF0BEAB4)
+STUB(FF0BEC70)
+STUB(FF0BEDE0)
+STUB(FF0BEFE8)
+STUB(FF0BF250)
+STUB(FF0C0AC4)
+STUB(FF0C0D74)
+STUB(FF0C0DD4)
+STUB(FF0C2254)
+STUB(FF0C2284)
+STUB(FF0C22A4)
+STUB(FF0C22E8)
+STUB(FF0C2464)
+STUB(FF0C2518)
+STUB(FF0C25C0)
+STUB(FF0C2664)
+STUB(FF0D5C48)
+STUB(FF17C4A8)
+STUB(FF17C5FC)
+STUB(FF17C860)
+STUB(FF184790)
+STUB(FF184810)
+STUB(FF184BF0)
+STUB(FF184E48)
+STUB(FF185150)
+STUB(FF185D98)
+STUB(FF185DBC)
+STUB(FF186020)
+STUB(FF18605C)
+STUB(FF186E40)
+STUB(FF18AFF4)
+STUB(FF18B260)
+STUB(FF18B31C)
+STUB(FF18B3F0)
+STUB(FF18B4C0)
+STUB(FF18B528)
+STUB(FF18B6A4)
+STUB(FF18B814)
+STUB(FF18B8A8)
+STUB(FF18B964)
+STUB(FF18BA8C)
+STUB(FF18BAFC)
+STUB(FF18BC50)
+STUB(FF18BD80)
+STUB(FF18C020)
+STUB(FF18C3EC)
+STUB(FF18C410)
+STUB(FF18C550)
+STUB(FF18C558)
+STUB(FF18C560)
+STUB(FF18C568)
+STUB(FF18C580)
+STUB(FF18C62C)
+STUB(FF18CB2C)
+STUB(FF18CBE8)
+STUB(FF18CD94)
+STUB(FF18CEC8)
+STUB(FF236124)
+STUB(FF29934C)
+STUB(FF29F3BC)
+STUB(FF29F8B8)
+STUB(FF2E11F8)
+STUB(FF2E321C)
+STUB(FF2E325C)
+STUB(FF2E3698)
+STUB(FF2E47C0)
+STUB(FF2EE7DC)
+STUB(FF3A2ACC)
+STUB(FF3A2D98)
+STUB(FF3A2FD0)
Index: /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/Makefile
===================================================================
--- /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/Makefile	(revision 1937)
+++ /branches/release-1_0/platform/ixus230_elph310hs/sub/100e/Makefile	(revision 1937)
@@ -0,0 +1,6 @@
+topdir=../../../../
+
+OBJS=boot.o stubs_min.o stubs_auto.o stubs_entry.o lib.o stubs_entry_2.o capt_seq.o movie_rec.o
+STUBS_AUTO_DEPS=boot.c capt_seq.c movie_rec.c
+
+include  $(topdir)platform/makefile_sub.inc
Index: /branches/release-1_0/camera_list.csv
===================================================================
--- /branches/release-1_0/camera_list.csv	(revision 1936)
+++ /branches/release-1_0/camera_list.csv	(revision 1937)
@@ -81,4 +81,5 @@
 ixus220_elph300hs,101g,ALPHA,,
 ixus230_elph310hs,100b,ALPHA,,
+ixus230_elph310hs,100e,ALPHA,,
 ixus300_sd4000,100d,BETA,,
 ixus310_elph500hs,100a,BETA,,
