.include "asm/macros.s" .syntax unified .text thumb_func_start SwitchFlashBank SwitchFlashBank: @ 82E185C lsls r0, 24 lsrs r0, 24 ldr r3, =0x0e005555 movs r1, 0xAA strb r1, [r3] ldr r2, =0x0e002aaa movs r1, 0x55 strb r1, [r2] movs r1, 0xB0 strb r1, [r3] movs r1, 0xE0 lsls r1, 20 strb r0, [r1] bx lr .pool thumb_func_end SwitchFlashBank thumb_func_start ReadFlashID @ u16 ReadFlashID() ReadFlashID: @ 82E1880 push {r4,r5,lr} sub sp, 0x44 mov r0, sp bl SetReadFlash1 mov r5, sp adds r5, 0x1 ldr r2, =0x0e005555 movs r0, 0xAA strb r0, [r2] ldr r1, =0x0e002aaa movs r0, 0x55 strb r0, [r1] movs r0, 0x90 strb r0, [r2] add r1, sp, 0x40 ldr r2, =0x00004e20 adds r0, r2, 0 b _082E18B8 .pool _082E18B4: ldrh r0, [r1] subs r0, 0x1 _082E18B8: strh r0, [r1] ldrh r0, [r1] cmp r0, 0 bne _082E18B4 ldr r0, =0x0e000001 bl _call_via_r5 lsls r0, 24 lsrs r4, r0, 16 movs r0, 0xE0 lsls r0, 20 bl _call_via_r5 lsls r0, 24 lsrs r0, 24 orrs r4, r0 ldr r1, =0x0e005555 movs r0, 0xAA strb r0, [r1] ldr r2, =0x0e002aaa movs r0, 0x55 strb r0, [r2] movs r0, 0xF0 strb r0, [r1] strb r0, [r1] add r1, sp, 0x40 ldr r2, =0x00004e20 adds r0, r2, 0 b _082E1908 .pool _082E1904: ldrh r0, [r1] subs r0, 0x1 _082E1908: strh r0, [r1] ldrh r0, [r1] cmp r0, 0 bne _082E1904 adds r0, r4, 0 add sp, 0x44 pop {r4,r5} pop {r1} bx r1 thumb_func_end ReadFlashID thumb_func_start FlashTimerIntr @ void FlashTimerIntr() FlashTimerIntr: @ 82E191C push {lr} ldr r1, =0x03001a72 ldrh r0, [r1] cmp r0, 0 beq _082E1938 ldrh r0, [r1] subs r0, 0x1 strh r0, [r1] lsls r0, 16 cmp r0, 0 bne _082E1938 ldr r1, =0x03007840 movs r0, 0x1 strb r0, [r1] _082E1938: pop {r0} bx r0 .pool thumb_func_end FlashTimerIntr thumb_func_start SetFlashTimerIntr @ void SetFlashTimerIntr(u8 timer_id, void ( **irq_timer_func)()) SetFlashTimerIntr: @ 82E1944 push {lr} adds r2, r1, 0 lsls r0, 24 lsrs r1, r0, 24 cmp r1, 0x3 bhi _082E1978 ldr r0, =0x03001a70 strb r1, [r0] ldr r1, =0x03001a74 ldrb r0, [r0] lsls r0, 2 ldr r3, =0x04000100 adds r0, r3 str r0, [r1] ldr r0, =FlashTimerIntr str r0, [r2] movs r0, 0 b _082E197A .pool _082E1978: movs r0, 0x1 _082E197A: pop {r1} bx r1 thumb_func_end SetFlashTimerIntr thumb_func_start StartFlashTimer StartFlashTimer: @ 82E1980 push {r4-r6,lr} mov r6, r10 mov r5, r9 mov r4, r8 push {r4-r6} lsls r0, 24 lsrs r0, 24 ldr r1, =0x03007864 lsls r2, r0, 1 adds r2, r0 lsls r2, 1 ldr r0, [r1] adds r2, r0 ldr r1, =0x03001a78 ldr r0, =0x04000208 mov r9, r0 ldrh r0, [r0] strh r0, [r1] movs r3, 0 mov r1, r9 strh r3, [r1] ldr r0, =0x03001a74 mov r8, r0 ldr r4, [r0] strh r3, [r4, 0x2] ldr r6, =0x04000200 ldr r1, =0x03001a70 mov r10, r1 ldrb r1, [r1] movs r5, 0x8 adds r0, r5, 0 lsls r0, r1 adds r1, r0, 0 ldrh r0, [r6] orrs r0, r1 strh r0, [r6] ldr r0, =0x03007840 strb r3, [r0] ldr r1, =0x03001a72 ldrh r0, [r2] strh r0, [r1] adds r2, 0x2 ldrh r0, [r2] strh r0, [r4] adds r0, r4, 0x2 mov r1, r8 str r0, [r1] ldrh r0, [r2, 0x2] strh r0, [r4, 0x2] str r4, [r1] ldr r1, =0x04000202 mov r2, r10 ldrb r0, [r2] lsls r5, r0 strh r5, [r1] movs r0, 0x1 mov r3, r9 strh r0, [r3] pop {r3-r5} mov r8, r3 mov r9, r4 mov r10, r5 pop {r4-r6} pop {r0} bx r0 .pool thumb_func_end StartFlashTimer thumb_func_start StopFlashTimer StopFlashTimer: @ 82E1A28 ldr r3, =0x04000208 movs r1, 0 strh r1, [r3] ldr r2, =0x03001a74 ldr r0, [r2] strh r1, [r0] adds r0, 0x2 str r0, [r2] strh r1, [r0] subs r0, 0x2 str r0, [r2] ldr r2, =0x04000200 ldr r0, =0x03001a70 ldrb r0, [r0] movs r1, 0x8 lsls r1, r0 ldrh r0, [r2] bics r0, r1 strh r0, [r2] ldr r0, =0x03001a78 ldrh r0, [r0] strh r0, [r3] bx lr .pool thumb_func_end StopFlashTimer thumb_func_start ReadFlash1 @ u8 ReadFlash1(int address) ReadFlash1: @ 82E1A6C ldrb r0, [r0] bx lr thumb_func_end ReadFlash1 thumb_func_start SetReadFlash1 @ void SetReadFlash1(u8 ( *target_func)(int address)) SetReadFlash1: @ 82E1A70 push {lr} adds r2, r0, 0 ldr r1, =0x03007844 adds r0, r2, 0x1 str r0, [r1] ldr r3, =ReadFlash1 movs r0, 0x1 eors r3, r0 ldr r0, =SetReadFlash1 ldr r1, =ReadFlash1 subs r0, r1 lsls r0, 15 b _082E1AA4 .pool _082E1A98: ldrh r0, [r3] strh r0, [r2] adds r3, 0x2 adds r2, 0x2 subs r0, r1, 0x1 lsls r0, 16 _082E1AA4: lsrs r1, r0, 16 cmp r1, 0 bne _082E1A98 pop {r0} bx r0 thumb_func_end SetReadFlash1 thumb_func_start ReadFlash_Core ReadFlash_Core: @ 82E1AB0 push {r4,lr} adds r4, r0, 0 subs r3, r2, 0x1 cmp r2, 0 beq _082E1ACC movs r2, 0x1 negs r2, r2 _082E1ABE: ldrb r0, [r4] strb r0, [r1] adds r4, 0x1 adds r1, 0x1 subs r3, 0x1 cmp r3, r2 bne _082E1ABE _082E1ACC: pop {r4} pop {r0} bx r0 thumb_func_end ReadFlash_Core thumb_func_start ReadFlash ReadFlash: @ 82E1AD4 push {r4-r7,lr} sub sp, 0x80 adds r5, r1, 0 adds r6, r2, 0 adds r7, r3, 0 lsls r3, r0, 16 lsrs r4, r3, 16 ldr r2, =0x04000204 ldrh r0, [r2] ldr r1, =0x0000fffc ands r0, r1 movs r1, 0x3 orrs r0, r1 strh r0, [r2] ldr r0, =0x03007850 ldr r0, [r0] ldr r1, [r0] movs r0, 0x80 lsls r0, 10 cmp r1, r0 bne _082E1B0C lsrs r0, r3, 20 lsls r0, 24 lsrs r0, 24 bl SwitchFlashBank movs r0, 0xF ands r4, r0 _082E1B0C: ldr r3, =ReadFlash_Core movs r0, 0x1 eors r3, r0 mov r2, sp ldr r0, =ReadFlash ldr r1, =ReadFlash_Core subs r0, r1 lsls r0, 15 b _082E1B40 .pool _082E1B34: ldrh r0, [r3] strh r0, [r2] adds r3, 0x2 adds r2, 0x2 subs r0, r1, 0x1 lsls r0, 16 _082E1B40: lsrs r1, r0, 16 cmp r1, 0 bne _082E1B34 mov r3, sp adds r3, 0x1 ldr r0, =0x03007850 ldr r0, [r0] ldrb r0, [r0, 0x8] lsls r4, r0 adds r0, r4, 0 movs r2, 0xE0 lsls r2, 20 adds r1, r5, r2 adds r0, r1 adds r1, r6, 0 adds r2, r7, 0 bl _call_via_r3 add sp, 0x80 pop {r4-r7} pop {r0} bx r0 .pool thumb_func_end ReadFlash thumb_func_start VerifyFlashSector_Core VerifyFlashSector_Core: @ 82E1B70 push {r4,r5,lr} adds r5, r0, 0 adds r3, r1, 0 subs r4, r2, 0x1 cmp r2, 0 beq _082E1B96 movs r2, 0x1 negs r2, r2 _082E1B80: ldrb r1, [r3] ldrb r0, [r5] adds r5, 0x1 adds r3, 0x1 cmp r1, r0 beq _082E1B90 subs r0, r3, 0x1 b _082E1B98 _082E1B90: subs r4, 0x1 cmp r4, r2 bne _082E1B80 _082E1B96: movs r0, 0 _082E1B98: pop {r4,r5} pop {r1} bx r1 thumb_func_end VerifyFlashSector_Core thumb_func_start VerifyFlashSector VerifyFlashSector: @ 82E1BA0 push {r4,r5,lr} sub sp, 0x100 adds r5, r1, 0 lsls r3, r0, 16 lsrs r4, r3, 16 ldr r2, =0x04000204 ldrh r0, [r2] ldr r1, =0x0000fffc ands r0, r1 movs r1, 0x3 orrs r0, r1 strh r0, [r2] ldr r0, =0x03007850 ldr r0, [r0] ldr r1, [r0] movs r0, 0x80 lsls r0, 10 cmp r1, r0 bne _082E1BD4 lsrs r0, r3, 20 lsls r0, 24 lsrs r0, 24 bl SwitchFlashBank movs r0, 0xF ands r4, r0 _082E1BD4: ldr r3, =VerifyFlashSector_Core movs r0, 0x1 eors r3, r0 mov r2, sp ldr r0, =VerifyFlashSector ldr r1, =VerifyFlashSector_Core subs r0, r1 lsls r0, 15 b _082E1C08 .pool _082E1BFC: ldrh r0, [r3] strh r0, [r2] adds r3, 0x2 adds r2, 0x2 subs r0, r1, 0x1 lsls r0, 16 _082E1C08: lsrs r1, r0, 16 cmp r1, 0 bne _082E1BFC mov r3, sp adds r3, 0x1 ldr r0, =0x03007850 ldr r0, [r0] ldrb r1, [r0, 0x8] lsls r4, r1 adds r1, r4, 0 movs r2, 0xE0 lsls r2, 20 adds r1, r2 ldrh r2, [r0, 0x4] adds r0, r5, 0 bl _call_via_r3 add sp, 0x100 pop {r4,r5} pop {r1} bx r1 .pool thumb_func_end VerifyFlashSector thumb_func_start VerifyFlashSectorFirstNBytes VerifyFlashSectorFirstNBytes: @ 82E1C38 push {r4-r6,lr} sub sp, 0x100 adds r5, r1, 0 adds r6, r2, 0 lsls r2, r0, 16 lsrs r4, r2, 16 ldr r0, =0x03007850 ldr r0, [r0] ldr r1, [r0] movs r0, 0x80 lsls r0, 10 cmp r1, r0 bne _082E1C60 lsrs r0, r2, 20 lsls r0, 24 lsrs r0, 24 bl SwitchFlashBank movs r0, 0xF ands r4, r0 _082E1C60: ldr r2, =0x04000204 ldrh r0, [r2] ldr r1, =0x0000fffc ands r0, r1 movs r1, 0x3 orrs r0, r1 strh r0, [r2] ldr r3, =VerifyFlashSector_Core movs r0, 0x1 eors r3, r0 mov r2, sp ldr r0, =VerifyFlashSector ldr r1, =VerifyFlashSector_Core subs r0, r1 lsls r0, 15 b _082E1CA0 .pool _082E1C94: ldrh r0, [r3] strh r0, [r2] adds r3, 0x2 adds r2, 0x2 subs r0, r1, 0x1 lsls r0, 16 _082E1CA0: lsrs r1, r0, 16 cmp r1, 0 bne _082E1C94 mov r3, sp adds r3, 0x1 ldr r0, =0x03007850 ldr r0, [r0] ldrb r1, [r0, 0x8] lsls r4, r1 adds r1, r4, 0 movs r0, 0xE0 lsls r0, 20 adds r1, r0 adds r0, r5, 0 adds r2, r6, 0 bl _call_via_r3 add sp, 0x100 pop {r4-r6} pop {r1} bx r1 .pool thumb_func_end VerifyFlashSectorFirstNBytes thumb_func_start ProgramFlashSectorsAndVerify ProgramFlashSectorsAndVerify: @ 82E1CD0 push {r4-r6,lr} adds r5, r1, 0 lsls r0, 16 lsrs r4, r0, 16 movs r6, 0 b _082E1CE2 _082E1CDC: adds r0, r6, 0x1 lsls r0, 24 lsrs r6, r0, 24 _082E1CE2: cmp r6, 0x2 bhi _082E1D08 ldr r0, =0x0300784c ldr r2, [r0] adds r0, r4, 0 adds r1, r5, 0 bl _call_via_r2 lsls r0, 16 lsrs r2, r0, 16 cmp r2, 0 bne _082E1CDC adds r0, r4, 0 adds r1, r5, 0 bl VerifyFlashSector adds r2, r0, 0 cmp r2, 0 bne _082E1CDC _082E1D08: adds r0, r2, 0 pop {r4-r6} pop {r1} bx r1 .pool thumb_func_end ProgramFlashSectorsAndVerify thumb_func_start ProgramFlashSectorsVerifyFirstNBytes ProgramFlashSectorsVerifyFirstNBytes: @ 82E1D14 push {r4-r7,lr} adds r5, r1, 0 adds r7, r2, 0 lsls r0, 16 lsrs r4, r0, 16 movs r6, 0 b _082E1D28 _082E1D22: adds r0, r6, 0x1 lsls r0, 24 lsrs r6, r0, 24 _082E1D28: cmp r6, 0x2 bhi _082E1D50 ldr r0, =0x0300784c ldr r2, [r0] adds r0, r4, 0 adds r1, r5, 0 bl _call_via_r2 lsls r0, 16 lsrs r3, r0, 16 cmp r3, 0 bne _082E1D22 adds r0, r4, 0 adds r1, r5, 0 adds r2, r7, 0 bl VerifyFlashSectorFirstNBytes adds r3, r0, 0 cmp r3, 0 bne _082E1D22 _082E1D50: adds r0, r3, 0 pop {r4-r7} pop {r1} bx r1 .pool thumb_func_end ProgramFlashSectorsVerifyFirstNBytes thumb_func_start IdentifyFlash @ _BOOL2 IdentifyFlash() IdentifyFlash: @ 82E1D5C push {r4,lr} ldr r2, =0x04000204 ldrh r0, [r2] ldr r1, =0x0000fffc ands r0, r1 movs r1, 0x3 orrs r0, r1 strh r0, [r2] bl ReadFlashID lsls r0, 16 lsrs r3, r0, 16 ldr r2, =gUnknown_089A30D0 movs r4, 0x1 b _082E1D8A .pool _082E1D88: adds r2, 0x4 _082E1D8A: ldr r1, [r2] adds r0, r1, 0 adds r0, 0x2C ldrb r0, [r0] cmp r0, 0 beq _082E1D9E ldrh r0, [r1, 0x2C] cmp r3, r0 bne _082E1D88 movs r4, 0 _082E1D9E: ldr r1, =0x03007854 ldr r0, [r2] ldr r0, [r0] str r0, [r1] ldr r1, =0x0300784c ldr r0, [r2] ldr r0, [r0, 0x4] str r0, [r1] ldr r1, =0x0300785c ldr r0, [r2] ldr r0, [r0, 0x8] str r0, [r1] ldr r1, =0x03007860 ldr r0, [r2] ldr r0, [r0, 0xC] str r0, [r1] ldr r1, =0x03007848 ldr r0, [r2] ldr r0, [r0, 0x10] str r0, [r1] ldr r1, =0x03007864 ldr r0, [r2] ldr r0, [r0, 0x14] str r0, [r1] ldr r1, =0x03007850 ldr r0, [r2] adds r0, 0x18 str r0, [r1] adds r0, r4, 0 pop {r4} pop {r1} bx r1 .pool thumb_func_end IdentifyFlash thumb_func_start PollingSR_COMMON PollingSR_COMMON: @ 82E1DFC push {r4-r7,lr} mov r7, r9 mov r6, r8 push {r6,r7} adds r4, r1, 0 lsls r0, 24 lsrs r7, r0, 24 lsls r2, 24 lsrs r5, r2, 24 movs r0, 0 mov r8, r0 adds r0, r7, 0 bl StartFlashTimer ldr r6, =0x03007844 ldr r1, =0x0e005555 mov r9, r1 b _082E1E60 .pool _082E1E28: movs r0, 0xF0 mov r1, r9 strb r0, [r1] movs r0, 0xA0 lsls r0, 8 b _082E1E56 _082E1E34: ldr r0, =0x03007840 ldrb r0, [r0] cmp r0, 0 beq _082E1E60 ldr r1, [r6] adds r0, r4, 0 bl _call_via_r1 lsls r0, 24 lsrs r0, 24 cmp r0, r5 beq _082E1E88 movs r0, 0xF0 mov r1, r9 strb r0, [r1] movs r0, 0xC0 lsls r0, 8 _082E1E56: orrs r7, r0 mov r8, r7 b _082E1E88 .pool _082E1E60: ldr r1, [r6] adds r0, r4, 0 bl _call_via_r1 lsls r0, 24 lsrs r1, r0, 24 cmp r1, r5 beq _082E1E88 movs r0, 0x20 ands r0, r1 cmp r0, 0 beq _082E1E34 ldr r1, [r6] adds r0, r4, 0 bl _call_via_r1 lsls r0, 24 lsrs r0, 24 cmp r0, r5 bne _082E1E28 _082E1E88: bl StopFlashTimer mov r0, r8 pop {r3,r4} mov r8, r3 mov r9, r4 pop {r4-r7} pop {r1} bx r1 thumb_func_end PollingSR_COMMON thumb_func_start EraseFlashChip EraseFlashChip: @ 82E1E9C push {r4-r6,lr} sub sp, 0x40 ldr r5, =0x04000204 ldrh r1, [r5] ldr r6, =0x0000fffc ands r1, r6 ldr r0, =0x03007850 ldr r0, [r0] ldrh r0, [r0, 0x10] orrs r1, r0 strh r1, [r5] ldr r1, =0x0e005555 movs r4, 0xAA strb r4, [r1] ldr r3, =0x0e002aaa movs r2, 0x55 strb r2, [r3] movs r0, 0x80 strb r0, [r1] strb r4, [r1] strb r2, [r3] movs r0, 0x10 strb r0, [r1] mov r0, sp bl SetReadFlash1 ldr r0, =0x03007848 movs r1, 0xE0 lsls r1, 20 ldr r3, [r0] movs r0, 0x3 movs r2, 0xFF bl _call_via_r3 lsls r0, 16 lsrs r0, 16 ldrh r1, [r5] ands r1, r6 movs r2, 0x3 orrs r1, r2 strh r1, [r5] add sp, 0x40 pop {r4-r6} pop {r1} bx r1 .pool thumb_func_end EraseFlashChip thumb_func_start EraseFlashSector EraseFlashSector: @ 82E1F10 push {r4-r7,lr} sub sp, 0x40 lsls r0, 16 lsrs r6, r0, 16 ldr r0, =0x03007850 ldr r0, [r0] ldrh r0, [r0, 0xA] cmp r6, r0 bcc _082E1F30 ldr r0, =0x000080ff b _082E1FD0 .pool _082E1F30: lsrs r0, r6, 4 lsls r0, 24 lsrs r0, 24 bl SwitchFlashBank movs r0, 0xF ands r6, r0 movs r7, 0 _082E1F40: ldr r3, =0x04000204 ldrh r1, [r3] ldr r0, =0x0000fffc ands r1, r0 ldr r0, =0x03007850 ldr r2, [r0] ldrh r0, [r2, 0x10] orrs r1, r0 strh r1, [r3] ldrb r4, [r2, 0x8] adds r0, r6, 0 lsls r0, r4 adds r4, r0, 0 movs r0, 0xE0 lsls r0, 20 adds r4, r0 ldr r1, =0x0e005555 movs r5, 0xAA strb r5, [r1] ldr r3, =0x0e002aaa movs r2, 0x55 strb r2, [r3] movs r0, 0x80 strb r0, [r1] strb r5, [r1] strb r2, [r3] movs r0, 0x30 strb r0, [r4] mov r0, sp bl SetReadFlash1 ldr r0, =0x03007848 ldr r3, [r0] movs r0, 0x2 adds r1, r4, 0 movs r2, 0xFF bl _call_via_r3 lsls r0, 16 lsrs r3, r0, 16 movs r0, 0xA0 lsls r0, 8 ands r0, r3 cmp r0, 0 beq _082E1FC0 cmp r7, 0x3 bhi _082E1FC0 adds r0, r7, 0x1 lsls r0, 16 lsrs r7, r0, 16 b _082E1F40 .pool _082E1FC0: ldr r2, =0x04000204 ldrh r0, [r2] ldr r1, =0x0000fffc ands r0, r1 movs r1, 0x3 orrs r0, r1 strh r0, [r2] adds r0, r3, 0 _082E1FD0: add sp, 0x40 pop {r4-r7} pop {r1} bx r1 .pool thumb_func_end EraseFlashSector thumb_func_start ProgramFlashByte ProgramFlashByte: @ 82E1FE0 push {r4-r7,lr} sub sp, 0x40 adds r6, r1, 0 lsls r1, r0, 16 lsrs r4, r1, 16 lsls r2, 24 lsrs r7, r2, 24 ldr r5, =0x03007850 ldr r0, [r5] ldr r0, [r0, 0x4] cmp r6, r0 bcs _082E2068 lsrs r0, r1, 20 lsls r0, 24 lsrs r0, 24 bl SwitchFlashBank movs r0, 0xF ldr r1, [r5] ands r4, r0 ldrb r1, [r1, 0x8] lsls r4, r1 movs r1, 0xE0 lsls r1, 20 adds r0, r6, r1 adds r4, r0 mov r0, sp bl SetReadFlash1 ldr r2, =0x04000204 ldrh r0, [r2] ldr r1, =0x0000fffc ands r0, r1 ldr r1, [r5] ldrh r1, [r1, 0x10] orrs r0, r1 strh r0, [r2] ldr r2, =0x0e005555 movs r0, 0xAA strb r0, [r2] ldr r1, =0x0e002aaa movs r0, 0x55 strb r0, [r1] movs r0, 0xA0 strb r0, [r2] strb r7, [r4] ldr r0, =0x03007848 ldr r3, [r0] movs r0, 0x1 adds r1, r4, 0 adds r2, r7, 0 bl _call_via_r3 lsls r0, 16 lsrs r0, 16 b _082E206C .pool _082E2068: movs r0, 0x80 lsls r0, 8 _082E206C: add sp, 0x40 pop {r4-r7} pop {r1} bx r1 thumb_func_end ProgramFlashByte thumb_func_start ProgramFlashByteInternal ProgramFlashByteInternal: @ 82E2074 push {r4,lr} ldr r4, =0x0e005555 movs r2, 0xAA strb r2, [r4] ldr r3, =0x0e002aaa movs r2, 0x55 strb r2, [r3] movs r2, 0xA0 strb r2, [r4] ldrb r2, [r0] strb r2, [r1] ldr r3, =0x03007848 ldrb r2, [r0] ldr r3, [r3] movs r0, 0x1 bl _call_via_r3 lsls r0, 16 lsrs r0, 16 pop {r4} pop {r1} bx r1 .pool thumb_func_end ProgramFlashByteInternal thumb_func_start ProgramFlashSector ProgramFlashSector: @ 82E20AC push {r4-r7,lr} sub sp, 0x40 adds r7, r1, 0 lsls r0, 16 lsrs r4, r0, 16 ldr r0, =0x03007850 ldr r0, [r0] ldrh r0, [r0, 0xA] cmp r4, r0 bcc _082E20CC ldr r0, =0x000080ff b _082E2146 .pool _082E20CC: adds r0, r4, 0 bl EraseFlashSector lsls r0, 16 lsrs r5, r0, 16 cmp r5, 0 bne _082E2144 lsrs r0, r4, 4 lsls r0, 24 lsrs r0, 24 bl SwitchFlashBank movs r0, 0xF ands r4, r0 mov r0, sp bl SetReadFlash1 ldr r3, =0x04000204 ldrh r1, [r3] ldr r0, =0x0000fffc ands r1, r0 ldr r0, =0x03007850 ldr r2, [r0] ldrh r0, [r2, 0x10] orrs r1, r0 strh r1, [r3] ldr r1, =0x03007858 ldr r0, [r2, 0x4] strh r0, [r1] ldrb r0, [r2, 0x8] lsls r4, r0 movs r0, 0xE0 lsls r0, 20 adds r4, r0 adds r6, r1, 0 b _082E212E .pool _082E2124: ldrh r0, [r6] subs r0, 0x1 strh r0, [r6] adds r7, 0x1 adds r4, 0x1 _082E212E: ldrh r0, [r6] cmp r0, 0 beq _082E2144 adds r0, r7, 0 adds r1, r4, 0 bl ProgramFlashByteInternal lsls r0, 16 lsrs r5, r0, 16 cmp r5, 0 beq _082E2124 _082E2144: adds r0, r5, 0 _082E2146: add sp, 0x40 pop {r4-r7} pop {r1} bx r1 thumb_func_end ProgramFlashSector .align 2, 0 @ Don't pad with nop.