summaryrefslogtreecommitdiff
path: root/asm/SDK/NAND/NANDCheck.s
blob: a71260aa949c6284183f2d0fbd0f3f8f9f8d5524 (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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
.include "macros.inc"

.section .text, "ax"  # 0x80006980 - 0x803E1E60

.global NANDCheckAsync
NANDCheckAsync:
/* 802EA66C 002E62CC  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802EA670 002E62D0  7C 08 02 A6 */	mflr r0
/* 802EA674 002E62D4  90 01 00 24 */	stw r0, 0x24(r1)
/* 802EA678 002E62D8  39 61 00 20 */	addi r11, r1, 0x20
/* 802EA67C 002E62DC  4B ED CA AD */	bl _savegpr_27
/* 802EA680 002E62E0  7C 7B 1B 78 */	mr r27, r3
/* 802EA684 002E62E4  7C 9C 23 78 */	mr r28, r4
/* 802EA688 002E62E8  7C BD 2B 78 */	mr r29, r5
/* 802EA68C 002E62EC  7C DE 33 78 */	mr r30, r6
/* 802EA690 002E62F0  7C FF 3B 78 */	mr r31, r7
/* 802EA694 002E62F4  4B FF ED 5D */	bl nandIsInitialized
/* 802EA698 002E62F8  2C 03 00 00 */	cmpwi r3, 0
/* 802EA69C 002E62FC  40 82 00 0C */	bne lbl_802EA6A8
/* 802EA6A0 002E6300  38 60 FF 80 */	li r3, -128
/* 802EA6A4 002E6304  48 00 00 5C */	b lbl_802EA700
lbl_802EA6A8:
/* 802EA6A8 002E6308  3C 60 80 44 */	lis r3, lbl_80445800@ha
/* 802EA6AC 002E630C  38 80 00 00 */	li r4, 0
/* 802EA6B0 002E6310  38 63 58 00 */	addi r3, r3, lbl_80445800@l
/* 802EA6B4 002E6314  38 00 00 14 */	li r0, 0x14
/* 802EA6B8 002E6318  93 DF 00 04 */	stw r30, 4(r31)
/* 802EA6BC 002E631C  93 7F 00 90 */	stw r27, 0x90(r31)
/* 802EA6C0 002E6320  93 9F 00 94 */	stw r28, 0x94(r31)
/* 802EA6C4 002E6324  93 BF 00 98 */	stw r29, 0x98(r31)
/* 802EA6C8 002E6328  90 9F 00 A4 */	stw r4, 0xa4(r31)
/* 802EA6CC 002E632C  90 9F 00 A8 */	stw r4, 0xa8(r31)
/* 802EA6D0 002E6330  90 9F 00 AC */	stw r4, 0xac(r31)
/* 802EA6D4 002E6334  90 9F 00 B0 */	stw r4, 0xb0(r31)
/* 802EA6D8 002E6338  90 7F 00 B4 */	stw r3, 0xb4(r31)
/* 802EA6DC 002E633C  90 1F 00 7C */	stw r0, 0x7c(r31)
/* 802EA6E0 002E6340  4B FF FE 09 */	bl nandGetHomeDir
/* 802EA6E4 002E6344  3C C0 80 2F */	lis r6, nandUserAreaCallback@ha
/* 802EA6E8 002E6348  7F E7 FB 78 */	mr r7, r31
/* 802EA6EC 002E634C  38 9F 00 9C */	addi r4, r31, 0x9c
/* 802EA6F0 002E6350  38 BF 00 A0 */	addi r5, r31, 0xa0
/* 802EA6F4 002E6354  38 C6 A7 18 */	addi r6, r6, nandUserAreaCallback@l
/* 802EA6F8 002E6358  4B FB AC 41 */	bl ISFS_GetUsageAsync
/* 802EA6FC 002E635C  4B FF ED 0D */	bl nandConvertErrorCode
lbl_802EA700:
/* 802EA700 002E6360  39 61 00 20 */	addi r11, r1, 0x20
/* 802EA704 002E6364  4B ED CA 71 */	bl _restgpr_27
/* 802EA708 002E6368  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802EA70C 002E636C  7C 08 03 A6 */	mtlr r0
/* 802EA710 002E6370  38 21 00 20 */	addi r1, r1, 0x20
/* 802EA714 002E6374  4E 80 00 20 */	blr

nandUserAreaCallback:
/* 802EA718 002E6378  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802EA71C 002E637C  7C 08 02 A6 */	mflr r0
/* 802EA720 002E6380  2C 03 00 00 */	cmpwi r3, 0
/* 802EA724 002E6384  90 01 00 14 */	stw r0, 0x14(r1)
/* 802EA728 002E6388  93 E1 00 0C */	stw r31, 0xc(r1)
/* 802EA72C 002E638C  7C 9F 23 78 */	mr r31, r4
/* 802EA730 002E6390  41 82 00 0C */	beq lbl_802EA73C
/* 802EA734 002E6394  2C 03 FF 96 */	cmpwi r3, -106
/* 802EA738 002E6398  40 82 01 EC */	bne lbl_802EA924
lbl_802EA73C:
/* 802EA73C 002E639C  80 A4 00 B4 */	lwz r5, 0xb4(r4)
/* 802EA740 002E63A0  2C 03 00 00 */	cmpwi r3, 0
/* 802EA744 002E63A4  80 65 00 00 */	lwz r3, 0(r5)
/* 802EA748 002E63A8  40 82 00 24 */	bne lbl_802EA76C
/* 802EA74C 002E63AC  80 E4 00 A4 */	lwz r7, 0xa4(r4)
/* 802EA750 002E63B0  80 C4 00 AC */	lwz r6, 0xac(r4)
/* 802EA754 002E63B4  80 A4 00 A8 */	lwz r5, 0xa8(r4)
/* 802EA758 002E63B8  80 04 00 B0 */	lwz r0, 0xb0(r4)
/* 802EA75C 002E63BC  7C C7 32 14 */	add r6, r7, r6
/* 802EA760 002E63C0  90 C4 00 A4 */	stw r6, 0xa4(r4)
/* 802EA764 002E63C4  7C 05 02 14 */	add r0, r5, r0
/* 802EA768 002E63C8  90 04 00 A8 */	stw r0, 0xa8(r4)
lbl_802EA76C:
/* 802EA76C 002E63CC  2C 03 00 00 */	cmpwi r3, 0
/* 802EA770 002E63D0  41 82 00 48 */	beq lbl_802EA7B8
/* 802EA774 002E63D4  80 A4 00 B4 */	lwz r5, 0xb4(r4)
/* 802EA778 002E63D8  3C C0 80 2F */	lis r6, nandUserAreaCallback@ha
/* 802EA77C 002E63DC  7F E7 FB 78 */	mr r7, r31
/* 802EA780 002E63E0  38 05 00 04 */	addi r0, r5, 4
/* 802EA784 002E63E4  38 BF 00 B0 */	addi r5, r31, 0xb0
/* 802EA788 002E63E8  90 04 00 B4 */	stw r0, 0xb4(r4)
/* 802EA78C 002E63EC  38 84 00 AC */	addi r4, r4, 0xac
/* 802EA790 002E63F0  38 C6 A7 18 */	addi r6, r6, nandUserAreaCallback@l
/* 802EA794 002E63F4  4B FB AB A5 */	bl ISFS_GetUsageAsync
/* 802EA798 002E63F8  2C 03 00 00 */	cmpwi r3, 0
/* 802EA79C 002E63FC  41 82 01 9C */	beq lbl_802EA938
/* 802EA7A0 002E6400  4B FF EC 69 */	bl nandConvertErrorCode
/* 802EA7A4 002E6404  81 9F 00 04 */	lwz r12, 4(r31)
/* 802EA7A8 002E6408  7F E4 FB 78 */	mr r4, r31
/* 802EA7AC 002E640C  7D 89 03 A6 */	mtctr r12
/* 802EA7B0 002E6410  4E 80 04 21 */	bctrl
/* 802EA7B4 002E6414  48 00 01 84 */	b lbl_802EA938
lbl_802EA7B8:
/* 802EA7B8 002E6418  80 04 00 7C */	lwz r0, 0x7c(r4)
/* 802EA7BC 002E641C  2C 00 00 14 */	cmpwi r0, 0x14
/* 802EA7C0 002E6420  40 82 00 84 */	bne lbl_802EA844
/* 802EA7C4 002E6424  80 64 00 90 */	lwz r3, 0x90(r4)
/* 802EA7C8 002E6428  39 00 00 00 */	li r8, 0
/* 802EA7CC 002E642C  80 04 00 9C */	lwz r0, 0x9c(r4)
/* 802EA7D0 002E6430  80 E4 00 A8 */	lwz r7, 0xa8(r4)
/* 802EA7D4 002E6434  7C 00 1A 14 */	add r0, r0, r3
/* 802EA7D8 002E6438  80 C4 00 A4 */	lwz r6, 0xa4(r4)
/* 802EA7DC 002E643C  28 00 04 00 */	cmplwi r0, 0x400
/* 802EA7E0 002E6440  80 04 00 A0 */	lwz r0, 0xa0(r4)
/* 802EA7E4 002E6444  80 A4 00 94 */	lwz r5, 0x94(r4)
/* 802EA7E8 002E6448  40 81 00 08 */	ble lbl_802EA7F0
/* 802EA7EC 002E644C  61 08 00 01 */	ori r8, r8, 1
lbl_802EA7F0:
/* 802EA7F0 002E6450  7C 00 2A 14 */	add r0, r0, r5
/* 802EA7F4 002E6454  28 00 00 21 */	cmplwi r0, 0x21
/* 802EA7F8 002E6458  40 81 00 08 */	ble lbl_802EA800
/* 802EA7FC 002E645C  61 08 00 02 */	ori r8, r8, 2
lbl_802EA800:
/* 802EA800 002E6460  7C 06 1A 14 */	add r0, r6, r3
/* 802EA804 002E6464  28 00 44 00 */	cmplwi r0, 0x4400
/* 802EA808 002E6468  40 81 00 08 */	ble lbl_802EA810
/* 802EA80C 002E646C  61 08 00 04 */	ori r8, r8, 4
lbl_802EA810:
/* 802EA810 002E6470  7C 07 2A 14 */	add r0, r7, r5
/* 802EA814 002E6474  28 00 0F A0 */	cmplwi r0, 0xfa0
/* 802EA818 002E6478  40 81 00 08 */	ble lbl_802EA820
/* 802EA81C 002E647C  61 08 00 08 */	ori r8, r8, 8
lbl_802EA820:
/* 802EA820 002E6480  80 84 00 98 */	lwz r4, 0x98(r4)
/* 802EA824 002E6484  38 60 00 00 */	li r3, 0
/* 802EA828 002E6488  91 04 00 00 */	stw r8, 0(r4)
/* 802EA82C 002E648C  4B FF EB DD */	bl nandConvertErrorCode
/* 802EA830 002E6490  81 9F 00 04 */	lwz r12, 4(r31)
/* 802EA834 002E6494  7F E4 FB 78 */	mr r4, r31
/* 802EA838 002E6498  7D 89 03 A6 */	mtctr r12
/* 802EA83C 002E649C  4E 80 04 21 */	bctrl
/* 802EA840 002E64A0  48 00 00 F8 */	b lbl_802EA938
lbl_802EA844:
/* 802EA844 002E64A4  2C 00 00 15 */	cmpwi r0, 0x15
/* 802EA848 002E64A8  40 82 00 A8 */	bne lbl_802EA8F0
/* 802EA84C 002E64AC  80 A4 00 A4 */	lwz r5, 0xa4(r4)
/* 802EA850 002E64B0  38 60 44 00 */	li r3, 0x4400
/* 802EA854 002E64B4  81 24 00 A8 */	lwz r9, 0xa8(r4)
/* 802EA858 002E64B8  38 00 0F A0 */	li r0, 0xfa0
/* 802EA85C 002E64BC  7C 65 18 10 */	subfc r3, r5, r3
/* 802EA860 002E64C0  81 44 00 9C */	lwz r10, 0x9c(r4)
/* 802EA864 002E64C4  7D 03 19 10 */	subfe r8, r3, r3
/* 802EA868 002E64C8  81 64 00 A0 */	lwz r11, 0xa0(r4)
/* 802EA86C 002E64CC  20 C5 44 00 */	subfic r6, r5, 0x4400
/* 802EA870 002E64D0  38 60 04 00 */	li r3, 0x400
/* 802EA874 002E64D4  7C A9 00 10 */	subfc r5, r9, r0
/* 802EA878 002E64D8  38 00 00 21 */	li r0, 0x21
/* 802EA87C 002E64DC  7C E5 29 10 */	subfe r7, r5, r5
/* 802EA880 002E64E0  7C C8 40 78 */	andc r8, r6, r8
/* 802EA884 002E64E4  20 C9 0F A0 */	subfic r6, r9, 0xfa0
/* 802EA888 002E64E8  7C 6A 18 10 */	subfc r3, r10, r3
/* 802EA88C 002E64EC  7C A3 19 10 */	subfe r5, r3, r3
/* 802EA890 002E64F0  7C C6 38 78 */	andc r6, r6, r7
/* 802EA894 002E64F4  20 6A 04 00 */	subfic r3, r10, 0x400
/* 802EA898 002E64F8  7C 65 28 78 */	andc r5, r3, r5
/* 802EA89C 002E64FC  7C 0B 00 10 */	subfc r0, r11, r0
/* 802EA8A0 002E6500  7C 60 01 10 */	subfe r3, r0, r0
/* 802EA8A4 002E6504  20 0B 00 21 */	subfic r0, r11, 0x21
/* 802EA8A8 002E6508  7C 08 28 40 */	cmplw r8, r5
/* 802EA8AC 002E650C  7C 00 18 78 */	andc r0, r0, r3
/* 802EA8B0 002E6510  40 80 00 08 */	bge lbl_802EA8B8
/* 802EA8B4 002E6514  7D 05 43 78 */	mr r5, r8
lbl_802EA8B8:
/* 802EA8B8 002E6518  80 64 00 0C */	lwz r3, 0xc(r4)
/* 802EA8BC 002E651C  7C 06 00 40 */	cmplw r6, r0
/* 802EA8C0 002E6520  90 A3 00 00 */	stw r5, 0(r3)
/* 802EA8C4 002E6524  40 80 00 08 */	bge lbl_802EA8CC
/* 802EA8C8 002E6528  7C C0 33 78 */	mr r0, r6
lbl_802EA8CC:
/* 802EA8CC 002E652C  80 84 00 10 */	lwz r4, 0x10(r4)
/* 802EA8D0 002E6530  38 60 00 00 */	li r3, 0
/* 802EA8D4 002E6534  90 04 00 00 */	stw r0, 0(r4)
/* 802EA8D8 002E6538  4B FF EB 31 */	bl nandConvertErrorCode
/* 802EA8DC 002E653C  81 9F 00 04 */	lwz r12, 4(r31)
/* 802EA8E0 002E6540  7F E4 FB 78 */	mr r4, r31
/* 802EA8E4 002E6544  7D 89 03 A6 */	mtctr r12
/* 802EA8E8 002E6548  4E 80 04 21 */	bctrl
/* 802EA8EC 002E654C  48 00 00 4C */	b lbl_802EA938
lbl_802EA8F0:
/* 802EA8F0 002E6550  3C 60 80 44 */	lis r3, lbl_80445844@ha
/* 802EA8F4 002E6554  3C 80 80 44 */	lis r4, lbl_8044582C@ha
/* 802EA8F8 002E6558  38 63 58 44 */	addi r3, r3, lbl_80445844@l
/* 802EA8FC 002E655C  38 84 58 2C */	addi r4, r4, lbl_8044582C@l
/* 802EA900 002E6560  4C C6 31 82 */	crclr 6
/* 802EA904 002E6564  4B D1 D1 C1 */	bl OSReport
/* 802EA908 002E6568  38 60 FF 8B */	li r3, -117
/* 802EA90C 002E656C  4B FF EA FD */	bl nandConvertErrorCode
/* 802EA910 002E6570  81 9F 00 04 */	lwz r12, 4(r31)
/* 802EA914 002E6574  7F E4 FB 78 */	mr r4, r31
/* 802EA918 002E6578  7D 89 03 A6 */	mtctr r12
/* 802EA91C 002E657C  4E 80 04 21 */	bctrl
/* 802EA920 002E6580  48 00 00 18 */	b lbl_802EA938
lbl_802EA924:
/* 802EA924 002E6584  4B FF EA E5 */	bl nandConvertErrorCode
/* 802EA928 002E6588  81 9F 00 04 */	lwz r12, 4(r31)
/* 802EA92C 002E658C  7F E4 FB 78 */	mr r4, r31
/* 802EA930 002E6590  7D 89 03 A6 */	mtctr r12
/* 802EA934 002E6594  4E 80 04 21 */	bctrl
lbl_802EA938:
/* 802EA938 002E6598  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802EA93C 002E659C  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 802EA940 002E65A0  7C 08 03 A6 */	mtlr r0
/* 802EA944 002E65A4  38 21 00 10 */	addi r1, r1, 0x10
/* 802EA948 002E65A8  4E 80 00 20 */	blr