summaryrefslogtreecommitdiff
path: root/asm/MetroTRK/dolphin_trk.s
blob: 12def874e34330d144f7147c4c57cf0c755fd207 (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
.include "macros.inc"

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

.global InitMetroTRK
InitMetroTRK:
/* 801D9138 001D4D98  38 21 FF FC */	addi r1, r1, -4
/* 801D913C 001D4D9C  90 61 00 00 */	stw r3, 0(r1)
/* 801D9140 001D4DA0  3C 60 80 49 */	lis r3, lbl_80490898@h
/* 801D9144 001D4DA4  60 63 08 98 */	ori r3, r3, lbl_80490898@l
/* 801D9148 001D4DA8  BC 03 00 00 */	stmw r0, 0(r3)
/* 801D914C 001D4DAC  80 81 00 00 */	lwz r4, 0(r1)
/* 801D9150 001D4DB0  38 21 00 04 */	addi r1, r1, 4
/* 801D9154 001D4DB4  90 23 00 04 */	stw r1, 4(r3)
/* 801D9158 001D4DB8  90 83 00 0C */	stw r4, 0xc(r3)
/* 801D915C 001D4DBC  7C 88 02 A6 */	mflr r4
/* 801D9160 001D4DC0  90 83 00 84 */	stw r4, 0x84(r3)
/* 801D9164 001D4DC4  90 83 00 80 */	stw r4, 0x80(r3)
/* 801D9168 001D4DC8  7C 80 00 26 */	mfcr r4
/* 801D916C 001D4DCC  90 83 00 88 */	stw r4, 0x88(r3)
/* 801D9170 001D4DD0  7C 80 00 A6 */	mfmsr r4
/* 801D9174 001D4DD4  60 83 80 00 */	ori r3, r4, 0x8000
/* 801D9178 001D4DD8  68 63 80 00 */	xori r3, r3, 0x8000
/* 801D917C 001D4DDC  7C 60 01 24 */	mtmsr r3
/* 801D9180 001D4DE0  7C 9B 03 A6 */	mtspr 0x1b, r4
/* 801D9184 001D4DE4  4B FF FA CD */	bl TRKSaveExtended1Block
/* 801D9188 001D4DE8  3C 60 80 49 */	lis r3, lbl_80490898@h
/* 801D918C 001D4DEC  60 63 08 98 */	ori r3, r3, lbl_80490898@l
/* 801D9190 001D4DF0  B8 03 00 00 */	.4byte 0xB8030000  /* illegal lmw r0, 0(r3) */
/* 801D9194 001D4DF4  38 00 00 00 */	li r0, 0
/* 801D9198 001D4DF8  7C 12 FB A6 */	mtspr 0x3f2, r0
/* 801D919C 001D4DFC  7C 15 FB A6 */	mtspr 0x3f5, r0
/* 801D91A0 001D4E00  3C 20 80 65 */	lis r1, 0x80655050@h
/* 801D91A4 001D4E04  60 21 50 50 */	ori r1, r1, 0x80655050@l
/* 801D91A8 001D4E08  7C A3 2B 78 */	mr r3, r5
/* 801D91AC 001D4E0C  48 00 05 A1 */	bl InitMetroTRKCommTable
/* 801D91B0 001D4E10  2C 03 00 01 */	cmpwi r3, 1
/* 801D91B4 001D4E14  40 82 00 14 */	bne lbl_801D91C8
/* 801D91B8 001D4E18  80 83 00 84 */	lwz r4, 0x84(r3)
/* 801D91BC 001D4E1C  7C 88 03 A6 */	mtlr r4
/* 801D91C0 001D4E20  B8 03 00 00 */	.4byte 0xB8030000  /* illegal lmw r0, 0(r3) */
/* 801D91C4 001D4E24  4E 80 00 20 */	blr
lbl_801D91C8:
/* 801D91C8 001D4E28  48 00 02 8C */	b TRK_main
/* 801D91CC 001D4E2C  4E 80 00 20 */	blr

.global InitMetroTRK_BBA
InitMetroTRK_BBA:
/* 801D91D0 001D4E30  38 21 FF FC */	addi r1, r1, -4
/* 801D91D4 001D4E34  90 61 00 00 */	stw r3, 0(r1)
/* 801D91D8 001D4E38  3C 60 80 49 */	lis r3, lbl_80490898@h
/* 801D91DC 001D4E3C  60 63 08 98 */	ori r3, r3, lbl_80490898@l
/* 801D91E0 001D4E40  BC 03 00 00 */	stmw r0, 0(r3)
/* 801D91E4 001D4E44  80 81 00 00 */	lwz r4, 0(r1)
/* 801D91E8 001D4E48  38 21 00 04 */	addi r1, r1, 4
/* 801D91EC 001D4E4C  90 23 00 04 */	stw r1, 4(r3)
/* 801D91F0 001D4E50  90 83 00 0C */	stw r4, 0xc(r3)
/* 801D91F4 001D4E54  7C 88 02 A6 */	mflr r4
/* 801D91F8 001D4E58  90 83 00 84 */	stw r4, 0x84(r3)
/* 801D91FC 001D4E5C  90 83 00 80 */	stw r4, 0x80(r3)
/* 801D9200 001D4E60  7C 80 00 26 */	mfcr r4
/* 801D9204 001D4E64  90 83 00 88 */	stw r4, 0x88(r3)
/* 801D9208 001D4E68  7C 80 00 A6 */	mfmsr r4
/* 801D920C 001D4E6C  60 83 80 00 */	ori r3, r4, 0x8000
/* 801D9210 001D4E70  7C 60 01 24 */	mtmsr r3
/* 801D9214 001D4E74  7C 9B 03 A6 */	mtspr 0x1b, r4
/* 801D9218 001D4E78  4B FF FA 39 */	bl TRKSaveExtended1Block
/* 801D921C 001D4E7C  3C 60 80 49 */	lis r3, lbl_80490898@h
/* 801D9220 001D4E80  60 63 08 98 */	ori r3, r3, lbl_80490898@l
/* 801D9224 001D4E84  B8 03 00 00 */	.4byte 0xB8030000  /* illegal lmw r0, 0(r3) */
/* 801D9228 001D4E88  38 00 00 00 */	li r0, 0
/* 801D922C 001D4E8C  7C 12 FB A6 */	mtspr 0x3f2, r0
/* 801D9230 001D4E90  7C 15 FB A6 */	mtspr 0x3f5, r0
/* 801D9234 001D4E94  3C 20 80 65 */	lis r1, 0x80655050@h
/* 801D9238 001D4E98  60 21 50 50 */	ori r1, r1, 0x80655050@l
/* 801D923C 001D4E9C  38 60 00 02 */	li r3, 2
/* 801D9240 001D4EA0  48 00 05 0D */	bl InitMetroTRKCommTable
/* 801D9244 001D4EA4  2C 03 00 01 */	cmpwi r3, 1
/* 801D9248 001D4EA8  40 82 00 14 */	bne lbl_801D925C
/* 801D924C 001D4EAC  80 83 00 84 */	lwz r4, 0x84(r3)
/* 801D9250 001D4EB0  7C 88 03 A6 */	mtlr r4
/* 801D9254 001D4EB4  B8 03 00 00 */	.4byte 0xB8030000  /* illegal lmw r0, 0(r3) */
/* 801D9258 001D4EB8  4E 80 00 20 */	blr
lbl_801D925C:
/* 801D925C 001D4EBC  48 00 01 F8 */	b TRK_main
/* 801D9260 001D4EC0  4E 80 00 20 */	blr

.global TRKInitializeTarget
TRKInitializeTarget:
/* 801D9264 001D4EC4  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D9268 001D4EC8  7C 08 02 A6 */	mflr r0
/* 801D926C 001D4ECC  3C 60 80 49 */	lis r3, lbl_804907F4@ha
/* 801D9270 001D4ED0  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D9274 001D4ED4  38 00 00 01 */	li r0, 1
/* 801D9278 001D4ED8  38 63 07 F4 */	addi r3, r3, lbl_804907F4@l
/* 801D927C 001D4EDC  90 03 00 98 */	stw r0, 0x98(r3)
/* 801D9280 001D4EE0  4B FF DF 91 */	bl __TRK_get_MSR
/* 801D9284 001D4EE4  3C A0 80 49 */	lis r5, lbl_804907F4@ha
/* 801D9288 001D4EE8  3C 80 80 49 */	lis r4, lbl_80490D70@ha
/* 801D928C 001D4EEC  38 A5 07 F4 */	addi r5, r5, lbl_804907F4@l
/* 801D9290 001D4EF0  3C 00 E0 00 */	lis r0, 0xe000
/* 801D9294 001D4EF4  90 65 00 8C */	stw r3, 0x8c(r5)
/* 801D9298 001D4EF8  38 60 00 00 */	li r3, 0
/* 801D929C 001D4EFC  90 04 0D 70 */	stw r0, lbl_80490D70@l(r4)
/* 801D92A0 001D4F00  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D92A4 001D4F04  7C 08 03 A6 */	mtlr r0
/* 801D92A8 001D4F08  38 21 00 10 */	addi r1, r1, 0x10
/* 801D92AC 001D4F0C  4E 80 00 20 */	blr

.global __TRK_copy_vectors
__TRK_copy_vectors:
/* 801D92B0 001D4F10  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801D92B4 001D4F14  7C 08 02 A6 */	mflr r0
/* 801D92B8 001D4F18  3C 60 80 49 */	lis r3, lbl_80490D70@ha
/* 801D92BC 001D4F1C  90 01 00 24 */	stw r0, 0x24(r1)
/* 801D92C0 001D4F20  38 63 0D 70 */	addi r3, r3, lbl_80490D70@l
/* 801D92C4 001D4F24  BF 61 00 0C */	stmw r27, 0xc(r1)
/* 801D92C8 001D4F28  80 63 00 00 */	lwz r3, 0(r3)
/* 801D92CC 001D4F2C  28 03 00 44 */	cmplwi r3, 0x44
/* 801D92D0 001D4F30  41 81 00 2C */	bgt lbl_801D92FC
/* 801D92D4 001D4F34  38 03 40 00 */	addi r0, r3, 0x4000
/* 801D92D8 001D4F38  28 00 00 44 */	cmplwi r0, 0x44
/* 801D92DC 001D4F3C  40 81 00 20 */	ble lbl_801D92FC
/* 801D92E0 001D4F40  3C 60 80 49 */	lis r3, lbl_80490898@ha
/* 801D92E4 001D4F44  38 63 08 98 */	addi r3, r3, lbl_80490898@l
/* 801D92E8 001D4F48  80 03 02 38 */	lwz r0, 0x238(r3)
/* 801D92EC 001D4F4C  54 00 07 BF */	clrlwi. r0, r0, 0x1e
/* 801D92F0 001D4F50  41 82 00 0C */	beq lbl_801D92FC
/* 801D92F4 001D4F54  38 A0 00 44 */	li r5, 0x44
/* 801D92F8 001D4F58  48 00 00 0C */	b lbl_801D9304
lbl_801D92FC:
/* 801D92FC 001D4F5C  3C 60 80 00 */	lis r3, 0x80000044@ha
/* 801D9300 001D4F60  38 A3 00 44 */	addi r5, r3, 0x80000044@l
lbl_801D9304:
/* 801D9304 001D4F64  3C 80 80 42 */	lis r4, lbl_80423260@ha
/* 801D9308 001D4F68  3C 60 80 49 */	lis r3, lbl_80490898@ha
/* 801D930C 001D4F6C  83 A5 00 00 */	lwz r29, 0(r5)
/* 801D9310 001D4F70  3B E4 32 60 */	addi r31, r4, lbl_80423260@l
/* 801D9314 001D4F74  3B 83 08 98 */	addi r28, r3, lbl_80490898@l
/* 801D9318 001D4F78  3B C0 00 00 */	li r30, 0
lbl_801D931C:
/* 801D931C 001D4F7C  38 00 00 01 */	li r0, 1
/* 801D9320 001D4F80  7C 00 F0 30 */	slw r0, r0, r30
/* 801D9324 001D4F84  7F A0 00 39 */	and. r0, r29, r0
/* 801D9328 001D4F88  41 82 00 90 */	beq lbl_801D93B8
/* 801D932C 001D4F8C  2C 1E 00 04 */	cmpwi r30, 4
/* 801D9330 001D4F90  41 82 00 88 */	beq lbl_801D93B8
/* 801D9334 001D4F94  3C 60 80 49 */	lis r3, lbl_80490D70@ha
/* 801D9338 001D4F98  80 DF 00 00 */	lwz r6, 0(r31)
/* 801D933C 001D4F9C  38 63 0D 70 */	addi r3, r3, lbl_80490D70@l
/* 801D9340 001D4FA0  80 63 00 00 */	lwz r3, 0(r3)
/* 801D9344 001D4FA4  7C 06 18 40 */	cmplw r6, r3
/* 801D9348 001D4FA8  41 80 00 24 */	blt lbl_801D936C
/* 801D934C 001D4FAC  38 03 40 00 */	addi r0, r3, 0x4000
/* 801D9350 001D4FB0  7C 06 00 40 */	cmplw r6, r0
/* 801D9354 001D4FB4  40 80 00 18 */	bge lbl_801D936C
/* 801D9358 001D4FB8  80 1C 02 38 */	lwz r0, 0x238(r28)
/* 801D935C 001D4FBC  54 00 07 BF */	clrlwi. r0, r0, 0x1e
/* 801D9360 001D4FC0  41 82 00 0C */	beq lbl_801D936C
/* 801D9364 001D4FC4  7C DB 33 78 */	mr r27, r6
/* 801D9368 001D4FC8  48 00 00 2C */	b lbl_801D9394
lbl_801D936C:
/* 801D936C 001D4FCC  3C 00 7E 00 */	lis r0, 0x7e00
/* 801D9370 001D4FD0  7C 06 00 40 */	cmplw r6, r0
/* 801D9374 001D4FD4  41 80 00 18 */	blt lbl_801D938C
/* 801D9378 001D4FD8  3C 00 80 00 */	lis r0, 0x8000
/* 801D937C 001D4FDC  7C 06 00 40 */	cmplw r6, r0
/* 801D9380 001D4FE0  41 81 00 0C */	bgt lbl_801D938C
/* 801D9384 001D4FE4  7C DB 33 78 */	mr r27, r6
/* 801D9388 001D4FE8  48 00 00 0C */	b lbl_801D9394
lbl_801D938C:
/* 801D938C 001D4FEC  54 C0 00 BE */	clrlwi r0, r6, 2
/* 801D9390 001D4FF0  64 1B 80 00 */	oris r27, r0, 0x8000
lbl_801D9394:
/* 801D9394 001D4FF4  3C 80 80 00 */	lis r4, lbl_80004188@ha
/* 801D9398 001D4FF8  7F 63 DB 78 */	mr r3, r27
/* 801D939C 001D4FFC  38 04 41 88 */	addi r0, r4, lbl_80004188@l
/* 801D93A0 001D5000  38 A0 01 00 */	li r5, 0x100
/* 801D93A4 001D5004  7C 80 32 14 */	add r4, r0, r6
/* 801D93A8 001D5008  4B E2 AD BD */	bl TRK_memcpy
/* 801D93AC 001D500C  7F 63 DB 78 */	mr r3, r27
/* 801D93B0 001D5010  38 80 01 00 */	li r4, 0x100
/* 801D93B4 001D5014  4B FF DD 51 */	bl TRK_flush_cache
lbl_801D93B8:
/* 801D93B8 001D5018  3B DE 00 01 */	addi r30, r30, 1
/* 801D93BC 001D501C  3B FF 00 04 */	addi r31, r31, 4
/* 801D93C0 001D5020  2C 1E 00 0E */	cmpwi r30, 0xe
/* 801D93C4 001D5024  40 81 FF 58 */	ble lbl_801D931C
/* 801D93C8 001D5028  BB 61 00 0C */	lmw r27, 0xc(r1)
/* 801D93CC 001D502C  80 01 00 24 */	lwz r0, 0x24(r1)
/* 801D93D0 001D5030  7C 08 03 A6 */	mtlr r0
/* 801D93D4 001D5034  38 21 00 20 */	addi r1, r1, 0x20
/* 801D93D8 001D5038  4E 80 00 20 */	blr

.global TRKTargetTranslate
TRKTargetTranslate:
/* 801D93DC 001D503C  3C 80 80 49 */	lis r4, lbl_80490D70@ha
/* 801D93E0 001D5040  38 84 0D 70 */	addi r4, r4, lbl_80490D70@l
/* 801D93E4 001D5044  80 84 00 00 */	lwz r4, 0(r4)
/* 801D93E8 001D5048  7C 03 20 40 */	cmplw r3, r4
/* 801D93EC 001D504C  41 80 00 24 */	blt lbl_801D9410
/* 801D93F0 001D5050  38 04 40 00 */	addi r0, r4, 0x4000
/* 801D93F4 001D5054  7C 03 00 40 */	cmplw r3, r0
/* 801D93F8 001D5058  40 80 00 18 */	bge lbl_801D9410
/* 801D93FC 001D505C  3C 80 80 49 */	lis r4, lbl_80490898@ha
/* 801D9400 001D5060  38 84 08 98 */	addi r4, r4, lbl_80490898@l
/* 801D9404 001D5064  80 04 02 38 */	lwz r0, 0x238(r4)
/* 801D9408 001D5068  54 00 07 BF */	clrlwi. r0, r0, 0x1e
/* 801D940C 001D506C  4C 82 00 20 */	bnelr
lbl_801D9410:
/* 801D9410 001D5070  3C 00 7E 00 */	lis r0, 0x7e00
/* 801D9414 001D5074  7C 03 00 40 */	cmplw r3, r0
/* 801D9418 001D5078  41 80 00 10 */	blt lbl_801D9428
/* 801D941C 001D507C  3C 00 80 00 */	lis r0, 0x8000
/* 801D9420 001D5080  7C 03 00 40 */	cmplw r3, r0
/* 801D9424 001D5084  4C 81 00 20 */	blelr
lbl_801D9428:
/* 801D9428 001D5088  54 60 00 BE */	clrlwi r0, r3, 2
/* 801D942C 001D508C  64 03 80 00 */	oris r3, r0, 0x8000
/* 801D9430 001D5090  4E 80 00 20 */	blr

.global EnableMetroTRKInterrupts
EnableMetroTRKInterrupts:
/* 801D9434 001D5094  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D9438 001D5098  7C 08 02 A6 */	mflr r0
/* 801D943C 001D509C  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D9440 001D50A0  48 00 02 75 */	bl EnableEXI2Interrupts
/* 801D9444 001D50A4  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D9448 001D50A8  7C 08 03 A6 */	mtlr r0
/* 801D944C 001D50AC  38 21 00 10 */	addi r1, r1, 0x10
/* 801D9450 001D50B0  4E 80 00 20 */	blr