summaryrefslogtreecommitdiff
path: root/arm9/asm/CTRDG_flash_MX29L512.s
blob: f075c9f0abddc3ac31f894b9b9630874b6ce6ed7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
	.include "asm/macros.inc"
	.include "global.inc"

	.extern UNK_021D6B08
	.extern UNK_021D6B20
	.extern UNK_021D6B0C

    .text

	arm_func_start CTRDGi_WriteFlashSectorAsyncMX5
CTRDGi_WriteFlashSectorAsyncMX5: ; 0x020DD868
	stmdb sp!, {lr}
	sub sp, sp, #0x24
	str r1, [sp, #0xc]
	strh r0, [sp, #0x20]
	ldr r1, _020DD890 ; =CTRDGi_WriteFlashSectorCoreMX5
	add r0, sp, #0x0
	bl CTRDGi_SetTask
	add sp, sp, #0x24
	ldmia sp!, {lr}
	bx lr
	.balign 4
_020DD890: .word CTRDGi_WriteFlashSectorCoreMX5

	arm_func_start CTRDGi_WriteFlashSectorMX5
CTRDGi_WriteFlashSectorMX5: ; 0x020DD894
	stmdb sp!, {lr}
	sub sp, sp, #0x24
	strh r0, [sp, #0x20]
	add r0, sp, #0x0
	str r1, [sp, #0xc]
	bl CTRDGi_WriteFlashSectorCoreMX5
	mov r0, r0, lsl #0x10
	mov r0, r0, lsr #0x10
	add sp, sp, #0x24
	ldmia sp!, {lr}
	bx lr

	arm_func_start CTRDGi_WriteFlashSectorCoreMX5
CTRDGi_WriteFlashSectorCoreMX5: ; 0x020DD8C0
	stmdb sp!, {r4-r8,lr}
	sub sp, sp, #0x28
	mov r5, r0
	ldmia r5!, {r0-r3}
	add r4, sp, #0x0
	stmia r4!, {r0-r3}
	ldmia r5!, {r0-r3}
	stmia r4!, {r0-r3}
	ldr r0, _020DD9E8 ; =UNK_021D6B20
	ldr r1, [r5, #0x0]
	ldr r0, [r0, #0x0]
	str r1, [r4, #0x0]
	ldrh r5, [sp, #0x20]
	ldrh r0, [r0, #0xa]
	ldr r4, [sp, #0xc]
	cmp r5, r0
	addcs sp, sp, #0x28
	ldrhs r0, _020DD9EC ; =0x000080FF
	ldmcsia sp!, {r4-r8,lr}
	bxcs lr
	mov r0, r5
	bl CTRDGi_EraseFlashSectorLE
	movs r6, r0
	addne sp, sp, #0x28
	ldmneia sp!, {r4-r8,lr}
	bxne lr
	ldr r0, _020DD9F0 ; =UNK_021D6B0C
	ldrh r0, [r0, #0x0]
	bl OS_LockCartridge
	ldr r7, _020DD9F4 ; =0x04000204
	ldr r0, _020DD9E8 ; =UNK_021D6B20
	ldrh r3, [r7, #0x0]
	ldr r2, [r0, #0x0]
	ldrh r1, [r7, #0x0]
	ldr r2, [r2, #0x10]
	ldr r8, _020DD9F8 ; =UNK_021D6B08
	bic r1, r1, #0x3
	orr r1, r1, r2
	strh r1, [r7, #0x0]
	ldr r1, [r0, #0x0]
	and r7, r3, #0x3
	ldr r0, [r1, #0x4]
	strh r0, [r8, #0x0]
	ldrh r1, [r1, #0x8]
	ldrh r0, [r8, #0x0]
	mov r1, r5, lsl r1
	cmp r0, #0x0
	add r5, r1, #0xa000000
	beq _020DD9B8
_020DD984:
	mov r0, r4
	mov r1, r5
	bl CTRDGi_ProgramFlashByteLE
	movs r6, r0
	bne _020DD9B8
	ldrh r0, [r8, #0x0]
	add r4, r4, #0x1
	add r5, r5, #0x1
	sub r0, r0, #0x1
	strh r0, [r8, #0x0]
	ldrh r0, [r8, #0x0]
	cmp r0, #0x0
	bne _020DD984
_020DD9B8:
	ldr r2, _020DD9F4 ; =0x04000204
	ldr r0, _020DD9F0 ; =UNK_021D6B0C
	ldrh r1, [r2, #0x0]
	bic r1, r1, #0x3
	orr r1, r1, r7
	strh r1, [r2, #0x0]
	ldrh r0, [r0, #0x0]
	bl OS_UnlockCartridge
	mov r0, r6
	add sp, sp, #0x28
	ldmia sp!, {r4-r8,lr}
	bx lr
	.balign 4
_020DD9E8: .word UNK_021D6B20
_020DD9EC: .word 0x000080FF
_020DD9F0: .word UNK_021D6B0C
_020DD9F4: .word 0x04000204
_020DD9F8: .word UNK_021D6B08