summaryrefslogtreecommitdiff
path: root/asm/TRK_MINNOW_DOLPHIN/dolphin_trk_glue.s
blob: 05d92272b9d8c146ec8227b082c3af6f1610c989 (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
258
259
260
261
262
263
264
265
266
267
268
269
270
271
.include "macros.inc"

.section .text, "ax"  # 0x80005600 - 0x8036FBA0
.global TRKLoadContext
TRKLoadContext:
/* 8008C014 00088F54  80 03 00 00 */	lwz r0, 0(r3)
/* 8008C018 00088F58  80 23 00 04 */	lwz r1, 4(r3)
/* 8008C01C 00088F5C  80 43 00 08 */	lwz r2, 8(r3)
/* 8008C020 00088F60  A0 A3 01 A2 */	lhz r5, 0x1a2(r3)
/* 8008C024 00088F64  54 A6 07 BD */	rlwinm. r6, r5, 0, 0x1e, 0x1e
/* 8008C028 00088F68  41 82 00 14 */	beq lbl_8008C03C
/* 8008C02C 00088F6C  54 A5 07 FA */	rlwinm r5, r5, 0, 0x1f, 0x1d
/* 8008C030 00088F70  B0 A3 01 A2 */	sth r5, 0x1a2(r3)
/* 8008C034 00088F74  B8 A3 00 14 */	lmw r5, 0x14(r3)
/* 8008C038 00088F78  48 00 00 08 */	b lbl_8008C040
lbl_8008C03C:
/* 8008C03C 00088F7C  B9 A3 00 34 */	lmw r13, 0x34(r3)
lbl_8008C040:
/* 8008C040 00088F80  7C 7F 1B 78 */	mr r31, r3
/* 8008C044 00088F84  7C 83 23 78 */	mr r3, r4
/* 8008C048 00088F88  80 9F 00 80 */	lwz r4, 0x80(r31)
/* 8008C04C 00088F8C  7C 8F F1 20 */	mtcrf 0xff, r4
/* 8008C050 00088F90  80 9F 00 84 */	lwz r4, 0x84(r31)
/* 8008C054 00088F94  7C 88 03 A6 */	mtlr r4
/* 8008C058 00088F98  80 9F 00 88 */	lwz r4, 0x88(r31)
/* 8008C05C 00088F9C  7C 89 03 A6 */	mtctr r4
/* 8008C060 00088FA0  80 9F 00 8C */	lwz r4, 0x8c(r31)
/* 8008C064 00088FA4  7C 81 03 A6 */	mtxer r4
/* 8008C068 00088FA8  7C 80 00 A6 */	mfmsr r4
/* 8008C06C 00088FAC  54 84 04 5E */	rlwinm r4, r4, 0, 0x11, 0xf
/* 8008C070 00088FB0  54 84 07 FA */	rlwinm r4, r4, 0, 0x1f, 0x1d
/* 8008C074 00088FB4  7C 80 01 24 */	mtmsr r4
/* 8008C078 00088FB8  7C 51 43 A6 */	mtspr 0x111, r2
/* 8008C07C 00088FBC  80 9F 00 0C */	lwz r4, 0xc(r31)
/* 8008C080 00088FC0  7C 92 43 A6 */	mtspr 0x112, r4
/* 8008C084 00088FC4  80 9F 00 10 */	lwz r4, 0x10(r31)
/* 8008C088 00088FC8  7C 93 43 A6 */	mtspr 0x113, r4
/* 8008C08C 00088FCC  80 5F 01 98 */	lwz r2, 0x198(r31)
/* 8008C090 00088FD0  80 9F 01 9C */	lwz r4, 0x19c(r31)
/* 8008C094 00088FD4  83 FF 00 7C */	lwz r31, 0x7c(r31)
/* 8008C098 00088FD8  4B FF ED 40 */	b TRKInterruptHandler

.global TRKEXICallBack
TRKEXICallBack:
/* 8008C09C 00088FDC  7C 08 02 A6 */	mflr r0
/* 8008C0A0 00088FE0  90 01 00 04 */	stw r0, 4(r1)
/* 8008C0A4 00088FE4  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8008C0A8 00088FE8  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8008C0AC 00088FEC  7C 9F 23 78 */	mr r31, r4
/* 8008C0B0 00088FF0  48 00 6C 59 */	bl OSEnableScheduler
/* 8008C0B4 00088FF4  7F E3 FB 78 */	mr r3, r31
/* 8008C0B8 00088FF8  38 80 05 00 */	li r4, 0x500
/* 8008C0BC 00088FFC  4B FF FF 59 */	bl TRKLoadContext
/* 8008C0C0 00089000  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8008C0C4 00089004  38 21 00 10 */	addi r1, r1, 0x10
/* 8008C0C8 00089008  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C0CC 0008900C  7C 08 03 A6 */	mtlr r0
/* 8008C0D0 00089010  4E 80 00 20 */	blr 

.global InitMetroTRKCommTable
InitMetroTRKCommTable:
/* 8008C0D4 00089014  7C 08 02 A6 */	mflr r0
/* 8008C0D8 00089018  90 01 00 04 */	stw r0, 4(r1)
/* 8008C0DC 0008901C  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C0E0 00089020  2C 03 00 01 */	cmpwi r3, 1
/* 8008C0E4 00089024  40 82 00 68 */	bne lbl_8008C14C
/* 8008C0E8 00089028  48 02 2F 29 */	bl Hu_IsStub
/* 8008C0EC 0008902C  3C A0 80 0B */	lis r5, DBInitComm@ha
/* 8008C0F0 00089030  3C 80 80 3B */	lis r4, gDBCommTable@ha
/* 8008C0F4 00089034  38 05 E9 44 */	addi r0, r5, DBInitComm@l
/* 8008C0F8 00089038  38 A4 F0 88 */	addi r5, r4, gDBCommTable@l
/* 8008C0FC 0008903C  3C 80 80 0B */	lis r4, DBInitInterrupts@ha
/* 8008C100 00089040  90 05 00 00 */	stw r0, 0(r5)
/* 8008C104 00089044  38 04 E8 F0 */	addi r0, r4, DBInitInterrupts@l
/* 8008C108 00089048  3C 80 80 0B */	lis r4, DBQueryData@ha
/* 8008C10C 0008904C  90 05 00 04 */	stw r0, 4(r5)
/* 8008C110 00089050  38 04 E8 54 */	addi r0, r4, DBQueryData@l
/* 8008C114 00089054  3C 80 80 0B */	lis r4, DBRead@ha
/* 8008C118 00089058  90 05 00 08 */	stw r0, 8(r5)
/* 8008C11C 0008905C  38 04 E7 C8 */	addi r0, r4, DBRead@l
/* 8008C120 00089060  3C 80 80 0B */	lis r4, DBWrite@ha
/* 8008C124 00089064  90 05 00 0C */	stw r0, 0xc(r5)
/* 8008C128 00089068  38 04 E5 68 */	addi r0, r4, DBWrite@l
/* 8008C12C 0008906C  3C 80 80 0B */	lis r4, DBOpen@ha
/* 8008C130 00089070  90 05 00 10 */	stw r0, 0x10(r5)
/* 8008C134 00089074  38 04 E5 64 */	addi r0, r4, DBOpen@l
/* 8008C138 00089078  3C 80 80 0B */	lis r4, DBClose@ha
/* 8008C13C 0008907C  90 05 00 14 */	stw r0, 0x14(r5)
/* 8008C140 00089080  38 04 E5 60 */	addi r0, r4, DBClose@l
/* 8008C144 00089084  90 05 00 18 */	stw r0, 0x18(r5)
/* 8008C148 00089088  48 00 00 64 */	b lbl_8008C1AC
lbl_8008C14C:
/* 8008C14C 0008908C  48 02 2E BD */	bl AMC_IsStub
/* 8008C150 00089090  3C A0 80 0B */	lis r5, EXI2_Init@ha
/* 8008C154 00089094  3C 80 80 3B */	lis r4, gDBCommTable@ha
/* 8008C158 00089098  38 05 EF E0 */	addi r0, r5, EXI2_Init@l
/* 8008C15C 0008909C  38 A4 F0 88 */	addi r5, r4, gDBCommTable@l
/* 8008C160 000890A0  3C 80 80 0B */	lis r4, EXI2_EnableInterrupts@ha
/* 8008C164 000890A4  90 05 00 00 */	stw r0, 0(r5)
/* 8008C168 000890A8  38 04 EF E4 */	addi r0, r4, EXI2_EnableInterrupts@l
/* 8008C16C 000890AC  3C 80 80 0B */	lis r4, EXI2_Poll@ha
/* 8008C170 000890B0  90 05 00 04 */	stw r0, 4(r5)
/* 8008C174 000890B4  38 04 EF E8 */	addi r0, r4, EXI2_Poll@l
/* 8008C178 000890B8  3C 80 80 0B */	lis r4, EXI2_ReadN@ha
/* 8008C17C 000890BC  90 05 00 08 */	stw r0, 8(r5)
/* 8008C180 000890C0  38 04 EF F0 */	addi r0, r4, EXI2_ReadN@l
/* 8008C184 000890C4  3C 80 80 0B */	lis r4, EXI2_WriteN@ha
/* 8008C188 000890C8  90 05 00 0C */	stw r0, 0xc(r5)
/* 8008C18C 000890CC  38 04 EF F8 */	addi r0, r4, EXI2_WriteN@l
/* 8008C190 000890D0  3C 80 80 0B */	lis r4, EXI2_Reserve@ha
/* 8008C194 000890D4  90 05 00 10 */	stw r0, 0x10(r5)
/* 8008C198 000890D8  38 04 F0 00 */	addi r0, r4, EXI2_Reserve@l
/* 8008C19C 000890DC  3C 80 80 0B */	lis r4, EXI2_Unreserve@ha
/* 8008C1A0 000890E0  90 05 00 14 */	stw r0, 0x14(r5)
/* 8008C1A4 000890E4  38 04 F0 04 */	addi r0, r4, EXI2_Unreserve@l
/* 8008C1A8 000890E8  90 05 00 18 */	stw r0, 0x18(r5)
lbl_8008C1AC:
/* 8008C1AC 000890EC  38 21 00 08 */	addi r1, r1, 8
/* 8008C1B0 000890F0  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C1B4 000890F4  7C 08 03 A6 */	mtlr r0
/* 8008C1B8 000890F8  4E 80 00 20 */	blr 

.global TRKUARTInterruptHandler
TRKUARTInterruptHandler:
/* 8008C1BC 000890FC  4E 80 00 20 */	blr 

.global TRKInitializeIntDrivenUART
TRKInitializeIntDrivenUART:
/* 8008C1C0 00089100  7C 08 02 A6 */	mflr r0
/* 8008C1C4 00089104  90 01 00 04 */	stw r0, 4(r1)
/* 8008C1C8 00089108  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C1CC 0008910C  3C 60 80 3B */	lis r3, gDBCommTable@ha
/* 8008C1D0 00089110  38 63 F0 88 */	addi r3, r3, gDBCommTable@l
/* 8008C1D4 00089114  3C 80 80 09 */	lis r4, TRKEXICallBack@ha
/* 8008C1D8 00089118  81 83 00 00 */	lwz r12, 0(r3)
/* 8008C1DC 0008911C  38 84 C0 9C */	addi r4, r4, TRKEXICallBack@l
/* 8008C1E0 00089120  7C C3 33 78 */	mr r3, r6
/* 8008C1E4 00089124  7D 88 03 A6 */	mtlr r12
/* 8008C1E8 00089128  4E 80 00 21 */	blrl 
/* 8008C1EC 0008912C  38 60 00 00 */	li r3, 0
/* 8008C1F0 00089130  38 21 00 08 */	addi r1, r1, 8
/* 8008C1F4 00089134  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C1F8 00089138  7C 08 03 A6 */	mtlr r0
/* 8008C1FC 0008913C  4E 80 00 20 */	blr 

.global EnableEXI2Interrupts
EnableEXI2Interrupts:
/* 8008C200 00089140  7C 08 02 A6 */	mflr r0
/* 8008C204 00089144  90 01 00 04 */	stw r0, 4(r1)
/* 8008C208 00089148  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C20C 0008914C  3C 60 80 3B */	lis r3, gDBCommTable@ha
/* 8008C210 00089150  38 63 F0 88 */	addi r3, r3, gDBCommTable@l
/* 8008C214 00089154  81 83 00 04 */	lwz r12, 4(r3)
/* 8008C218 00089158  7D 88 03 A6 */	mtlr r12
/* 8008C21C 0008915C  4E 80 00 21 */	blrl 
/* 8008C220 00089160  38 21 00 08 */	addi r1, r1, 8
/* 8008C224 00089164  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C228 00089168  7C 08 03 A6 */	mtlr r0
/* 8008C22C 0008916C  4E 80 00 20 */	blr 

.global TRKPollUART
TRKPollUART:
/* 8008C230 00089170  7C 08 02 A6 */	mflr r0
/* 8008C234 00089174  90 01 00 04 */	stw r0, 4(r1)
/* 8008C238 00089178  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C23C 0008917C  3C 60 80 3B */	lis r3, gDBCommTable@ha
/* 8008C240 00089180  38 63 F0 88 */	addi r3, r3, gDBCommTable@l
/* 8008C244 00089184  81 83 00 08 */	lwz r12, 8(r3)
/* 8008C248 00089188  7D 88 03 A6 */	mtlr r12
/* 8008C24C 0008918C  4E 80 00 21 */	blrl 
/* 8008C250 00089190  38 21 00 08 */	addi r1, r1, 8
/* 8008C254 00089194  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C258 00089198  7C 08 03 A6 */	mtlr r0
/* 8008C25C 0008919C  4E 80 00 20 */	blr 

.global TRKReadUARTN
TRKReadUARTN:
/* 8008C260 000891A0  7C 08 02 A6 */	mflr r0
/* 8008C264 000891A4  90 01 00 04 */	stw r0, 4(r1)
/* 8008C268 000891A8  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C26C 000891AC  3C A0 80 3B */	lis r5, gDBCommTable@ha
/* 8008C270 000891B0  38 A5 F0 88 */	addi r5, r5, gDBCommTable@l
/* 8008C274 000891B4  81 85 00 0C */	lwz r12, 0xc(r5)
/* 8008C278 000891B8  7D 88 03 A6 */	mtlr r12
/* 8008C27C 000891BC  4E 80 00 21 */	blrl 
/* 8008C280 000891C0  2C 03 00 00 */	cmpwi r3, 0
/* 8008C284 000891C4  40 82 00 0C */	bne lbl_8008C290
/* 8008C288 000891C8  38 60 00 00 */	li r3, 0
/* 8008C28C 000891CC  48 00 00 08 */	b lbl_8008C294
lbl_8008C290:
/* 8008C290 000891D0  38 60 FF FF */	li r3, -1
lbl_8008C294:
/* 8008C294 000891D4  38 21 00 08 */	addi r1, r1, 8
/* 8008C298 000891D8  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C29C 000891DC  7C 08 03 A6 */	mtlr r0
/* 8008C2A0 000891E0  4E 80 00 20 */	blr 

.global TRKWriteUARTN
TRKWriteUARTN:
/* 8008C2A4 000891E4  7C 08 02 A6 */	mflr r0
/* 8008C2A8 000891E8  90 01 00 04 */	stw r0, 4(r1)
/* 8008C2AC 000891EC  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C2B0 000891F0  3C A0 80 3B */	lis r5, gDBCommTable@ha
/* 8008C2B4 000891F4  38 A5 F0 88 */	addi r5, r5, gDBCommTable@l
/* 8008C2B8 000891F8  81 85 00 10 */	lwz r12, 0x10(r5)
/* 8008C2BC 000891FC  7D 88 03 A6 */	mtlr r12
/* 8008C2C0 00089200  4E 80 00 21 */	blrl 
/* 8008C2C4 00089204  2C 03 00 00 */	cmpwi r3, 0
/* 8008C2C8 00089208  40 82 00 0C */	bne lbl_8008C2D4
/* 8008C2CC 0008920C  38 60 00 00 */	li r3, 0
/* 8008C2D0 00089210  48 00 00 08 */	b lbl_8008C2D8
lbl_8008C2D4:
/* 8008C2D4 00089214  38 60 FF FF */	li r3, -1
lbl_8008C2D8:
/* 8008C2D8 00089218  38 21 00 08 */	addi r1, r1, 8
/* 8008C2DC 0008921C  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C2E0 00089220  7C 08 03 A6 */	mtlr r0
/* 8008C2E4 00089224  4E 80 00 20 */	blr 

.global ReserveEXI2Port
ReserveEXI2Port:
/* 8008C2E8 00089228  7C 08 02 A6 */	mflr r0
/* 8008C2EC 0008922C  90 01 00 04 */	stw r0, 4(r1)
/* 8008C2F0 00089230  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C2F4 00089234  3C 60 80 3B */	lis r3, gDBCommTable@ha
/* 8008C2F8 00089238  38 63 F0 88 */	addi r3, r3, gDBCommTable@l
/* 8008C2FC 0008923C  81 83 00 14 */	lwz r12, 0x14(r3)
/* 8008C300 00089240  7D 88 03 A6 */	mtlr r12
/* 8008C304 00089244  4E 80 00 21 */	blrl 
/* 8008C308 00089248  38 21 00 08 */	addi r1, r1, 8
/* 8008C30C 0008924C  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C310 00089250  7C 08 03 A6 */	mtlr r0
/* 8008C314 00089254  4E 80 00 20 */	blr 

.global UnreserveEXI2Port
UnreserveEXI2Port:
/* 8008C318 00089258  7C 08 02 A6 */	mflr r0
/* 8008C31C 0008925C  90 01 00 04 */	stw r0, 4(r1)
/* 8008C320 00089260  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C324 00089264  3C 60 80 3B */	lis r3, gDBCommTable@ha
/* 8008C328 00089268  38 63 F0 88 */	addi r3, r3, gDBCommTable@l
/* 8008C32C 0008926C  81 83 00 18 */	lwz r12, 0x18(r3)
/* 8008C330 00089270  7D 88 03 A6 */	mtlr r12
/* 8008C334 00089274  4E 80 00 21 */	blrl 
/* 8008C338 00089278  38 21 00 08 */	addi r1, r1, 8
/* 8008C33C 0008927C  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C340 00089280  7C 08 03 A6 */	mtlr r0
/* 8008C344 00089284  4E 80 00 20 */	blr 

.global TRK_board_display
TRK_board_display:
/* 8008C348 00089288  7C 08 02 A6 */	mflr r0
/* 8008C34C 0008928C  90 01 00 04 */	stw r0, 4(r1)
/* 8008C350 00089290  94 21 FF F8 */	stwu r1, -8(r1)
/* 8008C354 00089294  4C C6 31 82 */	crclr 6
/* 8008C358 00089298  48 00 2C 0D */	bl OSReport
/* 8008C35C 0008929C  38 21 00 08 */	addi r1, r1, 8
/* 8008C360 000892A0  80 01 00 04 */	lwz r0, 4(r1)
/* 8008C364 000892A4  7C 08 03 A6 */	mtlr r0
/* 8008C368 000892A8  4E 80 00 20 */	blr 

.section .data, "wa"  # 0x803A8380 - 0x803E6000
gDBCommTable:
  .4byte 0
  .4byte 0
  .4byte 0
  .4byte 0
  .4byte 0
  .4byte 0
  .4byte 0
  .4byte 0