summaryrefslogtreecommitdiff
path: root/asm/SDK/EUART/euart.s
blob: 76d486fe4c730207fe70db5081976d472b3320bc (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 EUARTInit
EUARTInit:
/* 802B38B0 002AF510  94 21 FF E0 */	stwu r1, -0x20(r1)
/* 802B38B4 002AF514  7C 08 02 A6 */	mflr r0
/* 802B38B8 002AF518  90 01 00 24 */	stw r0, 0x24(r1)
/* 802B38BC 002AF51C  93 E1 00 1C */	stw r31, 0x1c(r1)
/* 802B38C0 002AF520  80 0D AE 88 */	lwz r0, lbl_80640148-_SDA_BASE_(r13)
/* 802B38C4 002AF524  2C 00 00 00 */	cmpwi r0, 0
/* 802B38C8 002AF528  41 82 00 0C */	beq lbl_802B38D4
/* 802B38CC 002AF52C  38 60 00 01 */	li r3, 1
/* 802B38D0 002AF530  48 00 00 C8 */	b lbl_802B3998
lbl_802B38D4:
/* 802B38D4 002AF534  4B FB 4C 59 */	bl OSGetConsoleType
/* 802B38D8 002AF538  54 60 00 C7 */	rlwinm. r0, r3, 0, 3, 3
/* 802B38DC 002AF53C  40 82 00 14 */	bne lbl_802B38F0
/* 802B38E0 002AF540  38 00 00 02 */	li r0, 2
/* 802B38E4 002AF544  38 60 00 00 */	li r3, 0
/* 802B38E8 002AF548  90 0D AE 8C */	stw r0, lbl_8064014C-_SDA_BASE_(r13)
/* 802B38EC 002AF54C  48 00 00 AC */	b lbl_802B3998
lbl_802B38F0:
/* 802B38F0 002AF550  4B FB AE 6D */	bl OSDisableInterrupts
/* 802B38F4 002AF554  38 00 00 F2 */	li r0, 0xf2
/* 802B38F8 002AF558  7C 7F 1B 78 */	mr r31, r3
/* 802B38FC 002AF55C  98 01 00 08 */	stb r0, 8(r1)
/* 802B3900 002AF560  38 C1 00 08 */	addi r6, r1, 8
/* 802B3904 002AF564  38 60 00 00 */	li r3, 0
/* 802B3908 002AF568  38 80 00 01 */	li r4, 1
/* 802B390C 002AF56C  3C A0 B0 00 */	lis r5, 0xb000
/* 802B3910 002AF570  38 E0 00 01 */	li r7, 1
/* 802B3914 002AF574  4B FC 28 0D */	bl EXIWriteReg
/* 802B3918 002AF578  2C 03 00 00 */	cmpwi r3, 0
/* 802B391C 002AF57C  40 82 00 1C */	bne lbl_802B3938
/* 802B3920 002AF580  38 00 00 05 */	li r0, 5
/* 802B3924 002AF584  7F E3 FB 78 */	mr r3, r31
/* 802B3928 002AF588  90 0D AE 8C */	stw r0, lbl_8064014C-_SDA_BASE_(r13)
/* 802B392C 002AF58C  4B FB AE 59 */	bl OSRestoreInterrupts
/* 802B3930 002AF590  38 60 00 00 */	li r3, 0
/* 802B3934 002AF594  48 00 00 64 */	b lbl_802B3998
lbl_802B3938:
/* 802B3938 002AF598  38 00 00 F3 */	li r0, 0xf3
/* 802B393C 002AF59C  38 C1 00 08 */	addi r6, r1, 8
/* 802B3940 002AF5A0  98 01 00 08 */	stb r0, 8(r1)
/* 802B3944 002AF5A4  38 60 00 00 */	li r3, 0
/* 802B3948 002AF5A8  38 80 00 01 */	li r4, 1
/* 802B394C 002AF5AC  3C A0 B0 00 */	lis r5, 0xb000
/* 802B3950 002AF5B0  38 E0 00 01 */	li r7, 1
/* 802B3954 002AF5B4  4B FC 27 CD */	bl EXIWriteReg
/* 802B3958 002AF5B8  2C 03 00 00 */	cmpwi r3, 0
/* 802B395C 002AF5BC  40 82 00 1C */	bne lbl_802B3978
/* 802B3960 002AF5C0  38 00 00 05 */	li r0, 5
/* 802B3964 002AF5C4  7F E3 FB 78 */	mr r3, r31
/* 802B3968 002AF5C8  90 0D AE 8C */	stw r0, lbl_8064014C-_SDA_BASE_(r13)
/* 802B396C 002AF5CC  4B FB AE 19 */	bl OSRestoreInterrupts
/* 802B3970 002AF5D0  38 60 00 00 */	li r3, 0
/* 802B3974 002AF5D4  48 00 00 24 */	b lbl_802B3998
lbl_802B3978:
/* 802B3978 002AF5D8  7F E3 FB 78 */	mr r3, r31
/* 802B397C 002AF5DC  4B FB AE 09 */	bl OSRestoreInterrupts
/* 802B3980 002AF5E0  38 00 00 00 */	li r0, 0
/* 802B3984 002AF5E4  38 60 00 01 */	li r3, 1
/* 802B3988 002AF5E8  90 6D AE 88 */	stw r3, lbl_80640148-_SDA_BASE_(r13)
/* 802B398C 002AF5EC  38 60 00 01 */	li r3, 1
/* 802B3990 002AF5F0  90 0D AE 8C */	stw r0, lbl_8064014C-_SDA_BASE_(r13)
/* 802B3994 002AF5F4  90 0D AE 90 */	stw r0, lbl_80640150-_SDA_BASE_(r13)
lbl_802B3998:
/* 802B3998 002AF5F8  80 01 00 24 */	lwz r0, 0x24(r1)
/* 802B399C 002AF5FC  83 E1 00 1C */	lwz r31, 0x1c(r1)
/* 802B39A0 002AF600  7C 08 03 A6 */	mtlr r0
/* 802B39A4 002AF604  38 21 00 20 */	addi r1, r1, 0x20
/* 802B39A8 002AF608  4E 80 00 20 */	blr

.global InitializeUART
InitializeUART:
/* 802B39AC 002AF60C  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 802B39B0 002AF610  7C 08 02 A6 */	mflr r0
/* 802B39B4 002AF614  90 01 00 14 */	stw r0, 0x14(r1)
/* 802B39B8 002AF618  4B FB 4B 75 */	bl OSGetConsoleType
/* 802B39BC 002AF61C  54 60 00 C7 */	rlwinm. r0, r3, 0, 3, 3
/* 802B39C0 002AF620  40 82 00 14 */	bne lbl_802B39D4
/* 802B39C4 002AF624  38 00 00 00 */	li r0, 0
/* 802B39C8 002AF628  38 60 00 02 */	li r3, 2
/* 802B39CC 002AF62C  90 0D AE 94 */	stw r0, lbl_80640154-_SDA_BASE_(r13)
/* 802B39D0 002AF630  48 00 00 14 */	b lbl_802B39E4
lbl_802B39D4:
/* 802B39D4 002AF634  3C 80 A5 FF */	lis r4, 0xA5FF005A@ha
/* 802B39D8 002AF638  38 60 00 00 */	li r3, 0
/* 802B39DC 002AF63C  38 04 00 5A */	addi r0, r4, 0xA5FF005A@l
/* 802B39E0 002AF640  90 0D AE 94 */	stw r0, lbl_80640154-_SDA_BASE_(r13)
lbl_802B39E4:
/* 802B39E4 002AF644  80 01 00 14 */	lwz r0, 0x14(r1)
/* 802B39E8 002AF648  7C 08 03 A6 */	mtlr r0
/* 802B39EC 002AF64C  38 21 00 10 */	addi r1, r1, 0x10
/* 802B39F0 002AF650  4E 80 00 20 */	blr

.global WriteUARTN
WriteUARTN:
/* 802B39F4 002AF654  94 21 FF D0 */	stwu r1, -0x30(r1)
/* 802B39F8 002AF658  7C 08 02 A6 */	mflr r0
/* 802B39FC 002AF65C  90 01 00 34 */	stw r0, 0x34(r1)
/* 802B3A00 002AF660  39 61 00 30 */	addi r11, r1, 0x30
/* 802B3A04 002AF664  4B F1 37 21 */	bl _savegpr_26
/* 802B3A08 002AF668  80 AD AE 94 */	lwz r5, lbl_80640154-_SDA_BASE_(r13)
/* 802B3A0C 002AF66C  7C 7E 1B 78 */	mr r30, r3
/* 802B3A10 002AF670  7C 9F 23 78 */	mr r31, r4
/* 802B3A14 002AF674  3C 05 5A 01 */	addis r0, r5, 0x5a01
/* 802B3A18 002AF678  28 00 00 5A */	cmplwi r0, 0x5a
/* 802B3A1C 002AF67C  41 82 00 0C */	beq lbl_802B3A28
/* 802B3A20 002AF680  38 60 00 02 */	li r3, 2
/* 802B3A24 002AF684  48 00 01 E4 */	b lbl_802B3C08
lbl_802B3A28:
/* 802B3A28 002AF688  80 0D AE 88 */	lwz r0, lbl_80640148-_SDA_BASE_(r13)
/* 802B3A2C 002AF68C  2C 00 00 00 */	cmpwi r0, 0
/* 802B3A30 002AF690  40 82 00 18 */	bne lbl_802B3A48
/* 802B3A34 002AF694  4B FF FE 7D */	bl EUARTInit
/* 802B3A38 002AF698  2C 03 00 00 */	cmpwi r3, 0
/* 802B3A3C 002AF69C  40 82 00 0C */	bne lbl_802B3A48
/* 802B3A40 002AF6A0  38 60 00 02 */	li r3, 2
/* 802B3A44 002AF6A4  48 00 01 C4 */	b lbl_802B3C08
lbl_802B3A48:
/* 802B3A48 002AF6A8  80 0D AE 88 */	lwz r0, lbl_80640148-_SDA_BASE_(r13)
/* 802B3A4C 002AF6AC  2C 00 00 00 */	cmpwi r0, 0
/* 802B3A50 002AF6B0  40 82 00 14 */	bne lbl_802B3A64
/* 802B3A54 002AF6B4  38 00 00 01 */	li r0, 1
/* 802B3A58 002AF6B8  38 60 00 02 */	li r3, 2
/* 802B3A5C 002AF6BC  90 0D AE 8C */	stw r0, lbl_8064014C-_SDA_BASE_(r13)
/* 802B3A60 002AF6C0  48 00 01 A8 */	b lbl_802B3C08
lbl_802B3A64:
/* 802B3A64 002AF6C4  38 60 00 00 */	li r3, 0
/* 802B3A68 002AF6C8  38 80 00 01 */	li r4, 1
/* 802B3A6C 002AF6CC  38 A0 00 00 */	li r5, 0
/* 802B3A70 002AF6D0  4B FC 1D D5 */	bl EXILock
/* 802B3A74 002AF6D4  2C 03 00 00 */	cmpwi r3, 0
/* 802B3A78 002AF6D8  40 82 00 0C */	bne lbl_802B3A84
/* 802B3A7C 002AF6DC  38 60 00 00 */	li r3, 0
/* 802B3A80 002AF6E0  48 00 01 88 */	b lbl_802B3C08
lbl_802B3A84:
/* 802B3A84 002AF6E4  7F C4 F3 78 */	mr r4, r30
/* 802B3A88 002AF6E8  38 60 00 0D */	li r3, 0xd
/* 802B3A8C 002AF6EC  48 00 00 18 */	b lbl_802B3AA4
lbl_802B3A90:
/* 802B3A90 002AF6F0  88 04 00 00 */	lbz r0, 0(r4)
/* 802B3A94 002AF6F4  2C 00 00 0A */	cmpwi r0, 0xa
/* 802B3A98 002AF6F8  40 82 00 08 */	bne lbl_802B3AA0
/* 802B3A9C 002AF6FC  98 64 00 00 */	stb r3, 0(r4)
lbl_802B3AA0:
/* 802B3AA0 002AF700  38 84 00 01 */	addi r4, r4, 1
lbl_802B3AA4:
/* 802B3AA4 002AF704  7C 1E 20 50 */	subf r0, r30, r4
/* 802B3AA8 002AF708  7C 00 F8 40 */	cmplw r0, r31
/* 802B3AAC 002AF70C  41 80 FF E4 */	blt lbl_802B3A90
/* 802B3AB0 002AF710  3C 60 B0 00 */	lis r3, 0xB0000100@ha
/* 802B3AB4 002AF714  83 82 A0 68 */	lwz r28, lbl_80642668-_SDA2_BASE_(r2)
/* 802B3AB8 002AF718  38 03 01 00 */	addi r0, r3, 0xB0000100@l
/* 802B3ABC 002AF71C  3B 40 00 00 */	li r26, 0
/* 802B3AC0 002AF720  90 01 00 14 */	stw r0, 0x14(r1)
/* 802B3AC4 002AF724  3F A0 30 00 */	lis r29, 0x3000
/* 802B3AC8 002AF728  48 00 01 2C */	b lbl_802B3BF4
lbl_802B3ACC:
/* 802B3ACC 002AF72C  7F 85 E3 78 */	mr r5, r28
/* 802B3AD0 002AF730  38 60 00 00 */	li r3, 0
/* 802B3AD4 002AF734  38 80 00 01 */	li r4, 1
/* 802B3AD8 002AF738  4B FC 15 D9 */	bl EXISelect
/* 802B3ADC 002AF73C  2C 03 00 00 */	cmpwi r3, 0
/* 802B3AE0 002AF740  40 82 00 0C */	bne lbl_802B3AEC
/* 802B3AE4 002AF744  3B 60 FF FF */	li r27, -1
/* 802B3AE8 002AF748  48 00 00 60 */	b lbl_802B3B48
lbl_802B3AEC:
/* 802B3AEC 002AF74C  38 1D 01 00 */	addi r0, r29, 0x100
/* 802B3AF0 002AF750  38 81 00 08 */	addi r4, r1, 8
/* 802B3AF4 002AF754  90 01 00 08 */	stw r0, 8(r1)
/* 802B3AF8 002AF758  38 60 00 00 */	li r3, 0
/* 802B3AFC 002AF75C  38 A0 00 04 */	li r5, 4
/* 802B3B00 002AF760  38 C0 00 01 */	li r6, 1
/* 802B3B04 002AF764  38 E0 00 00 */	li r7, 0
/* 802B3B08 002AF768  4B FC 0B 41 */	bl EXIImm
/* 802B3B0C 002AF76C  38 60 00 00 */	li r3, 0
/* 802B3B10 002AF770  4B FC 0F 51 */	bl EXISync
/* 802B3B14 002AF774  38 81 00 0C */	addi r4, r1, 0xc
/* 802B3B18 002AF778  38 60 00 00 */	li r3, 0
/* 802B3B1C 002AF77C  38 A0 00 04 */	li r5, 4
/* 802B3B20 002AF780  38 C0 00 00 */	li r6, 0
/* 802B3B24 002AF784  38 E0 00 00 */	li r7, 0
/* 802B3B28 002AF788  4B FC 0B 21 */	bl EXIImm
/* 802B3B2C 002AF78C  38 60 00 00 */	li r3, 0
/* 802B3B30 002AF790  4B FC 0F 31 */	bl EXISync
/* 802B3B34 002AF794  38 60 00 00 */	li r3, 0
/* 802B3B38 002AF798  4B FC 16 A9 */	bl EXIDeselect
/* 802B3B3C 002AF79C  80 01 00 0C */	lwz r0, 0xc(r1)
/* 802B3B40 002AF7A0  54 00 46 BE */	rlwinm r0, r0, 8, 0x1a, 0x1f
/* 802B3B44 002AF7A4  23 60 00 20 */	subfic r27, r0, 0x20
lbl_802B3B48:
/* 802B3B48 002AF7A8  2C 1B 00 00 */	cmpwi r27, 0
/* 802B3B4C 002AF7AC  40 80 00 0C */	bge lbl_802B3B58
/* 802B3B50 002AF7B0  3B 40 00 03 */	li r26, 3
/* 802B3B54 002AF7B4  48 00 00 A8 */	b lbl_802B3BFC
lbl_802B3B58:
/* 802B3B58 002AF7B8  2C 1B 00 20 */	cmpwi r27, 0x20
/* 802B3B5C 002AF7BC  40 82 00 98 */	bne lbl_802B3BF4
/* 802B3B60 002AF7C0  7F 85 E3 78 */	mr r5, r28
/* 802B3B64 002AF7C4  38 60 00 00 */	li r3, 0
/* 802B3B68 002AF7C8  38 80 00 01 */	li r4, 1
/* 802B3B6C 002AF7CC  4B FC 15 45 */	bl EXISelect
/* 802B3B70 002AF7D0  2C 03 00 00 */	cmpwi r3, 0
/* 802B3B74 002AF7D4  40 82 00 0C */	bne lbl_802B3B80
/* 802B3B78 002AF7D8  3B 40 00 03 */	li r26, 3
/* 802B3B7C 002AF7DC  48 00 00 80 */	b lbl_802B3BFC
lbl_802B3B80:
/* 802B3B80 002AF7E0  38 81 00 14 */	addi r4, r1, 0x14
/* 802B3B84 002AF7E4  38 60 00 00 */	li r3, 0
/* 802B3B88 002AF7E8  38 A0 00 04 */	li r5, 4
/* 802B3B8C 002AF7EC  38 C0 00 01 */	li r6, 1
/* 802B3B90 002AF7F0  38 E0 00 00 */	li r7, 0
/* 802B3B94 002AF7F4  4B FC 0A B5 */	bl EXIImm
/* 802B3B98 002AF7F8  38 60 00 00 */	li r3, 0
/* 802B3B9C 002AF7FC  4B FC 0E C5 */	bl EXISync
/* 802B3BA0 002AF800  48 00 00 3C */	b lbl_802B3BDC
lbl_802B3BA4:
/* 802B3BA4 002AF804  88 1E 00 00 */	lbz r0, 0(r30)
/* 802B3BA8 002AF808  38 81 00 10 */	addi r4, r1, 0x10
/* 802B3BAC 002AF80C  38 60 00 00 */	li r3, 0
/* 802B3BB0 002AF810  38 A0 00 04 */	li r5, 4
/* 802B3BB4 002AF814  54 00 C0 0E */	slwi r0, r0, 0x18
/* 802B3BB8 002AF818  38 C0 00 01 */	li r6, 1
/* 802B3BBC 002AF81C  90 01 00 10 */	stw r0, 0x10(r1)
/* 802B3BC0 002AF820  38 E0 00 00 */	li r7, 0
/* 802B3BC4 002AF824  4B FC 0A 85 */	bl EXIImm
/* 802B3BC8 002AF828  38 60 00 00 */	li r3, 0
/* 802B3BCC 002AF82C  4B FC 0E 95 */	bl EXISync
/* 802B3BD0 002AF830  3B DE 00 01 */	addi r30, r30, 1
/* 802B3BD4 002AF834  3B 7B FF FF */	addi r27, r27, -1
/* 802B3BD8 002AF838  3B FF FF FF */	addi r31, r31, -1
lbl_802B3BDC:
/* 802B3BDC 002AF83C  2C 1B 00 00 */	cmpwi r27, 0
/* 802B3BE0 002AF840  40 81 00 0C */	ble lbl_802B3BEC
/* 802B3BE4 002AF844  2C 1F 00 00 */	cmpwi r31, 0
/* 802B3BE8 002AF848  40 82 FF BC */	bne lbl_802B3BA4
lbl_802B3BEC:
/* 802B3BEC 002AF84C  38 60 00 00 */	li r3, 0
/* 802B3BF0 002AF850  4B FC 15 F1 */	bl EXIDeselect
lbl_802B3BF4:
/* 802B3BF4 002AF854  2C 1F 00 00 */	cmpwi r31, 0
/* 802B3BF8 002AF858  40 82 FE D4 */	bne lbl_802B3ACC
lbl_802B3BFC:
/* 802B3BFC 002AF85C  38 60 00 00 */	li r3, 0
/* 802B3C00 002AF860  4B FC 1D 41 */	bl EXIUnlock
/* 802B3C04 002AF864  7F 43 D3 78 */	mr r3, r26
lbl_802B3C08:
/* 802B3C08 002AF868  39 61 00 30 */	addi r11, r1, 0x30
/* 802B3C0C 002AF86C  4B F1 35 65 */	bl _restgpr_26
/* 802B3C10 002AF870  80 01 00 34 */	lwz r0, 0x34(r1)
/* 802B3C14 002AF874  7C 08 03 A6 */	mtlr r0
/* 802B3C18 002AF878  38 21 00 30 */	addi r1, r1, 0x30
/* 802B3C1C 002AF87C  4E 80 00 20 */	blr