summaryrefslogtreecommitdiff
path: root/asm/SDK/GX/GXDraw.s
blob: e09b11d6481ab550c792fbd1e2006e2b065ff3ac (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
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
.include "macros.inc"

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

.global GXDrawSphere
GXDrawSphere:
/* 8028582C 0028148C  94 21 FE F0 */	stwu r1, -0x110(r1)
/* 80285830 00281490  7C 08 02 A6 */	mflr r0
/* 80285834 00281494  90 01 01 14 */	stw r0, 0x114(r1)
/* 80285838 00281498  DB E1 01 00 */	stfd f31, 0x100(r1)
/* 8028583C 0028149C  F3 E1 01 08 */	psq_st f31, 264(r1), 0, qr0
/* 80285840 002814A0  DB C1 00 F0 */	stfd f30, 0xf0(r1)
/* 80285844 002814A4  F3 C1 00 F8 */	psq_st f30, 248(r1), 0, qr0
/* 80285848 002814A8  DB A1 00 E0 */	stfd f29, 0xe0(r1)
/* 8028584C 002814AC  F3 A1 00 E8 */	psq_st f29, 232(r1), 0, qr0
/* 80285850 002814B0  DB 81 00 D0 */	stfd f28, 0xd0(r1)
/* 80285854 002814B4  F3 81 00 D8 */	psq_st f28, 216(r1), 0, qr0
/* 80285858 002814B8  DB 61 00 C0 */	stfd f27, 0xc0(r1)
/* 8028585C 002814BC  F3 61 00 C8 */	psq_st f27, 200(r1), 0, qr0
/* 80285860 002814C0  DB 41 00 B0 */	stfd f26, 0xb0(r1)
/* 80285864 002814C4  F3 41 00 B8 */	psq_st f26, 184(r1), 0, qr0
/* 80285868 002814C8  DB 21 00 A0 */	stfd f25, 0xa0(r1)
/* 8028586C 002814CC  F3 21 00 A8 */	psq_st f25, 168(r1), 0, qr0
/* 80285870 002814D0  DB 01 00 90 */	stfd f24, 0x90(r1)
/* 80285874 002814D4  F3 01 00 98 */	psq_st f24, 152(r1), 0, qr0
/* 80285878 002814D8  DA E1 00 80 */	stfd f23, 0x80(r1)
/* 8028587C 002814DC  F2 E1 00 88 */	psq_st f23, 136(r1), 0, qr0
/* 80285880 002814E0  DA C1 00 70 */	stfd f22, 0x70(r1)
/* 80285884 002814E4  F2 C1 00 78 */	psq_st f22, 120(r1), 0, qr0
/* 80285888 002814E8  DA A1 00 60 */	stfd f21, 0x60(r1)
/* 8028588C 002814EC  F2 A1 00 68 */	psq_st f21, 104(r1), 0, qr0
/* 80285890 002814F0  DA 81 00 50 */	stfd f20, 0x50(r1)
/* 80285894 002814F4  F2 81 00 58 */	psq_st f20, 88(r1), 0, qr0
/* 80285898 002814F8  DA 61 00 40 */	stfd f19, 0x40(r1)
/* 8028589C 002814FC  F2 61 00 48 */	psq_st f19, 72(r1), 0, qr0
/* 802858A0 00281500  39 61 00 40 */	addi r11, r1, 0x40
/* 802858A4 00281504  4B F4 18 7D */	bl _savegpr_25
/* 802858A8 00281508  3C 00 43 30 */	lis r0, 0x4330
/* 802858AC 0028150C  90 61 00 14 */	stw r3, 0x14(r1)
/* 802858B0 00281510  7C 79 1B 78 */	mr r25, r3
/* 802858B4 00281514  C8 82 A1 F0 */	lfd f4, lbl_806427F0-_SDA2_BASE_(r2)
/* 802858B8 00281518  90 01 00 10 */	stw r0, 0x10(r1)
/* 802858BC 0028151C  7C 9A 23 78 */	mr r26, r4
/* 802858C0 00281520  C0 42 A1 D4 */	lfs f2, lbl_806427D4-_SDA2_BASE_(r2)
/* 802858C4 00281524  38 60 00 0D */	li r3, 0xd
/* 802858C8 00281528  90 81 00 1C */	stw r4, 0x1c(r1)
/* 802858CC 0028152C  38 81 00 08 */	addi r4, r1, 8
/* 802858D0 00281530  C8 01 00 10 */	lfd f0, 0x10(r1)
/* 802858D4 00281534  90 01 00 18 */	stw r0, 0x18(r1)
/* 802858D8 00281538  EC 60 20 28 */	fsubs f3, f0, f4
/* 802858DC 0028153C  C0 02 A1 F8 */	lfs f0, lbl_806427F8-_SDA2_BASE_(r2)
/* 802858E0 00281540  C8 21 00 18 */	lfd f1, 0x18(r1)
/* 802858E4 00281544  C3 42 A1 D0 */	lfs f26, lbl_806427D0-_SDA2_BASE_(r2)
/* 802858E8 00281548  EC 21 20 28 */	fsubs f1, f1, f4
/* 802858EC 0028154C  EF 22 18 24 */	fdivs f25, f2, f3
/* 802858F0 00281550  EF 00 08 24 */	fdivs f24, f0, f1
/* 802858F4 00281554  4B FF A1 4D */	bl GXGetVtxDesc
/* 802858F8 00281558  3C 60 80 51 */	lis r3, lbl_80515FF8@ha
/* 802858FC 0028155C  38 63 5F F8 */	addi r3, r3, lbl_80515FF8@l
/* 80285900 00281560  4B FF A2 F5 */	bl GXGetVtxDescv
/* 80285904 00281564  3C 80 80 51 */	lis r4, lbl_805160D0@ha
/* 80285908 00281568  38 60 00 03 */	li r3, 3
/* 8028590C 0028156C  38 84 60 D0 */	addi r4, r4, lbl_805160D0@l
/* 80285910 00281570  4B FF A9 F9 */	bl GXGetVtxAttrFmtv
/* 80285914 00281574  4B FF A3 71 */	bl GXClearVtxDesc
/* 80285918 00281578  38 60 00 09 */	li r3, 9
/* 8028591C 0028157C  38 80 00 01 */	li r4, 1
/* 80285920 00281580  4B FF 9A D5 */	bl GXSetVtxDesc
/* 80285924 00281584  38 60 00 0A */	li r3, 0xa
/* 80285928 00281588  38 80 00 01 */	li r4, 1
/* 8028592C 0028158C  4B FF 9A C9 */	bl GXSetVtxDesc
/* 80285930 00281590  38 60 00 03 */	li r3, 3
/* 80285934 00281594  38 80 00 09 */	li r4, 9
/* 80285938 00281598  38 A0 00 01 */	li r5, 1
/* 8028593C 0028159C  38 C0 00 04 */	li r6, 4
/* 80285940 002815A0  38 E0 00 00 */	li r7, 0
/* 80285944 002815A4  4B FF A3 75 */	bl GXSetVtxAttrFmt
/* 80285948 002815A8  38 60 00 03 */	li r3, 3
/* 8028594C 002815AC  38 80 00 0A */	li r4, 0xa
/* 80285950 002815B0  38 A0 00 00 */	li r5, 0
/* 80285954 002815B4  38 C0 00 04 */	li r6, 4
/* 80285958 002815B8  38 E0 00 00 */	li r7, 0
/* 8028595C 002815BC  4B FF A3 5D */	bl GXSetVtxAttrFmt
/* 80285960 002815C0  80 01 00 08 */	lwz r0, 8(r1)
/* 80285964 002815C4  2C 00 00 00 */	cmpwi r0, 0
/* 80285968 002815C8  41 82 00 28 */	beq lbl_80285990
/* 8028596C 002815CC  38 60 00 0D */	li r3, 0xd
/* 80285970 002815D0  38 80 00 01 */	li r4, 1
/* 80285974 002815D4  4B FF 9A 81 */	bl GXSetVtxDesc
/* 80285978 002815D8  38 60 00 03 */	li r3, 3
/* 8028597C 002815DC  38 80 00 0D */	li r4, 0xd
/* 80285980 002815E0  38 A0 00 01 */	li r5, 1
/* 80285984 002815E4  38 C0 00 04 */	li r6, 4
/* 80285988 002815E8  38 E0 00 00 */	li r7, 0
/* 8028598C 002815EC  4B FF A3 2D */	bl GXSetVtxAttrFmt
lbl_80285990:
/* 80285990 002815F0  38 1A 00 01 */	addi r0, r26, 1
/* 80285994 002815F4  CB 82 A1 E8 */	lfd f28, lbl_806427E8-_SDA2_BASE_(r2)
/* 80285998 002815F8  CB C2 A1 F0 */	lfd f30, lbl_806427F0-_SDA2_BASE_(r2)
/* 8028599C 002815FC  54 1E 08 3C */	slwi r30, r0, 1
/* 802859A0 00281600  3B 80 00 00 */	li r28, 0
/* 802859A4 00281604  3F E0 CC 01 */	lis r31, 0xcc01
/* 802859A8 00281608  48 00 01 B0 */	b lbl_80285B58
lbl_802859AC:
/* 802859AC 0028160C  6F 80 80 00 */	xoris r0, r28, 0x8000
/* 802859B0 00281610  90 01 00 14 */	stw r0, 0x14(r1)
/* 802859B4 00281614  C8 01 00 10 */	lfd f0, 0x10(r1)
/* 802859B8 00281618  EC 00 E0 28 */	fsubs f0, f0, f28
/* 802859BC 0028161C  EE 80 06 72 */	fmuls f20, f0, f25
/* 802859C0 00281620  FC 20 A0 90 */	fmr f1, f20
/* 802859C4 00281624  EE B4 C8 2A */	fadds f21, f20, f25
/* 802859C8 00281628  4B F4 EA BD */	bl sin
/* 802859CC 0028162C  FC 00 08 18 */	frsp f0, f1
/* 802859D0 00281630  FC 20 A8 90 */	fmr f1, f21
/* 802859D4 00281634  EE FA 00 32 */	fmuls f23, f26, f0
/* 802859D8 00281638  4B F4 EA AD */	bl sin
/* 802859DC 0028163C  FC 00 08 18 */	frsp f0, f1
/* 802859E0 00281640  FC 20 A0 90 */	fmr f1, f20
/* 802859E4 00281644  EE DA 00 32 */	fmuls f22, f26, f0
/* 802859E8 00281648  4B F4 E6 91 */	bl cos
/* 802859EC 0028164C  FC 00 08 18 */	frsp f0, f1
/* 802859F0 00281650  FC 20 A8 90 */	fmr f1, f21
/* 802859F4 00281654  EE BA 00 32 */	fmuls f21, f26, f0
/* 802859F8 00281658  4B F4 E6 81 */	bl cos
/* 802859FC 0028165C  FC 00 08 18 */	frsp f0, f1
/* 80285A00 00281660  57 C5 04 3E */	clrlwi r5, r30, 0x10
/* 80285A04 00281664  38 60 00 98 */	li r3, 0x98
/* 80285A08 00281668  38 80 00 03 */	li r4, 3
/* 80285A0C 0028166C  EE 9A 00 32 */	fmuls f20, f26, f0
/* 80285A10 00281670  4B FF B7 39 */	bl GXBegin
/* 80285A14 00281674  EF B4 D0 24 */	fdivs f29, f20, f26
/* 80285A18 00281678  83 A1 00 08 */	lwz r29, 8(r1)
/* 80285A1C 0028167C  3B 60 00 00 */	li r27, 0
/* 80285A20 00281680  EF F5 D0 24 */	fdivs f31, f21, f26
/* 80285A24 00281684  48 00 01 28 */	b lbl_80285B4C
lbl_80285A28:
/* 80285A28 00281688  6F 60 80 00 */	xoris r0, r27, 0x8000
/* 80285A2C 0028168C  90 01 00 1C */	stw r0, 0x1c(r1)
/* 80285A30 00281690  C8 01 00 18 */	lfd f0, 0x18(r1)
/* 80285A34 00281694  EC 00 E0 28 */	fsubs f0, f0, f28
/* 80285A38 00281698  EE 60 06 32 */	fmuls f19, f0, f24
/* 80285A3C 0028169C  FC 20 98 90 */	fmr f1, f19
/* 80285A40 002816A0  4B F4 E6 39 */	bl cos
/* 80285A44 002816A4  FF 60 08 18 */	frsp f27, f1
/* 80285A48 002816A8  FC 20 98 90 */	fmr f1, f19
/* 80285A4C 002816AC  4B F4 EA 39 */	bl sin
/* 80285A50 002816B0  FC 80 08 18 */	frsp f4, f1
/* 80285A54 002816B4  2C 1D 00 00 */	cmpwi r29, 0
/* 80285A58 002816B8  EC 5B 05 B2 */	fmuls f2, f27, f22
/* 80285A5C 002816BC  EC 04 05 B2 */	fmuls f0, f4, f22
/* 80285A60 002816C0  D0 5F 80 00 */	stfs f2, -0x8000(r31)
/* 80285A64 002816C4  EC 22 D0 24 */	fdivs f1, f2, f26
/* 80285A68 002816C8  D0 1F 80 00 */	stfs f0, -0x8000(r31)
/* 80285A6C 002816CC  D2 9F 80 00 */	stfs f20, -0x8000(r31)
/* 80285A70 002816D0  EC 00 D0 24 */	fdivs f0, f0, f26
/* 80285A74 002816D4  D0 3F 80 00 */	stfs f1, -0x8000(r31)
/* 80285A78 002816D8  D0 1F 80 00 */	stfs f0, -0x8000(r31)
/* 80285A7C 002816DC  D3 BF 80 00 */	stfs f29, -0x8000(r31)
/* 80285A80 002816E0  41 82 00 50 */	beq lbl_80285AD0
/* 80285A84 002816E4  6F 63 80 00 */	xoris r3, r27, 0x8000
/* 80285A88 002816E8  93 41 00 1C */	stw r26, 0x1c(r1)
/* 80285A8C 002816EC  38 1C 00 01 */	addi r0, r28, 1
/* 80285A90 002816F0  90 61 00 14 */	stw r3, 0x14(r1)
/* 80285A94 002816F4  6C 00 80 00 */	xoris r0, r0, 0x8000
/* 80285A98 002816F8  C8 01 00 18 */	lfd f0, 0x18(r1)
/* 80285A9C 002816FC  C8 21 00 10 */	lfd f1, 0x10(r1)
/* 80285AA0 00281700  93 21 00 1C */	stw r25, 0x1c(r1)
/* 80285AA4 00281704  EC 40 F0 28 */	fsubs f2, f0, f30
/* 80285AA8 00281708  EC 61 E0 28 */	fsubs f3, f1, f28
/* 80285AAC 0028170C  90 01 00 14 */	stw r0, 0x14(r1)
/* 80285AB0 00281710  C8 01 00 18 */	lfd f0, 0x18(r1)
/* 80285AB4 00281714  C8 21 00 10 */	lfd f1, 0x10(r1)
/* 80285AB8 00281718  EC 43 10 24 */	fdivs f2, f3, f2
/* 80285ABC 0028171C  EC 21 E0 28 */	fsubs f1, f1, f28
/* 80285AC0 00281720  D0 5F 80 00 */	stfs f2, -0x8000(r31)
/* 80285AC4 00281724  EC 00 F0 28 */	fsubs f0, f0, f30
/* 80285AC8 00281728  EC 01 00 24 */	fdivs f0, f1, f0
/* 80285ACC 0028172C  D0 1F 80 00 */	stfs f0, -0x8000(r31)
lbl_80285AD0:
/* 80285AD0 00281730  EC 5B 05 F2 */	fmuls f2, f27, f23
/* 80285AD4 00281734  2C 1D 00 00 */	cmpwi r29, 0
/* 80285AD8 00281738  EC 04 05 F2 */	fmuls f0, f4, f23
/* 80285ADC 0028173C  D0 5F 80 00 */	stfs f2, -0x8000(r31)
/* 80285AE0 00281740  EC 22 D0 24 */	fdivs f1, f2, f26
/* 80285AE4 00281744  D0 1F 80 00 */	stfs f0, -0x8000(r31)
/* 80285AE8 00281748  D2 BF 80 00 */	stfs f21, -0x8000(r31)
/* 80285AEC 0028174C  EC 00 D0 24 */	fdivs f0, f0, f26
/* 80285AF0 00281750  D0 3F 80 00 */	stfs f1, -0x8000(r31)
/* 80285AF4 00281754  D0 1F 80 00 */	stfs f0, -0x8000(r31)
/* 80285AF8 00281758  D3 FF 80 00 */	stfs f31, -0x8000(r31)
/* 80285AFC 0028175C  41 82 00 4C */	beq lbl_80285B48
/* 80285B00 00281760  6F 63 80 00 */	xoris r3, r27, 0x8000
/* 80285B04 00281764  93 41 00 1C */	stw r26, 0x1c(r1)
/* 80285B08 00281768  6F 80 80 00 */	xoris r0, r28, 0x8000
/* 80285B0C 0028176C  90 61 00 14 */	stw r3, 0x14(r1)
/* 80285B10 00281770  C8 01 00 18 */	lfd f0, 0x18(r1)
/* 80285B14 00281774  C8 21 00 10 */	lfd f1, 0x10(r1)
/* 80285B18 00281778  93 21 00 1C */	stw r25, 0x1c(r1)
/* 80285B1C 0028177C  EC 40 F0 28 */	fsubs f2, f0, f30
/* 80285B20 00281780  EC 61 E0 28 */	fsubs f3, f1, f28
/* 80285B24 00281784  90 01 00 14 */	stw r0, 0x14(r1)
/* 80285B28 00281788  C8 01 00 18 */	lfd f0, 0x18(r1)
/* 80285B2C 0028178C  C8 21 00 10 */	lfd f1, 0x10(r1)
/* 80285B30 00281790  EC 43 10 24 */	fdivs f2, f3, f2
/* 80285B34 00281794  EC 21 E0 28 */	fsubs f1, f1, f28
/* 80285B38 00281798  D0 5F 80 00 */	stfs f2, -0x8000(r31)
/* 80285B3C 0028179C  EC 00 F0 28 */	fsubs f0, f0, f30
/* 80285B40 002817A0  EC 01 00 24 */	fdivs f0, f1, f0
/* 80285B44 002817A4  D0 1F 80 00 */	stfs f0, -0x8000(r31)
lbl_80285B48:
/* 80285B48 002817A8  3B 7B 00 01 */	addi r27, r27, 1
lbl_80285B4C:
/* 80285B4C 002817AC  7C 1B D0 00 */	cmpw r27, r26
/* 80285B50 002817B0  40 81 FE D8 */	ble lbl_80285A28
/* 80285B54 002817B4  3B 9C 00 01 */	addi r28, r28, 1
lbl_80285B58:
/* 80285B58 002817B8  7C 1C C8 00 */	cmpw r28, r25
/* 80285B5C 002817BC  41 80 FE 50 */	blt lbl_802859AC
/* 80285B60 002817C0  3C 60 80 51 */	lis r3, lbl_80515FF8@ha
/* 80285B64 002817C4  38 63 5F F8 */	addi r3, r3, lbl_80515FF8@l
/* 80285B68 002817C8  4B FF 9A F1 */	bl GXSetVtxDescv
/* 80285B6C 002817CC  3C 80 80 51 */	lis r4, lbl_805160D0@ha
/* 80285B70 002817D0  38 60 00 03 */	li r3, 3
/* 80285B74 002817D4  38 84 60 D0 */	addi r4, r4, lbl_805160D0@l
/* 80285B78 002817D8  4B FF A2 E1 */	bl GXSetVtxAttrFmtv
/* 80285B7C 002817DC  E3 E1 01 08 */	psq_l f31, 264(r1), 0, qr0
/* 80285B80 002817E0  CB E1 01 00 */	lfd f31, 0x100(r1)
/* 80285B84 002817E4  E3 C1 00 F8 */	psq_l f30, 248(r1), 0, qr0
/* 80285B88 002817E8  CB C1 00 F0 */	lfd f30, 0xf0(r1)
/* 80285B8C 002817EC  E3 A1 00 E8 */	psq_l f29, 232(r1), 0, qr0
/* 80285B90 002817F0  CB A1 00 E0 */	lfd f29, 0xe0(r1)
/* 80285B94 002817F4  E3 81 00 D8 */	psq_l f28, 216(r1), 0, qr0
/* 80285B98 002817F8  CB 81 00 D0 */	lfd f28, 0xd0(r1)
/* 80285B9C 002817FC  E3 61 00 C8 */	psq_l f27, 200(r1), 0, qr0
/* 80285BA0 00281800  CB 61 00 C0 */	lfd f27, 0xc0(r1)
/* 80285BA4 00281804  E3 41 00 B8 */	psq_l f26, 184(r1), 0, qr0
/* 80285BA8 00281808  CB 41 00 B0 */	lfd f26, 0xb0(r1)
/* 80285BAC 0028180C  E3 21 00 A8 */	psq_l f25, 168(r1), 0, qr0
/* 80285BB0 00281810  CB 21 00 A0 */	lfd f25, 0xa0(r1)
/* 80285BB4 00281814  E3 01 00 98 */	psq_l f24, 152(r1), 0, qr0
/* 80285BB8 00281818  CB 01 00 90 */	lfd f24, 0x90(r1)
/* 80285BBC 0028181C  E2 E1 00 88 */	psq_l f23, 136(r1), 0, qr0
/* 80285BC0 00281820  CA E1 00 80 */	lfd f23, 0x80(r1)
/* 80285BC4 00281824  E2 C1 00 78 */	psq_l f22, 120(r1), 0, qr0
/* 80285BC8 00281828  CA C1 00 70 */	lfd f22, 0x70(r1)
/* 80285BCC 0028182C  E2 A1 00 68 */	psq_l f21, 104(r1), 0, qr0
/* 80285BD0 00281830  CA A1 00 60 */	lfd f21, 0x60(r1)
/* 80285BD4 00281834  E2 81 00 58 */	psq_l f20, 88(r1), 0, qr0
/* 80285BD8 00281838  CA 81 00 50 */	lfd f20, 0x50(r1)
/* 80285BDC 0028183C  E2 61 00 48 */	psq_l f19, 72(r1), 0, qr0
/* 80285BE0 00281840  39 61 00 40 */	addi r11, r1, 0x40
/* 80285BE4 00281844  CA 61 00 40 */	lfd f19, 0x40(r1)
/* 80285BE8 00281848  4B F4 15 85 */	bl _restgpr_25
/* 80285BEC 0028184C  80 01 01 14 */	lwz r0, 0x114(r1)
/* 80285BF0 00281850  7C 08 03 A6 */	mtlr r0
/* 80285BF4 00281854  38 21 01 10 */	addi r1, r1, 0x110
/* 80285BF8 00281858  4E 80 00 20 */	blr