summaryrefslogtreecommitdiff
path: root/asm/SDK/DSP/dsp.s
blob: 29e1dca7b56bf5fa1c35a6e21f06ff4d3b7cac45 (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
.include "macros.inc"

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

.global DSPCheckMailToDSP
DSPCheckMailToDSP:
/* 8029ADF8 00296A58  3C 60 CC 00 */	lis r3, 0xCC005000@ha
/* 8029ADFC 00296A5C  A0 03 50 00 */	lhz r0, 0xCC005000@l(r3)
/* 8029AE00 00296A60  54 03 8F FE */	rlwinm r3, r0, 0x11, 0x1f, 0x1f
/* 8029AE04 00296A64  4E 80 00 20 */	blr

.global DSPCheckMailFromDSP
DSPCheckMailFromDSP:
/* 8029AE08 00296A68  3C 60 CC 00 */	lis r3, 0xCC005004@ha
/* 8029AE0C 00296A6C  A0 03 50 04 */	lhz r0, 0xCC005004@l(r3)
/* 8029AE10 00296A70  54 03 8F FE */	rlwinm r3, r0, 0x11, 0x1f, 0x1f
/* 8029AE14 00296A74  4E 80 00 20 */	blr

.global DSPReadMailFromDSP
DSPReadMailFromDSP:
/* 8029AE18 00296A78  3C 60 CC 00 */	lis r3, 0xCC005004@ha
/* 8029AE1C 00296A7C  A0 03 50 04 */	lhz r0, 0xCC005004@l(r3)
/* 8029AE20 00296A80  A0 63 50 06 */	lhz r3, 0x5006(r3)
/* 8029AE24 00296A84  50 03 80 1E */	rlwimi r3, r0, 0x10, 0, 0xf
/* 8029AE28 00296A88  4E 80 00 20 */	blr

.global DSPSendMailToDSP
DSPSendMailToDSP:
/* 8029AE2C 00296A8C  3C 80 CC 00 */	lis r4, 0xCC005000@ha
/* 8029AE30 00296A90  54 60 84 3E */	srwi r0, r3, 0x10
/* 8029AE34 00296A94  B0 04 50 00 */	sth r0, 0xCC005000@l(r4)
/* 8029AE38 00296A98  B0 64 50 02 */	sth r3, 0x5002(r4)
/* 8029AE3C 00296A9C  4E 80 00 20 */	blr

.global DSPInit
DSPInit:
/* 8029AE40 00296AA0  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8029AE44 00296AA4  7C 08 02 A6 */	mflr r0
/* 8029AE48 00296AA8  3C A0 80 44 */	lis r5, lbl_8043BD00@ha
/* 8029AE4C 00296AAC  90 01 00 14 */	stw r0, 0x14(r1)
/* 8029AE50 00296AB0  38 A5 BD 00 */	addi r5, r5, lbl_8043BD00@l
/* 8029AE54 00296AB4  38 65 00 48 */	addi r3, r5, 0x48
/* 8029AE58 00296AB8  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8029AE5C 00296ABC  38 85 00 68 */	addi r4, r5, 0x68
/* 8029AE60 00296AC0  38 A5 00 74 */	addi r5, r5, 0x74
/* 8029AE64 00296AC4  4C C6 31 82 */	crclr 6
/* 8029AE68 00296AC8  48 00 01 CD */	bl __DSP_debug_printf
/* 8029AE6C 00296ACC  80 0D AC 68 */	lwz r0, lbl_8063FF28-_SDA_BASE_(r13)
/* 8029AE70 00296AD0  2C 00 00 01 */	cmpwi r0, 1
/* 8029AE74 00296AD4  41 82 00 78 */	beq lbl_8029AEEC
/* 8029AE78 00296AD8  80 6D 89 00 */	lwz r3, lbl_8063DBC0-_SDA_BASE_(r13)
/* 8029AE7C 00296ADC  4B FC E7 D5 */	bl OSRegisterVersion
/* 8029AE80 00296AE0  4B FD 38 DD */	bl OSDisableInterrupts
/* 8029AE84 00296AE4  3C 80 80 2A */	lis r4, __DSPHandler@ha
/* 8029AE88 00296AE8  7C 7F 1B 78 */	mr r31, r3
/* 8029AE8C 00296AEC  38 84 B0 84 */	addi r4, r4, __DSPHandler@l
/* 8029AE90 00296AF0  38 60 00 07 */	li r3, 7
/* 8029AE94 00296AF4  4B FD 39 15 */	bl __OSSetInterruptHandler
/* 8029AE98 00296AF8  3C 60 01 00 */	lis r3, 0x100
/* 8029AE9C 00296AFC  4B FD 3C D1 */	bl __OSUnmaskInterrupts
/* 8029AEA0 00296B00  3C E0 CC 00 */	lis r7, 0xCC00500A@ha
/* 8029AEA4 00296B04  38 60 FF 57 */	li r3, -169
/* 8029AEA8 00296B08  A0 C7 50 0A */	lhz r6, 0xCC00500A@l(r7)
/* 8029AEAC 00296B0C  38 A0 FF 53 */	li r5, -173
/* 8029AEB0 00296B10  38 80 00 00 */	li r4, 0
/* 8029AEB4 00296B14  38 00 00 01 */	li r0, 1
/* 8029AEB8 00296B18  7C C3 18 38 */	and r3, r6, r3
/* 8029AEBC 00296B1C  60 63 08 00 */	ori r3, r3, 0x800
/* 8029AEC0 00296B20  B0 67 50 0A */	sth r3, 0x500a(r7)
/* 8029AEC4 00296B24  7F E3 FB 78 */	mr r3, r31
/* 8029AEC8 00296B28  A0 C7 50 0A */	lhz r6, 0x500a(r7)
/* 8029AECC 00296B2C  7C C5 28 38 */	and r5, r6, r5
/* 8029AED0 00296B30  B0 A7 50 0A */	sth r5, 0x500a(r7)
/* 8029AED4 00296B34  90 8D AC 78 */	stw r4, lbl_8063FF38-_SDA_BASE_(r13)
/* 8029AED8 00296B38  90 8D AC 84 */	stw r4, lbl_8063FF44-_SDA_BASE_(r13)
/* 8029AEDC 00296B3C  90 8D AC 7C */	stw r4, lbl_8063FF3C-_SDA_BASE_(r13)
/* 8029AEE0 00296B40  90 8D AC 80 */	stw r4, lbl_8063FF40-_SDA_BASE_(r13)
/* 8029AEE4 00296B44  90 0D AC 68 */	stw r0, lbl_8063FF28-_SDA_BASE_(r13)
/* 8029AEE8 00296B48  4B FD 38 9D */	bl OSRestoreInterrupts
lbl_8029AEEC:
/* 8029AEEC 00296B4C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8029AEF0 00296B50  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8029AEF4 00296B54  7C 08 03 A6 */	mtlr r0
/* 8029AEF8 00296B58  38 21 00 10 */	addi r1, r1, 0x10
/* 8029AEFC 00296B5C  4E 80 00 20 */	blr

.global DSPCheckInit
DSPCheckInit:
/* 8029AF00 00296B60  80 6D AC 68 */	lwz r3, lbl_8063FF28-_SDA_BASE_(r13)
/* 8029AF04 00296B64  4E 80 00 20 */	blr

.global DSPAddTask
DSPAddTask:
/* 8029AF08 00296B68  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8029AF0C 00296B6C  7C 08 02 A6 */	mflr r0
/* 8029AF10 00296B70  90 01 00 14 */	stw r0, 0x14(r1)
/* 8029AF14 00296B74  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8029AF18 00296B78  93 C1 00 08 */	stw r30, 8(r1)
/* 8029AF1C 00296B7C  7C 7E 1B 78 */	mr r30, r3
/* 8029AF20 00296B80  4B FD 38 3D */	bl OSDisableInterrupts
/* 8029AF24 00296B84  7C 7F 1B 78 */	mr r31, r3
/* 8029AF28 00296B88  7F C3 F3 78 */	mr r3, r30
/* 8029AF2C 00296B8C  48 00 08 BD */	bl __DSP_insert_task
/* 8029AF30 00296B90  38 60 00 00 */	li r3, 0
/* 8029AF34 00296B94  38 00 00 01 */	li r0, 1
/* 8029AF38 00296B98  90 7E 00 00 */	stw r3, 0(r30)
/* 8029AF3C 00296B9C  7F E3 FB 78 */	mr r3, r31
/* 8029AF40 00296BA0  90 1E 00 08 */	stw r0, 8(r30)
/* 8029AF44 00296BA4  4B FD 38 41 */	bl OSRestoreInterrupts
/* 8029AF48 00296BA8  80 0D AC 80 */	lwz r0, lbl_8063FF40-_SDA_BASE_(r13)
/* 8029AF4C 00296BAC  7C 1E 00 40 */	cmplw r30, r0
/* 8029AF50 00296BB0  40 82 00 0C */	bne lbl_8029AF5C
/* 8029AF54 00296BB4  7F C3 F3 78 */	mr r3, r30
/* 8029AF58 00296BB8  48 00 07 05 */	bl __DSP_boot_task
lbl_8029AF5C:
/* 8029AF5C 00296BBC  7F C3 F3 78 */	mr r3, r30
/* 8029AF60 00296BC0  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8029AF64 00296BC4  83 C1 00 08 */	lwz r30, 8(r1)
/* 8029AF68 00296BC8  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8029AF6C 00296BCC  7C 08 03 A6 */	mtlr r0
/* 8029AF70 00296BD0  38 21 00 10 */	addi r1, r1, 0x10
/* 8029AF74 00296BD4  4E 80 00 20 */	blr

.global DSPAssertTask
DSPAssertTask:
/* 8029AF78 00296BD8  94 21 FF F0 */	stwu r1, -0x10(r1)
/* 8029AF7C 00296BDC  7C 08 02 A6 */	mflr r0
/* 8029AF80 00296BE0  90 01 00 14 */	stw r0, 0x14(r1)
/* 8029AF84 00296BE4  93 E1 00 0C */	stw r31, 0xc(r1)
/* 8029AF88 00296BE8  93 C1 00 08 */	stw r30, 8(r1)
/* 8029AF8C 00296BEC  7C 7E 1B 78 */	mr r30, r3
/* 8029AF90 00296BF0  4B FD 37 CD */	bl OSDisableInterrupts
/* 8029AF94 00296BF4  80 AD AC 84 */	lwz r5, lbl_8063FF44-_SDA_BASE_(r13)
/* 8029AF98 00296BF8  7C 7F 1B 78 */	mr r31, r3
/* 8029AF9C 00296BFC  7C 05 F0 40 */	cmplw r5, r30
/* 8029AFA0 00296C00  40 82 00 1C */	bne lbl_8029AFBC
/* 8029AFA4 00296C04  38 00 00 01 */	li r0, 1
/* 8029AFA8 00296C08  93 CD AC 74 */	stw r30, lbl_8063FF34-_SDA_BASE_(r13)
/* 8029AFAC 00296C0C  90 0D AC 70 */	stw r0, lbl_8063FF30-_SDA_BASE_(r13)
/* 8029AFB0 00296C10  4B FD 37 D5 */	bl OSRestoreInterrupts
/* 8029AFB4 00296C14  7F C3 F3 78 */	mr r3, r30
/* 8029AFB8 00296C18  48 00 00 64 */	b lbl_8029B01C
lbl_8029AFBC:
/* 8029AFBC 00296C1C  80 9E 00 04 */	lwz r4, 4(r30)
/* 8029AFC0 00296C20  80 05 00 04 */	lwz r0, 4(r5)
/* 8029AFC4 00296C24  7C 04 00 40 */	cmplw r4, r0
/* 8029AFC8 00296C28  40 80 00 4C */	bge lbl_8029B014
/* 8029AFCC 00296C2C  38 00 00 01 */	li r0, 1
/* 8029AFD0 00296C30  93 CD AC 74 */	stw r30, lbl_8063FF34-_SDA_BASE_(r13)
/* 8029AFD4 00296C34  90 0D AC 70 */	stw r0, lbl_8063FF30-_SDA_BASE_(r13)
/* 8029AFD8 00296C38  80 05 00 00 */	lwz r0, 0(r5)
/* 8029AFDC 00296C3C  28 00 00 01 */	cmplwi r0, 1
/* 8029AFE0 00296C40  40 82 00 24 */	bne lbl_8029B004
/* 8029AFE4 00296C44  4B FD 37 79 */	bl OSDisableInterrupts
/* 8029AFE8 00296C48  3C A0 CC 00 */	lis r5, 0xCC00500A@ha
/* 8029AFEC 00296C4C  38 00 FF 57 */	li r0, -169
/* 8029AFF0 00296C50  A0 85 50 0A */	lhz r4, 0xCC00500A@l(r5)
/* 8029AFF4 00296C54  7C 80 00 38 */	and r0, r4, r0
/* 8029AFF8 00296C58  60 00 00 02 */	ori r0, r0, 2
/* 8029AFFC 00296C5C  B0 05 50 0A */	sth r0, 0x500a(r5)
/* 8029B000 00296C60  4B FD 37 85 */	bl OSRestoreInterrupts
lbl_8029B004:
/* 8029B004 00296C64  7F E3 FB 78 */	mr r3, r31
/* 8029B008 00296C68  4B FD 37 7D */	bl OSRestoreInterrupts
/* 8029B00C 00296C6C  7F C3 F3 78 */	mr r3, r30
/* 8029B010 00296C70  48 00 00 0C */	b lbl_8029B01C
lbl_8029B014:
/* 8029B014 00296C74  4B FD 37 71 */	bl OSRestoreInterrupts
/* 8029B018 00296C78  38 60 00 00 */	li r3, 0
lbl_8029B01C:
/* 8029B01C 00296C7C  80 01 00 14 */	lwz r0, 0x14(r1)
/* 8029B020 00296C80  83 E1 00 0C */	lwz r31, 0xc(r1)
/* 8029B024 00296C84  83 C1 00 08 */	lwz r30, 8(r1)
/* 8029B028 00296C88  7C 08 03 A6 */	mtlr r0
/* 8029B02C 00296C8C  38 21 00 10 */	addi r1, r1, 0x10
/* 8029B030 00296C90  4E 80 00 20 */	blr