blob: 3b6d04ccf418d2899d00b671d6ca395dedf2795f (
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
|
#include "dolphin/dsp.h"
const char* __DSPVersion = "<< Dolphin SDK - DSP\trelease build: Sep 5 2002 05:35:13 (0x2301) >>";
extern DSPTaskInfo* __DSP_rude_task;
extern int __DSP_rude_task_pending;
static BOOL __DSP_init_flag;
extern void __DSPHandler(__OSInterrupt, OSContext*);
u32 DSPCheckMailToDSP(void) {
return (__DSPRegs[0] & (1 << 15)) >> 15;
}
u32 DSPCheckMailFromDSP(void) {
return (__DSPRegs[2] & (1 << 15)) >> 15;
}
u32 DSPReadMailFromDSP(void) {
return (__DSPRegs[2] << 16) | __DSPRegs[3];
}
void DSPSendMailToDSP(u32 mail) {
__DSPRegs[0] = mail >> 16;
__DSPRegs[1] = mail & 0xFFFF;
}
void DSPAssertInt(void) {
BOOL old;
u16 tmp;
old = OSDisableInterrupts();
tmp = __DSPRegs[5];
tmp = (tmp & ~0xA8) | 2;
__DSPRegs[5] = tmp;
OSRestoreInterrupts(old);
}
void DSPInit(void) {
BOOL old;
u16 tmp;
__DSP_debug_printf("DSPInit(): Build Date: %s %s\n", "Sep 5 2002", "05:35:13");
if (__DSP_init_flag == 1)
return;
OSRegisterVersion(__DSPVersion);
old = OSDisableInterrupts();
__OSSetInterruptHandler(7, __DSPHandler);
__OSUnmaskInterrupts(OS_INTERRUPTMASK_DSP_DSP);
tmp = __DSPRegs[5];
tmp = (tmp & ~0xA8) | 0x800;
__DSPRegs[5] = tmp;
tmp = __DSPRegs[5];
__DSPRegs[5] = tmp = tmp & ~0xAC;
__DSP_first_task = __DSP_last_task = __DSP_curr_task = __DSP_tmp_task = NULL;
__DSP_init_flag = 1;
OSRestoreInterrupts(old);
}
|