summaryrefslogtreecommitdiff
path: root/arm9/asm/CTRDG_backup.s
blob: 946a8cd6f07b7f2bfa5ac09644b3ef47aa40b72d (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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
	.include "asm/macros.inc"
	.include "global.inc"

	.extern UNK_02103FE8
	.extern UNK_021D6B14
	.extern UNK_021D6B30
	.extern UNK_021D6B28
	.extern UNK_021D6B1C
	.extern UNK_021D6B24
	.extern UNK_021D6B20
	.extern UNK_021D6B4C
	.extern UNK_021D6B0C
	.extern UNK_02103FE4
	.extern UNK_02103FF4
	.extern UNK_021D6B34
	.extern UNK_021D6B2C
	.extern UNK_021D6B18

    .text

	arm_func_start CTRDG_IdentifyAgbBackup
CTRDG_IdentifyAgbBackup: ; 0x020DBD50
	stmdb sp!, {r4-r7,lr}
	sub sp, sp, #0x4
	mov r7, r0
	cmp r7, #0x1
	mov r0, #0x1
	bhi _020DBEAC
	bl OS_GetLockID
	ldr r1, _020DBED8 ; =UNK_021D6B0C
	strh r0, [r1, #0x0]
	ldrh r0, [r1, #0x0]
	bl OS_LockCartridge
	ldr r6, _020DBEDC ; =0x04000204
	ldr r1, _020DBEE0 ; =UNK_02103FE4
	ldrh r3, [r6, #0x0]
	ldrh r2, [r6, #0x0]
	ldr r0, _020DBEE4 ; =UNK_021D6B28
	and r4, r3, #0x3
	bic r2, r2, #0x3
	orr r2, r2, #0x3
	strh r2, [r6, #0x0]
	str r1, [r0, #0x0]
	bl CTRDGi_ReadFlashID
	ldr r2, _020DBEDC ; =0x04000204
	mov r6, r0
	ldrh r1, [r2, #0x0]
	cmp r7, #0x0
	ldreq r5, _020DBEE8 ; =UNK_02103FF4
	bic r1, r1, #0x3
	orr r1, r1, r4
	cmp r7, #0x1
	ldr r0, _020DBED8 ; =UNK_021D6B0C
	strh r1, [r2, #0x0]
	ldrh r0, [r0, #0x0]
	ldreq r5, _020DBEEC ; =UNK_02103FE8
	bl OS_UnlockCartridge2
	ldr r2, [r5, #0x0]
	mov r0, #0x1
	ldrh r1, [r2, #0x38]
	cmp r1, #0x0
	beq _020DBE14
	and r3, r6, #0xff
_020DBDF4:
	ldrh r1, [r2, #0x38]
	cmp r3, r1
	moveq r0, #0x0
	beq _020DBE14
	ldr r2, [r5, #0x4]!
	ldrh r1, [r2, #0x38]
	cmp r1, #0x0
	bne _020DBDF4
_020DBE14:
	ldr r2, [r2, #0x0]
	ldr r1, _020DBEF0 ; =UNK_021D6B14
	ldr r3, _020DBEF4 ; =UNK_021D6B34
	str r2, [r1, #0x0]
	ldr r1, [r5, #0x0]
	ldr r2, _020DBEF8 ; =UNK_021D6B2C
	ldr r4, [r1, #0x4]
	ldr r1, _020DBEFC ; =UNK_021D6B18
	str r4, [r3, #0x0]
	ldr r3, [r5, #0x0]
	ldr r6, _020DBF00 ; =UNK_021D6B1C
	ldr r3, [r3, #0x8]
	ldr r4, _020DBF04 ; =UNK_021D6B30
	str r3, [r2, #0x0]
	ldr r2, [r5, #0x0]
	ldr r3, _020DBF08 ; =UNK_021D6B24
	ldr r7, [r2, #0xc]
	ldr r2, _020DBEE4 ; =UNK_021D6B28
	str r7, [r1, #0x0]
	ldr r7, [r5, #0x0]
	ldr r1, _020DBF0C ; =UNK_021D6B20
	ldr r7, [r7, #0x10]
	add sp, sp, #0x4
	str r7, [r6, #0x0]
	ldr r6, [r5, #0x0]
	ldr r6, [r6, #0x14]
	str r6, [r4, #0x0]
	ldr r4, [r5, #0x0]
	ldr r4, [r4, #0x18]
	str r4, [r3, #0x0]
	ldr r3, [r5, #0x0]
	ldr r3, [r3, #0x1c]
	str r3, [r2, #0x0]
	ldr r2, [r5, #0x0]
	add r2, r2, #0x20
	str r2, [r1, #0x0]
	ldmia sp!, {r4-r7,lr}
	bx lr
_020DBEAC:
	cmp r7, #0x2
	addne sp, sp, #0x4
	ldmneia sp!, {r4-r7,lr}
	bxne lr
	bl OS_GetLockID
	ldr r1, _020DBF10 ; =UNK_021D6B4C
	strh r0, [r1, #0x0]
	mov r0, #0x0
	add sp, sp, #0x4
	ldmia sp!, {r4-r7,lr}
	bx lr
	.balign 4
_020DBED8: .word UNK_021D6B0C
_020DBEDC: .word 0x04000204
_020DBEE0: .word UNK_02103FE4
_020DBEE4: .word UNK_021D6B28
_020DBEE8: .word UNK_02103FF4
_020DBEEC: .word UNK_02103FE8
_020DBEF0: .word UNK_021D6B14
_020DBEF4: .word UNK_021D6B34
_020DBEF8: .word UNK_021D6B2C
_020DBEFC: .word UNK_021D6B18
_020DBF00: .word UNK_021D6B1C
_020DBF04: .word UNK_021D6B30
_020DBF08: .word UNK_021D6B24
_020DBF0C: .word UNK_021D6B20
_020DBF10: .word UNK_021D6B4C