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

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

.global CircleBufferReadBytes
CircleBufferReadBytes:
/* 801D9CB0 001D5910  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801D9CB4 001D5914  7C 08 02 A6 */	mflr r0
/* 801D9CB8 001D5918  90 01 00 24 */	stw r0, 0x24(r1)
/* 801D9CBC 001D591C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 801D9CC0 001D5920  7C BF 2B 78 */	mr r31, r5
/* 801D9CC4 001D5924  93 C1 00 18 */	stw r30, 0x18(r1)
/* 801D9CC8 001D5928  7C 7E 1B 78 */	mr r30, r3
/* 801D9CCC 001D592C  93 A1 00 14 */	stw r29, 0x14(r1)
/* 801D9CD0 001D5930  93 81 00 10 */	stw r28, 0x10(r1)
/* 801D9CD4 001D5934  7C 9C 23 78 */	mr r28, r4
/* 801D9CD8 001D5938  80 03 00 10 */	lwz r0, 0x10(r3)
/* 801D9CDC 001D593C  7C 1F 00 40 */	cmplw r31, r0
/* 801D9CE0 001D5940  40 81 00 0C */	ble lbl_801D9CEC
/* 801D9CE4 001D5944  38 60 FF FF */	li r3, -1
/* 801D9CE8 001D5948  48 00 00 B0 */	b lbl_801D9D98
lbl_801D9CEC:
/* 801D9CEC 001D594C  38 7E 00 18 */	addi r3, r30, 0x18
/* 801D9CF0 001D5950  48 00 02 4D */	bl MWEnterCriticalSection
/* 801D9CF4 001D5954  80 7E 00 08 */	lwz r3, 8(r30)
/* 801D9CF8 001D5958  80 9E 00 00 */	lwz r4, 0(r30)
/* 801D9CFC 001D595C  80 1E 00 0C */	lwz r0, 0xc(r30)
/* 801D9D00 001D5960  7C 63 20 50 */	subf r3, r3, r4
/* 801D9D04 001D5964  7F A3 00 50 */	subf r29, r3, r0
/* 801D9D08 001D5968  7C 1F E8 40 */	cmplw r31, r29
/* 801D9D0C 001D596C  40 80 00 20 */	bge lbl_801D9D2C
/* 801D9D10 001D5970  7F 83 E3 78 */	mr r3, r28
/* 801D9D14 001D5974  7F E5 FB 78 */	mr r5, r31
/* 801D9D18 001D5978  4B E2 A2 E9 */	bl memcpy
/* 801D9D1C 001D597C  80 1E 00 00 */	lwz r0, 0(r30)
/* 801D9D20 001D5980  7C 00 FA 14 */	add r0, r0, r31
/* 801D9D24 001D5984  90 1E 00 00 */	stw r0, 0(r30)
/* 801D9D28 001D5988  48 00 00 30 */	b lbl_801D9D58
lbl_801D9D2C:
/* 801D9D2C 001D598C  7F 83 E3 78 */	mr r3, r28
/* 801D9D30 001D5990  7F A5 EB 78 */	mr r5, r29
/* 801D9D34 001D5994  4B E2 A2 CD */	bl memcpy
/* 801D9D38 001D5998  80 9E 00 08 */	lwz r4, 8(r30)
/* 801D9D3C 001D599C  7C 7C EA 14 */	add r3, r28, r29
/* 801D9D40 001D59A0  7C BD F8 50 */	subf r5, r29, r31
/* 801D9D44 001D59A4  4B E2 A2 BD */	bl memcpy
/* 801D9D48 001D59A8  80 1E 00 08 */	lwz r0, 8(r30)
/* 801D9D4C 001D59AC  7C 00 FA 14 */	add r0, r0, r31
/* 801D9D50 001D59B0  7C 1D 00 50 */	subf r0, r29, r0
/* 801D9D54 001D59B4  90 1E 00 00 */	stw r0, 0(r30)
lbl_801D9D58:
/* 801D9D58 001D59B8  80 9E 00 08 */	lwz r4, 8(r30)
/* 801D9D5C 001D59BC  80 1E 00 00 */	lwz r0, 0(r30)
/* 801D9D60 001D59C0  80 7E 00 0C */	lwz r3, 0xc(r30)
/* 801D9D64 001D59C4  7C 04 00 50 */	subf r0, r4, r0
/* 801D9D68 001D59C8  7C 03 00 40 */	cmplw r3, r0
/* 801D9D6C 001D59CC  40 82 00 08 */	bne lbl_801D9D74
/* 801D9D70 001D59D0  90 9E 00 00 */	stw r4, 0(r30)
lbl_801D9D74:
/* 801D9D74 001D59D4  80 1E 00 14 */	lwz r0, 0x14(r30)
/* 801D9D78 001D59D8  38 7E 00 18 */	addi r3, r30, 0x18
/* 801D9D7C 001D59DC  7C 00 FA 14 */	add r0, r0, r31
/* 801D9D80 001D59E0  90 1E 00 14 */	stw r0, 0x14(r30)
/* 801D9D84 001D59E4  80 1E 00 10 */	lwz r0, 0x10(r30)
/* 801D9D88 001D59E8  7C 1F 00 50 */	subf r0, r31, r0
/* 801D9D8C 001D59EC  90 1E 00 10 */	stw r0, 0x10(r30)
/* 801D9D90 001D59F0  48 00 01 89 */	bl MWExitCriticalSection
/* 801D9D94 001D59F4  38 60 00 00 */	li r3, 0
lbl_801D9D98:
/* 801D9D98 001D59F8  80 01 00 24 */	lwz r0, 0x24(r1)
/* 801D9D9C 001D59FC  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 801D9DA0 001D5A00  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 801D9DA4 001D5A04  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 801D9DA8 001D5A08  83 81 00 10 */	lwz r28, 0x10(r1)
/* 801D9DAC 001D5A0C  7C 08 03 A6 */	mtlr r0
/* 801D9DB0 001D5A10  38 21 00 20 */	addi r1, r1, 0x20
/* 801D9DB4 001D5A14  4E 80 00 20 */	blr

