summaryrefslogtreecommitdiff
path: root/asm/flash.s
diff options
context:
space:
mode:
Diffstat (limited to 'asm/flash.s')
-rw-r--r--asm/flash.s218
1 files changed, 218 insertions, 0 deletions
diff --git a/asm/flash.s b/asm/flash.s
new file mode 100644
index 0000000..4e95464
--- /dev/null
+++ b/asm/flash.s
@@ -0,0 +1,218 @@
+ .include "constants/gba_constants.inc"
+ .include "asm/macros.inc"
+
+ .syntax unified
+
+ .text
+
+ thumb_func_start sub_800CF0C
+sub_800CF0C:
+ push {lr}
+ bl IdentifyFlash
+ lsls r0, 16
+ cmp r0, 0
+ bne _0800CF32
+ movs r0, 0x3
+ bl sub_800B6E8
+ adds r1, r0, 0
+ movs r0, 0x2
+ bl SetFlashTimerIntr
+ lsls r0, 16
+ cmp r0, 0
+ bne _0800CF32
+ ldr r1, _0800CF38
+ movs r0, 0x1
+ strb r0, [r1]
+_0800CF32:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0800CF38: .4byte gUnknown_203B0B4
+ thumb_func_end sub_800CF0C
+
+ thumb_func_start sub_800CF3C
+sub_800CF3C:
+ push {lr}
+ ldr r0, _0800CF54
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _0800CF4E
+ ldr r0, _0800CF58
+ ldr r0, [r0]
+ bl _call_via_r0
+_0800CF4E:
+ pop {r0}
+ bx r0
+ .align 2, 0
+_0800CF54: .4byte gUnknown_203B0B4
+_0800CF58: .4byte EraseFlashChip
+ thumb_func_end sub_800CF3C
+
+ thumb_func_start sub_800CF5C
+sub_800CF5C:
+ push {r4-r7,lr}
+ mov r7, r8
+ push {r7}
+ adds r6, r0, 0
+ adds r5, r2, 0
+ ldr r0, _0800CFAC
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _0800CFB4
+ adds r4, r1, 0
+ ldr r0, _0800CFB0
+ cmp r5, r0
+ ble _0800CF94
+ movs r7, 0x80
+ lsls r7, 5
+ mov r8, r0
+_0800CF7C:
+ lsls r0, r6, 16
+ lsrs r0, 16
+ movs r1, 0
+ adds r2, r4, 0
+ adds r3, r7, 0
+ bl ReadFlash
+ adds r6, 0x1
+ adds r4, r7
+ subs r5, r7
+ cmp r5, r8
+ bgt _0800CF7C
+_0800CF94:
+ cmp r5, 0
+ ble _0800CFA6
+ lsls r0, r6, 16
+ lsrs r0, 16
+ movs r1, 0
+ adds r2, r4, 0
+ adds r3, r5, 0
+ bl ReadFlash
+_0800CFA6:
+ movs r0, 0
+ b _0800CFB6
+ .align 2, 0
+_0800CFAC: .4byte gUnknown_203B0B4
+_0800CFB0: .4byte 0x00000fff
+_0800CFB4:
+ movs r0, 0x3
+_0800CFB6:
+ pop {r3}
+ mov r8, r3
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_800CF5C
+
+ thumb_func_start sub_800CFC0
+sub_800CFC0:
+ push {r4-r6,lr}
+ ldr r4, _0800CFD8
+ add sp, r4
+ adds r6, r0, 0
+ adds r5, r2, 0
+ ldr r0, _0800CFDC
+ ldrb r0, [r0]
+ cmp r0, 0
+ beq _0800D03C
+ movs r2, 0x1
+ adds r4, r1, 0
+ b _0800CFEC
+ .align 2, 0
+_0800CFD8: .4byte 0xfffff000
+_0800CFDC: .4byte gUnknown_203B0B4
+_0800CFE0:
+ adds r6, 0x1
+ movs r0, 0x80
+ lsls r0, 5
+ adds r4, r0
+ ldr r0, _0800D034
+ adds r5, r0
+_0800CFEC:
+ ldr r0, _0800D038
+ cmp r5, r0
+ ble _0800D002
+ adds r0, r6, 0
+ adds r1, r4, 0
+ bl sub_800D04C
+ lsls r0, 24
+ lsrs r2, r0, 24
+ cmp r2, 0
+ bne _0800CFE0
+_0800D002:
+ cmp r2, 0
+ beq _0800D03C
+ cmp r5, 0
+ ble _0800D02C
+ movs r2, 0x80
+ lsls r2, 5
+ mov r0, sp
+ movs r1, 0xFF
+ bl MemoryFill8
+ mov r0, sp
+ adds r1, r4, 0
+ adds r2, r5, 0
+ bl MemoryCopy8
+ adds r0, r6, 0
+ mov r1, sp
+ bl sub_800D04C
+ lsls r0, 24
+ lsrs r2, r0, 24
+_0800D02C:
+ cmp r2, 0
+ beq _0800D03C
+ movs r0, 0
+ b _0800D03E
+ .align 2, 0
+_0800D034: .4byte 0xfffff000
+_0800D038: .4byte 0x00000fff
+_0800D03C:
+ movs r0, 0x3
+_0800D03E:
+ movs r3, 0x80
+ lsls r3, 5
+ add sp, r3
+ pop {r4-r6}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_800CFC0
+
+ thumb_func_start sub_800D04C
+sub_800D04C:
+ push {r4-r7,lr}
+ adds r5, r1, 0
+ movs r6, 0x3
+ ldr r7, _0800D07C
+ lsls r0, 16
+ lsrs r4, r0, 16
+_0800D058:
+ ldr r2, [r7]
+ adds r0, r4, 0
+ adds r1, r5, 0
+ bl _call_via_r2
+ lsls r0, 16
+ cmp r0, 0
+ bne _0800D080
+ adds r0, r4, 0
+ adds r1, r5, 0
+ movs r2, 0x80
+ lsls r2, 5
+ bl VerifyFlashSectorNBytes
+ cmp r0, 0
+ bne _0800D080
+ movs r0, 0x1
+ b _0800D08A
+ .align 2, 0
+_0800D07C: .4byte ProgramFlashSector
+_0800D080:
+ adds r0, r6, 0
+ subs r6, 0x1
+ cmp r0, 0
+ bgt _0800D058
+ movs r0, 0
+_0800D08A:
+ pop {r4-r7}
+ pop {r1}
+ bx r1
+ thumb_func_end sub_800D04C
+
+ .align 2, 0 @ Don't pad with nop.