summaryrefslogtreecommitdiff
path: root/asm/libagbbackup.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/libagbbackup.s')
-rw-r--r--asm/libagbbackup.s1161
1 files changed, 1161 insertions, 0 deletions
diff --git a/asm/libagbbackup.s b/asm/libagbbackup.s
new file mode 100644
index 000000000..3104489b1
--- /dev/null
+++ b/asm/libagbbackup.s
@@ -0,0 +1,1161 @@
+ thumb_func_start SwitchFlashBank
+SwitchFlashBank: @ 82E185C
+ lsls r0, 24
+ lsrs r0, 24
+ ldr r3, _082E1878
+ movs r1, 0xAA
+ strb r1, [r3]
+ ldr r2, _082E187C
+ movs r1, 0x55
+ strb r1, [r2]
+ movs r1, 0xB0
+ strb r1, [r3]
+ movs r1, 0xE0
+ lsls r1, 20
+ strb r0, [r1]
+ bx lr
+ .align 2, 0
+_082E1878: .4byte 0x0e005555
+_082E187C: .4byte 0x0e002aaa
+ thumb_func_end SwitchFlashBank
+
+ thumb_func_start ReadFlashID
+ReadFlashID: @ 82E1880
+ push {r4,r5,lr}
+ sub sp, 0x44
+ mov r0, sp
+ bl SetReadFlash1
+ mov r5, sp
+ adds r5, 0x1
+ ldr r2, _082E18A8
+ movs r0, 0xAA
+ strb r0, [r2]
+ ldr r1, _082E18AC
+ movs r0, 0x55
+ strb r0, [r1]
+ movs r0, 0x90
+ strb r0, [r2]
+ add r1, sp, 0x40
+ ldr r2, _082E18B0
+ adds r0, r2, 0
+ b _082E18B8
+ .align 2, 0
+_082E18A8: .4byte 0x0e005555
+_082E18AC: .4byte 0x0e002aaa
+_082E18B0: .4byte 0x00004e20
+_082E18B4:
+ ldrh r0, [r1]
+ subs r0, 0x1
+_082E18B8:
+ strh r0, [r1]
+ ldrh r0, [r1]
+ cmp r0, 0
+ bne _082E18B4
+ ldr r0, _082E18F4
+ 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, _082E18F8
+ movs r0, 0xAA
+ strb r0, [r1]
+ ldr r2, _082E18FC
+ movs r0, 0x55
+ strb r0, [r2]
+ movs r0, 0xF0
+ strb r0, [r1]
+ strb r0, [r1]
+ add r1, sp, 0x40
+ ldr r2, _082E1900
+ adds r0, r2, 0
+ b _082E1908
+ .align 2, 0
+_082E18F4: .4byte 0x0e000001
+_082E18F8: .4byte 0x0e005555
+_082E18FC: .4byte 0x0e002aaa
+_082E1900: .4byte 0x00004e20
+_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
+FlashTimerIntr: @ 82E191C
+ push {lr}
+ ldr r1, _082E193C
+ 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, _082E1940
+ movs r0, 0x1
+ strb r0, [r1]
+_082E1938:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_082E193C: .4byte 0x03001a72
+_082E1940: .4byte 0x03007840
+ thumb_func_end FlashTimerIntr
+
+ thumb_func_start SetFlashTimerIntr
+SetFlashTimerIntr: @ 82E1944
+ push {lr}
+ adds r2, r1, 0
+ lsls r0, 24
+ lsrs r1, r0, 24
+ cmp r1, 0x3
+ bhi _082E1978
+ ldr r0, _082E1968
+ strb r1, [r0]
+ ldr r1, _082E196C
+ ldrb r0, [r0]
+ lsls r0, 2
+ ldr r3, _082E1970
+ adds r0, r3
+ str r0, [r1]
+ ldr r0, _082E1974
+ str r0, [r2]
+ movs r0, 0
+ b _082E197A
+ .align 2, 0
+_082E1968: .4byte 0x03001a70
+_082E196C: .4byte 0x03001a74
+_082E1970: .4byte 0x04000100
+_082E1974: .4byte FlashTimerIntr + 1
+_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, _082E1A04
+ lsls r2, r0, 1
+ adds r2, r0
+ lsls r2, 1
+ ldr r0, [r1]
+ adds r2, r0
+ ldr r1, _082E1A08
+ ldr r0, _082E1A0C
+ mov r9, r0
+ ldrh r0, [r0]
+ strh r0, [r1]
+ movs r3, 0
+ mov r1, r9
+ strh r3, [r1]
+ ldr r0, _082E1A10
+ mov r8, r0
+ ldr r4, [r0]
+ strh r3, [r4, 0x2]
+ ldr r6, _082E1A14
+ ldr r1, _082E1A18
+ 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, _082E1A1C
+ strb r3, [r0]
+ ldr r1, _082E1A20
+ 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, _082E1A24
+ 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
+ .align 2, 0
+_082E1A04: .4byte 0x03007864
+_082E1A08: .4byte 0x03001a78
+_082E1A0C: .4byte 0x04000208
+_082E1A10: .4byte 0x03001a74
+_082E1A14: .4byte 0x04000200
+_082E1A18: .4byte 0x03001a70
+_082E1A1C: .4byte 0x03007840
+_082E1A20: .4byte 0x03001a72
+_082E1A24: .4byte 0x04000202
+ thumb_func_end StartFlashTimer
+
+ thumb_func_start StopFlashTimer
+StopFlashTimer: @ 82E1A28
+ ldr r3, _082E1A58
+ movs r1, 0
+ strh r1, [r3]
+ ldr r2, _082E1A5C
+ ldr r0, [r2]
+ strh r1, [r0]
+ adds r0, 0x2
+ str r0, [r2]
+ strh r1, [r0]
+ subs r0, 0x2
+ str r0, [r2]
+ ldr r2, _082E1A60
+ ldr r0, _082E1A64
+ ldrb r0, [r0]
+ movs r1, 0x8
+ lsls r1, r0
+ ldrh r0, [r2]
+ bics r0, r1
+ strh r0, [r2]
+ ldr r0, _082E1A68
+ ldrh r0, [r0]
+ strh r0, [r3]
+ bx lr
+ .align 2, 0
+_082E1A58: .4byte 0x04000208
+_082E1A5C: .4byte 0x03001a74
+_082E1A60: .4byte 0x04000200
+_082E1A64: .4byte 0x03001a70
+_082E1A68: .4byte 0x03001a78
+ thumb_func_end StopFlashTimer
+
+ thumb_func_start ReadFlash1
+ReadFlash1: @ 82E1A6C
+ ldrb r0, [r0]
+ bx lr
+ thumb_func_end ReadFlash1
+
+ thumb_func_start SetReadFlash1
+SetReadFlash1: @ 82E1A70
+ push {lr}
+ adds r2, r0, 0
+ ldr r1, _082E1A8C
+ adds r0, r2, 0x1
+ str r0, [r1]
+ ldr r3, _082E1A90
+ movs r0, 0x1
+ eors r3, r0
+ ldr r0, _082E1A94
+ ldr r1, _082E1A90
+ subs r0, r1
+ lsls r0, 15
+ b _082E1AA4
+ .align 2, 0
+_082E1A8C: .4byte 0x03007844
+_082E1A90: .4byte ReadFlash1 + 1
+_082E1A94: .4byte SetReadFlash1 + 1
+_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, _082E1B20
+ ldrh r0, [r2]
+ ldr r1, _082E1B24
+ ands r0, r1
+ movs r1, 0x3
+ orrs r0, r1
+ strh r0, [r2]
+ ldr r0, _082E1B28
+ 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, _082E1B2C
+ movs r0, 0x1
+ eors r3, r0
+ mov r2, sp
+ ldr r0, _082E1B30
+ ldr r1, _082E1B2C
+ subs r0, r1
+ lsls r0, 15
+ b _082E1B40
+ .align 2, 0
+_082E1B20: .4byte 0x04000204
+_082E1B24: .4byte 0x0000fffc
+_082E1B28: .4byte 0x03007850
+_082E1B2C: .4byte ReadFlash_Core + 1
+_082E1B30: .4byte ReadFlash + 1
+_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, _082E1B6C
+ 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
+ .align 2, 0
+_082E1B6C: .4byte 0x03007850
+ 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, _082E1BE8
+ ldrh r0, [r2]
+ ldr r1, _082E1BEC
+ ands r0, r1
+ movs r1, 0x3
+ orrs r0, r1
+ strh r0, [r2]
+ ldr r0, _082E1BF0
+ 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, _082E1BF4
+ movs r0, 0x1
+ eors r3, r0
+ mov r2, sp
+ ldr r0, _082E1BF8
+ ldr r1, _082E1BF4
+ subs r0, r1
+ lsls r0, 15
+ b _082E1C08
+ .align 2, 0
+_082E1BE8: .4byte 0x04000204
+_082E1BEC: .4byte 0x0000fffc
+_082E1BF0: .4byte 0x03007850
+_082E1BF4: .4byte VerifyFlashSector_Core + 1
+_082E1BF8: .4byte VerifyFlashSector + 1
+_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, _082E1C34
+ 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
+ .align 2, 0
+_082E1C34: .4byte 0x03007850
+ 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, _082E1C80
+ 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, _082E1C84
+ ldrh r0, [r2]
+ ldr r1, _082E1C88
+ ands r0, r1
+ movs r1, 0x3
+ orrs r0, r1
+ strh r0, [r2]
+ ldr r3, _082E1C8C
+ movs r0, 0x1
+ eors r3, r0
+ mov r2, sp
+ ldr r0, _082E1C90
+ ldr r1, _082E1C8C
+ subs r0, r1
+ lsls r0, 15
+ b _082E1CA0
+ .align 2, 0
+_082E1C80: .4byte 0x03007850
+_082E1C84: .4byte 0x04000204
+_082E1C88: .4byte 0x0000fffc
+_082E1C8C: .4byte VerifyFlashSector_Core + 1
+_082E1C90: .4byte VerifyFlashSector + 1
+_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, _082E1CCC
+ 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
+ .align 2, 0
+_082E1CCC: .4byte 0x03007850
+ 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, _082E1D10
+ 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
+ .align 2, 0
+_082E1D10: .4byte 0x0300784c
+ 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, _082E1D58
+ 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
+ .align 2, 0
+_082E1D58: .4byte 0x0300784c
+ thumb_func_end ProgramFlashSectorsVerifyFirstNBytes
+
+ thumb_func_start IdentifyFlash
+IdentifyFlash: @ 82E1D5C
+ push {r4,lr}
+ ldr r2, _082E1D7C
+ ldrh r0, [r2]
+ ldr r1, _082E1D80
+ ands r0, r1
+ movs r1, 0x3
+ orrs r0, r1
+ strh r0, [r2]
+ bl ReadFlashID
+ lsls r0, 16
+ lsrs r3, r0, 16
+ ldr r2, _082E1D84
+ movs r4, 0x1
+ b _082E1D8A
+ .align 2, 0
+_082E1D7C: .4byte 0x04000204
+_082E1D80: .4byte 0x0000fffc
+_082E1D84: .4byte 0x089a30d0
+_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, _082E1DE0
+ ldr r0, [r2]
+ ldr r0, [r0]
+ str r0, [r1]
+ ldr r1, _082E1DE4
+ ldr r0, [r2]
+ ldr r0, [r0, 0x4]
+ str r0, [r1]
+ ldr r1, _082E1DE8
+ ldr r0, [r2]
+ ldr r0, [r0, 0x8]
+ str r0, [r1]
+ ldr r1, _082E1DEC
+ ldr r0, [r2]
+ ldr r0, [r0, 0xC]
+ str r0, [r1]
+ ldr r1, _082E1DF0
+ ldr r0, [r2]
+ ldr r0, [r0, 0x10]
+ str r0, [r1]
+ ldr r1, _082E1DF4
+ ldr r0, [r2]
+ ldr r0, [r0, 0x14]
+ str r0, [r1]
+ ldr r1, _082E1DF8
+ ldr r0, [r2]
+ adds r0, 0x18
+ str r0, [r1]
+ adds r0, r4, 0
+ pop {r4}
+ pop {r1}
+ bx r1
+ .align 2, 0
+_082E1DE0: .4byte 0x03007854
+_082E1DE4: .4byte 0x0300784c
+_082E1DE8: .4byte 0x0300785c
+_082E1DEC: .4byte 0x03007860
+_082E1DF0: .4byte 0x03007848
+_082E1DF4: .4byte 0x03007864
+_082E1DF8: .4byte 0x03007850
+ 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, _082E1E20
+ ldr r1, _082E1E24
+ mov r9, r1
+ b _082E1E60
+ .align 2, 0
+_082E1E20: .4byte 0x03007844
+_082E1E24: .4byte 0x0e005555
+_082E1E28:
+ movs r0, 0xF0
+ mov r1, r9
+ strb r0, [r1]
+ movs r0, 0xA0
+ lsls r0, 8
+ b _082E1E56
+_082E1E34:
+ ldr r0, _082E1E5C
+ 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
+ .align 2, 0
+_082E1E5C: .4byte 0x03007840
+_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, _082E1EF8
+ ldrh r1, [r5]
+ ldr r6, _082E1EFC
+ ands r1, r6
+ ldr r0, _082E1F00
+ ldr r0, [r0]
+ ldrh r0, [r0, 0x10]
+ orrs r1, r0
+ strh r1, [r5]
+ ldr r1, _082E1F04
+ movs r4, 0xAA
+ strb r4, [r1]
+ ldr r3, _082E1F08
+ 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, _082E1F0C
+ 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
+ .align 2, 0
+_082E1EF8: .4byte 0x04000204
+_082E1EFC: .4byte 0x0000fffc
+_082E1F00: .4byte 0x03007850
+_082E1F04: .4byte 0x0e005555
+_082E1F08: .4byte 0x0e002aaa
+_082E1F0C: .4byte 0x03007848
+ 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, _082E1F28
+ ldr r0, [r0]
+ ldrh r0, [r0, 0xA]
+ cmp r6, r0
+ bcc _082E1F30
+ ldr r0, _082E1F2C
+ b _082E1FD0
+ .align 2, 0
+_082E1F28: .4byte 0x03007850
+_082E1F2C: .4byte 0x000080ff
+_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, _082E1FA8
+ ldrh r1, [r3]
+ ldr r0, _082E1FAC
+ ands r1, r0
+ ldr r0, _082E1FB0
+ 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, _082E1FB4
+ movs r5, 0xAA
+ strb r5, [r1]
+ ldr r3, _082E1FB8
+ 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, _082E1FBC
+ 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
+ .align 2, 0
+_082E1FA8: .4byte 0x04000204
+_082E1FAC: .4byte 0x0000fffc
+_082E1FB0: .4byte 0x03007850
+_082E1FB4: .4byte 0x0e005555
+_082E1FB8: .4byte 0x0e002aaa
+_082E1FBC: .4byte 0x03007848
+_082E1FC0:
+ ldr r2, _082E1FD8
+ ldrh r0, [r2]
+ ldr r1, _082E1FDC
+ 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
+ .align 2, 0
+_082E1FD8: .4byte 0x04000204
+_082E1FDC: .4byte 0x0000fffc
+ 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, _082E2050
+ 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, _082E2054
+ ldrh r0, [r2]
+ ldr r1, _082E2058
+ ands r0, r1
+ ldr r1, [r5]
+ ldrh r1, [r1, 0x10]
+ orrs r0, r1
+ strh r0, [r2]
+ ldr r2, _082E205C
+ movs r0, 0xAA
+ strb r0, [r2]
+ ldr r1, _082E2060
+ movs r0, 0x55
+ strb r0, [r1]
+ movs r0, 0xA0
+ strb r0, [r2]
+ strb r7, [r4]
+ ldr r0, _082E2064
+ 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
+ .align 2, 0
+_082E2050: .4byte 0x03007850
+_082E2054: .4byte 0x04000204
+_082E2058: .4byte 0x0000fffc
+_082E205C: .4byte 0x0e005555
+_082E2060: .4byte 0x0e002aaa
+_082E2064: .4byte 0x03007848
+_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, _082E20A0
+ movs r2, 0xAA
+ strb r2, [r4]
+ ldr r3, _082E20A4
+ movs r2, 0x55
+ strb r2, [r3]
+ movs r2, 0xA0
+ strb r2, [r4]
+ ldrb r2, [r0]
+ strb r2, [r1]
+ ldr r3, _082E20A8
+ 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
+ .align 2, 0
+_082E20A0: .4byte 0x0e005555
+_082E20A4: .4byte 0x0e002aaa
+_082E20A8: .4byte 0x03007848
+ 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, _082E20C4
+ ldr r0, [r0]
+ ldrh r0, [r0, 0xA]
+ cmp r4, r0
+ bcc _082E20CC
+ ldr r0, _082E20C8
+ b _082E2146
+ .align 2, 0
+_082E20C4: .4byte 0x03007850
+_082E20C8: .4byte 0x000080ff
+_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, _082E2114
+ ldrh r1, [r3]
+ ldr r0, _082E2118
+ ands r1, r0
+ ldr r0, _082E211C
+ ldr r2, [r0]
+ ldrh r0, [r2, 0x10]
+ orrs r1, r0
+ strh r1, [r3]
+ ldr r1, _082E2120
+ 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
+ .align 2, 0
+_082E2114: .4byte 0x04000204
+_082E2118: .4byte 0x0000fffc
+_082E211C: .4byte 0x03007850
+_082E2120: .4byte 0x03007858
+_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