.global CircleBufferWriteBytes
CircleBufferWriteBytes:
/* 801D9DB8 001D5A18  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 801D9DBC 001D5A1C  7C 08 02 A6 */	mflr r0
/* 801D9DC0 001D5A20  90 01 00 24 */	stw r0, 0x24(r1)
/* 801D9DC4 001D5A24  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 801D9DC8 001D5A28  7C BF 2B 78 */	mr r31, r5
/* 801D9DCC 001D5A2C  93 C1 00 18 */	stw r30, 0x18(r1)
/* 801D9DD0 001D5A30  7C 7E 1B 78 */	mr r30, r3
/* 801D9DD4 001D5A34  93 A1 00 14 */	stw r29, 0x14(r1)
/* 801D9DD8 001D5A38  93 81 00 10 */	stw r28, 0x10(r1)
/* 801D9DDC 001D5A3C  7C 9C 23 78 */	mr r28, r4
/* 801D9DE0 001D5A40  80 03 00 14 */	lwz r0, 0x14(r3)
/* 801D9DE4 001D5A44  7C 1F 00 40 */	cmplw r31, r0
/* 801D9DE8 001D5A48  40 81 00 0C */	ble lbl_801D9DF4
/* 801D9DEC 001D5A4C  38 60 FF FF */	li r3, -1
/* 801D9DF0 001D5A50  48 00 00 B0 */	b lbl_801D9EA0
lbl_801D9DF4:
/* 801D9DF4 001D5A54  38 7E 00 18 */	addi r3, r30, 0x18
/* 801D9DF8 001D5A58  48 00 01 45 */	bl MWEnterCriticalSection
/* 801D9DFC 001D5A5C  80 9E 00 08 */	lwz r4, 8(r30)
/* 801D9E00 001D5A60  80 7E 00 04 */	lwz r3, 4(r30)
/* 801D9E04 001D5A64  80 1E 00 0C */	lwz r0, 0xc(r30)
/* 801D9E08 001D5A68  7C 84 18 50 */	subf r4, r4, r3
/* 801D9E0C 001D5A6C  7F A4 00 50 */	subf r29, r4, r0
/* 801D9E10 001D5A70  7C 1D F8 40 */	cmplw r29, r31
/* 801D9E14 001D5A74  41 80 00 20 */	blt lbl_801D9E34
/* 801D9E18 001D5A78  7F 84 E3 78 */	mr r4, r28
/* 801D9E1C 001D5A7C  7F E5 FB 78 */	mr r5, r31
/* 801D9E20 001D5A80  4B E2 A1 E1 */	bl memcpy
/* 801D9E24 001D5A84  80 1E 00 04 */	lwz r0, 4(r30)
/* 801D9E28 001D5A88  7C 00 FA 14 */	add r0, r0, r31
/* 801D9E2C 001D5A8C  90 1E 00 04 */	stw r0, 4(r30)
/* 801D9E30 001D5A90  48 00 00 30 */	b lbl_801D9E60
lbl_801D9E34:
/* 801D9E34 001D5A94  7F 84 E3 78 */	mr r4, r28
/* 801D9E38 001D5A98  7F A5 EB 78 */	mr r5, r29
/* 801D9E3C 001D5A9C  4B E2 A1 C5 */	bl memcpy
/* 801D9E40 001D5AA0  80 7E 00 08 */	lwz r3, 8(r30)
/* 801D9E44 001D5AA4  7C 9C EA 14 */	add r4, r28, r29
/* 801D9E48 001D5AA8  7C BD F8 50 */	subf r5, r29, r31
/* 801D9E4C 001D5AAC  4B E2 A1 B5 */	bl memcpy
/* 801D9E50 001D5AB0  80 1E 00 08 */	lwz r0, 8(r30)
/* 801D9E54 001D5AB4  7C 00 FA 14 */	add r0, r0, r31
/* 801D9E58 001D5AB8  7C 1D 00 50 */	subf r0, r29, r0
/* 801D9E5C 001D5ABC  90 1E 00 04 */	stw r0, 4(r30)
lbl_801D9E60:
/* 801D9E60 001D5AC0  80 9E 00 08 */	lwz r4, 8(r30)
/* 801D9E64 001D5AC4  80 1E 00 04 */	lwz r0, 4(r30)
/* 801D9E68 001D5AC8  80 7E 00 0C */	lwz r3, 0xc(r30)
/* 801D9E6C 001D5ACC  7C 04 00 50 */	subf r0, r4, r0
/* 801D9E70 001D5AD0  7C 03 00 40 */	cmplw r3, r0
/* 801D9E74 001D5AD4  40 82 00 08 */	bne lbl_801D9E7C
/* 801D9E78 001D5AD8  90 9E 00 04 */	stw r4, 4(r30)
lbl_801D9E7C:
/* 801D9E7C 001D5ADC  80 1E 00 14 */	lwz r0, 0x14(r30)
/* 801D9E80 001D5AE0  38 7E 00 18 */	addi r3, r30, 0x18
/* 801D9E84 001D5AE4  7C 1F 00 50 */	subf r0, r31, r0
/* 801D9E88 001D5AE8  90 1E 00 14 */	stw r0, 0x14(r30)
/* 801D9E8C 001D5AEC  80 1E 00 10 */	lwz r0, 0x10(r30)
/* 801D9E90 001D5AF0  7C 00 FA 14 */	add r0, r0, r31
/* 801D9E94 001D5AF4  90 1E 00 10 */	stw r0, 0x10(r30)
/* 801D9E98 001D5AF8  48 00 00 81 */	bl MWExitCriticalSection
/* 801D9E9C 001D5AFC  38 60 00 00 */	li r3, 0
lbl_801D9EA0:
/* 801D9EA0 001D5B00  80 01 00 24 */	lwz r0, 0x24(r1)
/* 801D9EA4 001D5B04  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 801D9EA8 001D5B08  83 C1 00 18 */	lwz r30, 0x18(r1)
/* 801D9EAC 001D5B0C  83 A1 00 14 */	lwz r29, 0x14(r1)
/* 801D9EB0 001D5B10  83 81 00 10 */	lwz r28, 0x10(r1)
/* 801D9EB4 001D5B14  7C 08 03 A6 */	mtlr r0
/* 801D9EB8 001D5B18  38 21 00 20 */	addi r1, r1, 0x20
/* 801D9EBC 001D5B1C  4E 80 00 20 */	blr

