summaryrefslogtreecommitdiff
path: root/asm/MetroTRK/main.s
blob: 80287313c7c536c44259289131b7ff93d7201f7d (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
.include "macros.inc"

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

.global gdev_cc_initinterrupts
gdev_cc_initinterrupts:
/* 801D99F0 001D5650  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D99F4 001D5654  7C 08 02 A6 */	mflr r0
/* 801D99F8 001D5658  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D99FC 001D565C  48 00 06 19 */	bl DBInitInterrupts
/* 801D9A00 001D5660  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D9A04 001D5664  38 60 00 00 */	li r3, 0
/* 801D9A08 001D5668  7C 08 03 A6 */	mtlr r0
/* 801D9A0C 001D566C  38 21 00 10 */	addi r1, r1, 0x10
/* 801D9A10 001D5670  4E 80 00 20 */	blr

.global gdev_cc_peek
gdev_cc_peek:
/* 801D9A14 001D5674  94 21 FA F0 */	stwu r1, -0x510(r1)
/* 801D9A18 001D5678  7C 08 02 A6 */	mflr r0
/* 801D9A1C 001D567C  90 01 05 14 */	stw r0, 0x514(r1)
/* 801D9A20 001D5680  93 E1 05 0C */	stw r31, 0x50c(r1)
/* 801D9A24 001D5684  48 00 06 45 */	bl DBQueryData
/* 801D9A28 001D5688  7C 7F 1B 79 */	or. r31, r3, r3
/* 801D9A2C 001D568C  41 81 00 0C */	bgt lbl_801D9A38
/* 801D9A30 001D5690  38 60 00 00 */	li r3, 0
/* 801D9A34 001D5694  48 00 00 3C */	b lbl_801D9A70
lbl_801D9A38:
/* 801D9A38 001D5698  7F E4 FB 78 */	mr r4, r31
/* 801D9A3C 001D569C  38 61 00 08 */	addi r3, r1, 8
/* 801D9A40 001D56A0  48 00 06 CD */	bl DBRead
/* 801D9A44 001D56A4  2C 03 00 00 */	cmpwi r3, 0
/* 801D9A48 001D56A8  40 82 00 1C */	bne lbl_801D9A64
/* 801D9A4C 001D56AC  3C 60 80 49 */	lis r3, lbl_80491290@ha
/* 801D9A50 001D56B0  7F E5 FB 78 */	mr r5, r31
/* 801D9A54 001D56B4  38 63 12 90 */	addi r3, r3, lbl_80491290@l
/* 801D9A58 001D56B8  38 81 00 08 */	addi r4, r1, 8
/* 801D9A5C 001D56BC  48 00 03 5D */	bl CircleBufferWriteBytes
/* 801D9A60 001D56C0  48 00 00 0C */	b lbl_801D9A6C
lbl_801D9A64:
/* 801D9A64 001D56C4  38 60 D8 E7 */	li r3, -10009
/* 801D9A68 001D56C8  48 00 00 08 */	b lbl_801D9A70
lbl_801D9A6C:
/* 801D9A6C 001D56CC  7F E3 FB 78 */	mr r3, r31
lbl_801D9A70:
/* 801D9A70 001D56D0  80 01 05 14 */	lwz r0, 0x514(r1)
/* 801D9A74 001D56D4  83 E1 05 0C */	lwz r31, 0x50c(r1)
/* 801D9A78 001D56D8  7C 08 03 A6 */	mtlr r0
/* 801D9A7C 001D56DC  38 21 05 10 */	addi r1, r1, 0x510
/* 801D9A80 001D56E0  4E 80 00 20 */	blr

.global gdev_cc_post_stop
gdev_cc_post_stop:
/* 801D9A84 001D56E4  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D9A88 001D56E8  7C 08 02 A6 */	mflr r0
/* 801D9A8C 001D56EC  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D9A90 001D56F0  48 00 08 0D */	bl DBOpen
/* 801D9A94 001D56F4  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D9A98 001D56F8  38 60 00 00 */	li r3, 0
/* 801D9A9C 001D56FC  7C 08 03 A6 */	mtlr r0
/* 801D9AA0 001D5700  38 21 00 10 */	addi r1, r1, 0x10
/* 801D9AA4 001D5704  4E 80 00 20 */	blr

.global gdev_cc_pre_continue
gdev_cc_pre_continue:
/* 801D9AA8 001D5708  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D9AAC 001D570C  7C 08 02 A6 */	mflr r0
/* 801D9AB0 001D5710  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D9AB4 001D5714  48 00 07 ED */	bl DBClose
/* 801D9AB8 001D5718  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D9ABC 001D571C  38 60 00 00 */	li r3, 0
/* 801D9AC0 001D5720  7C 08 03 A6 */	mtlr r0
/* 801D9AC4 001D5724  38 21 00 10 */	addi r1, r1, 0x10
/* 801D9AC8 001D5728  4E 80 00 20 */	blr

.global gdev_cc_write
gdev_cc_write:
/* 801D9ACC 001D572C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D9AD0 001D5730  7C 08 02 A6 */	mflr r0
/* 801D9AD4 001D5734  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D9AD8 001D5738  93 E1 00 0C */	stw r31, 0xc(r1)
/* 801D9ADC 001D573C  7C 9F 23 78 */	mr r31, r4
/* 801D9AE0 001D5740  93 C1 00 08 */	stw r30, 8(r1)
/* 801D9AE4 001D5744  7C 7E 1B 78 */	mr r30, r3
/* 801D9AE8 001D5748  80 0D 9F E8 */	lwz r0, lbl_8063F2A8-_SDA_BASE_(r13)
/* 801D9AEC 001D574C  2C 00 00 00 */	cmpwi r0, 0
/* 801D9AF0 001D5750  40 82 00 2C */	bne lbl_801D9B1C
/* 801D9AF4 001D5754  38 60 D8 EF */	li r3, -10001
/* 801D9AF8 001D5758  48 00 00 30 */	b lbl_801D9B28
/* 801D9AFC 001D575C  48 00 00 20 */	b lbl_801D9B1C
lbl_801D9B00:
/* 801D9B00 001D5760  7F C3 F3 78 */	mr r3, r30
/* 801D9B04 001D5764  7F E4 FB 78 */	mr r4, r31
/* 801D9B08 001D5768  48 00 06 85 */	bl DBWrite
/* 801D9B0C 001D576C  2C 03 00 00 */	cmpwi r3, 0
/* 801D9B10 001D5770  41 82 00 14 */	beq lbl_801D9B24
/* 801D9B14 001D5774  7F DE 1A 14 */	add r30, r30, r3
/* 801D9B18 001D5778  7F E3 F8 50 */	subf r31, r3, r31
lbl_801D9B1C:
/* 801D9B1C 001D577C  2C 1F 00 00 */	cmpwi r31, 0
/* 801D9B20 001D5780  41 81 FF E0 */	bgt lbl_801D9B00
lbl_801D9B24:
/* 801D9B24 001D5784  38 60 00 00 */	li r3, 0
lbl_801D9B28:
/* 801D9B28 001D5788  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D9B2C 001D578C  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 801D9B30 001D5790  83 C1 00 08 */	lwz r30, 8(r1)
/* 801D9B34 001D5794  7C 08 03 A6 */	mtlr r0
/* 801D9B38 001D5798  38 21 00 10 */	addi r1, r1, 0x10
/* 801D9B3C 001D579C  4E 80 00 20 */	blr

.global gdev_cc_read
gdev_cc_read:
/* 801D9B40 001D57A0  94 21 FA E0 */	stwu r1, -0x520(r1)
/* 801D9B44 001D57A4  7C 08 02 A6 */	mflr r0
/* 801D9B48 001D57A8  90 01 05 24 */	stw r0, 0x524(r1)
/* 801D9B4C 001D57AC  BF 61 05 0C */	stmw r27, 0x50c(r1)
/* 801D9B50 001D57B0  7C 7B 1B 78 */	mr r27, r3
/* 801D9B54 001D57B4  3B A0 00 00 */	li r29, 0
/* 801D9B58 001D57B8  80 0D 9F E8 */	lwz r0, lbl_8063F2A8-_SDA_BASE_(r13)
/* 801D9B5C 001D57BC  2C 00 00 00 */	cmpwi r0, 0
/* 801D9B60 001D57C0  40 82 00 0C */	bne lbl_801D9B6C
/* 801D9B64 001D57C4  38 60 D8 EF */	li r3, -10001
/* 801D9B68 001D57C8  48 00 00 78 */	b lbl_801D9BE0
lbl_801D9B6C:
/* 801D9B6C 001D57CC  3C 60 80 49 */	lis r3, lbl_80491290@ha
/* 801D9B70 001D57D0  7C 9E 23 78 */	mr r30, r4
/* 801D9B74 001D57D4  3B E3 12 90 */	addi r31, r3, lbl_80491290@l
/* 801D9B78 001D57D8  48 00 00 38 */	b lbl_801D9BB0
lbl_801D9B7C:
/* 801D9B7C 001D57DC  3B A0 00 00 */	li r29, 0
/* 801D9B80 001D57E0  48 00 04 E9 */	bl DBQueryData
/* 801D9B84 001D57E4  7C 7C 1B 79 */	or. r28, r3, r3
/* 801D9B88 001D57E8  41 82 00 28 */	beq lbl_801D9BB0
/* 801D9B8C 001D57EC  7F C4 F3 78 */	mr r4, r30
/* 801D9B90 001D57F0  38 61 00 08 */	addi r3, r1, 8
/* 801D9B94 001D57F4  48 00 05 79 */	bl DBRead
/* 801D9B98 001D57F8  7C 7D 1B 79 */	or. r29, r3, r3
/* 801D9B9C 001D57FC  40 82 00 14 */	bne lbl_801D9BB0
/* 801D9BA0 001D5800  7F E3 FB 78 */	mr r3, r31
/* 801D9BA4 001D5804  7F 85 E3 78 */	mr r5, r28
/* 801D9BA8 001D5808  38 81 00 08 */	addi r4, r1, 8
/* 801D9BAC 001D580C  48 00 02 0D */	bl CircleBufferWriteBytes
lbl_801D9BB0:
/* 801D9BB0 001D5810  7F E3 FB 78 */	mr r3, r31
/* 801D9BB4 001D5814  48 00 03 5D */	bl CBGetBytesAvailableForRead
/* 801D9BB8 001D5818  7C 03 F0 40 */	cmplw r3, r30
/* 801D9BBC 001D581C  41 80 FF C0 */	blt lbl_801D9B7C
/* 801D9BC0 001D5820  28 1D 00 00 */	cmplwi r29, 0
/* 801D9BC4 001D5824  40 82 00 18 */	bne lbl_801D9BDC
/* 801D9BC8 001D5828  3C 60 80 49 */	lis r3, lbl_80491290@ha
/* 801D9BCC 001D582C  7F 64 DB 78 */	mr r4, r27
/* 801D9BD0 001D5830  38 63 12 90 */	addi r3, r3, lbl_80491290@l
/* 801D9BD4 001D5834  7F C5 F3 78 */	mr r5, r30
/* 801D9BD8 001D5838  48 00 00 D9 */	bl CircleBufferReadBytes
lbl_801D9BDC:
/* 801D9BDC 001D583C  7F A3 EB 78 */	mr r3, r29
lbl_801D9BE0:
/* 801D9BE0 001D5840  BB 61 05 0C */	lmw r27, 0x50c(r1)
/* 801D9BE4 001D5844  80 01 05 24 */	lwz r0, 0x524(r1)
/* 801D9BE8 001D5848  7C 08 03 A6 */	mtlr r0
/* 801D9BEC 001D584C  38 21 05 20 */	addi r1, r1, 0x520
/* 801D9BF0 001D5850  4E 80 00 20 */	blr

.global gdev_cc_close
gdev_cc_close:
/* 801D9BF4 001D5854  38 60 00 00 */	li r3, 0
/* 801D9BF8 001D5858  4E 80 00 20 */	blr

.global gdev_cc_open
gdev_cc_open:
/* 801D9BFC 001D585C  80 0D 9F E8 */	lwz r0, lbl_8063F2A8-_SDA_BASE_(r13)
/* 801D9C00 001D5860  2C 00 00 00 */	cmpwi r0, 0
/* 801D9C04 001D5864  41 82 00 0C */	beq lbl_801D9C10
/* 801D9C08 001D5868  38 60 D8 EB */	li r3, -10005
/* 801D9C0C 001D586C  4E 80 00 20 */	blr
lbl_801D9C10:
/* 801D9C10 001D5870  38 00 00 01 */	li r0, 1
/* 801D9C14 001D5874  38 60 00 00 */	li r3, 0
/* 801D9C18 001D5878  90 0D 9F E8 */	stw r0, lbl_8063F2A8-_SDA_BASE_(r13)
/* 801D9C1C 001D587C  4E 80 00 20 */	blr

.global gdev_cc_shutdown
gdev_cc_shutdown:
/* 801D9C20 001D5880  38 60 00 00 */	li r3, 0
/* 801D9C24 001D5884  4E 80 00 20 */	blr

.global gdev_cc_initialize
gdev_cc_initialize:
/* 801D9C28 001D5888  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D9C2C 001D588C  7C 08 02 A6 */	mflr r0
/* 801D9C30 001D5890  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D9C34 001D5894  48 00 03 85 */	bl DBInitComm
/* 801D9C38 001D5898  3C 60 80 49 */	lis r3, lbl_80491290@ha
/* 801D9C3C 001D589C  3C 80 80 49 */	lis r4, lbl_80490D90@ha
/* 801D9C40 001D58A0  38 63 12 90 */	addi r3, r3, lbl_80491290@l
/* 801D9C44 001D58A4  38 A0 05 00 */	li r5, 0x500
/* 801D9C48 001D58A8  38 84 0D 90 */	addi r4, r4, lbl_80490D90@l
/* 801D9C4C 001D58AC  48 00 02 75 */	bl CircleBufferInitialize
/* 801D9C50 001D58B0  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D9C54 001D58B4  38 60 00 00 */	li r3, 0
/* 801D9C58 001D58B8  7C 08 03 A6 */	mtlr r0
/* 801D9C5C 001D58BC  38 21 00 10 */	addi r1, r1, 0x10
/* 801D9C60 001D58C0  4E 80 00 20 */	blr

.global OutputData
OutputData:
/* 801D9C64 001D58C4  2C 04 00 00 */	cmpwi r4, 0
/* 801D9C68 001D58C8  38 A0 00 00 */	li r5, 0
/* 801D9C6C 001D58CC  4C 81 00 20 */	blelr
/* 801D9C70 001D58D0  2C 04 00 08 */	cmpwi r4, 8
/* 801D9C74 001D58D4  38 64 FF F8 */	addi r3, r4, -8
/* 801D9C78 001D58D8  40 81 00 20 */	ble lbl_801D9C98
/* 801D9C7C 001D58DC  38 03 00 07 */	addi r0, r3, 7
/* 801D9C80 001D58E0  54 00 E8 FE */	srwi r0, r0, 3
/* 801D9C84 001D58E4  7C 09 03 A6 */	mtctr r0
/* 801D9C88 001D58E8  2C 03 00 00 */	cmpwi r3, 0
/* 801D9C8C 001D58EC  40 81 00 0C */	ble lbl_801D9C98
lbl_801D9C90:
/* 801D9C90 001D58F0  38 A5 00 08 */	addi r5, r5, 8
/* 801D9C94 001D58F4  42 00 FF FC */	bdnz lbl_801D9C90
lbl_801D9C98:
/* 801D9C98 001D58F8  7C 05 20 50 */	subf r0, r5, r4
/* 801D9C9C 001D58FC  7C 09 03 A6 */	mtctr r0
/* 801D9CA0 001D5900  7C 05 20 00 */	cmpw r5, r4
/* 801D9CA4 001D5904  4C 80 00 20 */	bgelr
lbl_801D9CA8:
/* 801D9CA8 001D5908  42 00 00 00 */	bdnz lbl_801D9CA8
/* 801D9CAC 001D590C  4E 80 00 20 */	blr