.global CircleBufferInitialize
CircleBufferInitialize:
/* 801D9EC0 001D5B20  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 801D9EC4 001D5B24  7C 08 02 A6 */	mflr r0
/* 801D9EC8 001D5B28  7C 66 1B 78 */	mr r6, r3
/* 801D9ECC 001D5B2C  90 01 00 14 */	stw r0, 0x14(r1)
/* 801D9ED0 001D5B30  38 00 00 00 */	li r0, 0
/* 801D9ED4 001D5B34  90 83 00 08 */	stw r4, 8(r3)
/* 801D9ED8 001D5B38  38 66 00 18 */	addi r3, r6, 0x18
/* 801D9EDC 001D5B3C  90 A6 00 0C */	stw r5, 0xc(r6)
/* 801D9EE0 001D5B40  80 86 00 08 */	lwz r4, 8(r6)
/* 801D9EE4 001D5B44  90 86 00 00 */	stw r4, 0(r6)
/* 801D9EE8 001D5B48  80 86 00 08 */	lwz r4, 8(r6)
/* 801D9EEC 001D5B4C  90 86 00 04 */	stw r4, 4(r6)
/* 801D9EF0 001D5B50  90 06 00 10 */	stw r0, 0x10(r6)
/* 801D9EF4 001D5B54  80 06 00 0C */	lwz r0, 0xc(r6)
/* 801D9EF8 001D5B58  90 06 00 14 */	stw r0, 0x14(r6)
/* 801D9EFC 001D5B5C  48 00 00 71 */	bl MWInitializeCriticalSection
/* 801D9F00 001D5B60  80 01 00 14 */	lwz r0, 0x14(r1)
/* 801D9F04 001D5B64  7C 08 03 A6 */	mtlr r0
/* 801D9F08 001D5B68  38 21 00 10 */	addi r1, r1, 0x10
/* 801D9F0C 001D5B6C  4E 80 00 20 */	blr

.global CBGetBytesAvailableForRead
CBGetBytesAvailableForRead:
/* 801D9F10 001D5B70  80 63 00 10 */	lwz r3, 0x10(r3)
/* 801D9F14 001D5B74  4E 80 00 20 */	blr