blob: a87e3476532b7071f08b4c88e235274955272beb (
plain) (
blame)
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
|
#ifndef __PSXSPU_H
#define __PSXSPU_H
#include <sys/types.h>
// Mask settings bits for specifying voice channels
#define SPU_00CH (1<<0)
#define SPU_01CH (1<<1)
#define SPU_02CH (1<<2)
#define SPU_03CH (1<<3)
#define SPU_04CH (1<<4)
#define SPU_05CH (1<<5)
#define SPU_06CH (1<<6)
#define SPU_07CH (1<<7)
#define SPU_08CH (1<<8)
#define SPU_09CH (1<<9)
#define SPU_10CH (1<<10)
#define SPU_11CH (1<<11)
#define SPU_12CH (1<<12)
#define SPU_13CH (1<<13)
#define SPU_14CH (1<<14)
#define SPU_15CH (1<<15)
#define SPU_16CH (1<<16)
#define SPU_17CH (1<<17)
#define SPU_18CH (1<<18)
#define SPU_19CH (1<<19)
#define SPU_20CH (1<<20)
#define SPU_21CH (1<<21)
#define SPU_22CH (1<<22)
#define SPU_23CH (1<<23)
#define SPU_0CH SPU_00CH
#define SPU_1CH SPU_01CH
#define SPU_2CH SPU_02CH
#define SPU_3CH SPU_03CH
#define SPU_4CH SPU_04CH
#define SPU_5CH SPU_05CH
#define SPU_6CH SPU_06CH
#define SPU_7CH SPU_07CH
#define SPU_8CH SPU_08CH
#define SPU_9CH SPU_09CH
#define SPU_KEYCH(x) (1<<(x))
#define SPU_VOICECH(x) SPU_KEYCH(x)
// Mask setting bits for SpuVoiceAttr.mask
#define SPU_VOICE_VOLL (1<<0) // Left volume
#define SPU_VOICE_VOLR (1<<1) // Right volume
#define SPU_VOICE_VOLMODEL (1<<2) // Left volume mode
#define SPU_VOICE_VOLMODER (1<<3) // Right volume mode
#define SPU_VOICE_PITCH (1<<4) // Pitch tone
#define SPU_VOICE_NOTE (1<<5) // Pitch note
#define SPU_VOICE_SAMPLE_NOTE (1<<6) // Sample base frequency?
#define SPU_VOICE_WDSA (1<<7) // Sample start address (in SPU RAM)
#define SPU_VOICE_ADSR_AMODE (1<<8) // ADSR attack mode
#define SPU_VOICE_ADSR_SMODE (1<<9) // ADSR sustain mode
#define SPU_VOICE_ADSR_RMODE (1<<10) // ADSR release mode
#define SPU_VOICE_ADSR_AR (1<<11) // ADSR attack rate
#define SPU_VOICE_ADSR_DR (1<<12) // ADSR decay rate
#define SPU_VOICE_ADSR_SR (1<<13) // ADSR sustain rate
#define SPU_VOICE_ADSR_RR (1<<14) // ADSR release rate
#define SPU_VOICE_ADSR_SL (1<<15) // ADSR sustain level
#define SPU_VOICE_LSAX (1<<16) // Loop start address (in SPU RAM)
#define SPU_VOICE_ADSR_ADSR1 (1<<17) // adsr1 for VagAtr (?)
#define SPU_VOICE_ADSR_ADSR2 (1<<18) // adsr2 for VagAtr (?)
#define SPU_TRANSFER_BY_DMA 0
typedef struct {
short left;
short right;
} SpuVolume;
typedef struct {
SpuVolume vol; // 0
unsigned short freq; // 4
unsigned short addr; // 6
unsigned short loop_addr; // 8
unsigned short res; // 10
unsigned int adsr_param; // 12
} SpuVoiceRaw;
typedef struct {
u_int voice;
u_int mask;
SpuVolume volume;
SpuVolume volmode;
SpuVolume volumex;
u_short pitch;
u_short note;
u_short sample_note;
short envx;
u_int addr;
u_int loop_addr;
int a_mode;
int s_mode;
int r_mode;
u_short ar;
u_short dr;
u_short sr;
u_short rr;
u_short sl;
u_short adsr1;
u_short adsr2;
} SpuVoiceAttr;
#ifdef __cplusplus
extern "C" {
#endif
void SpuInit();
void SpuSetVoiceRaw( int voice, SpuVoiceRaw* param );
void SpuReverbOn( int voice );
void SpuSetReverb();
void SpuSetReverbAddr( int addr );
void SpuSetReverbVolume( int left, int right );
void SpuSetKey(int on_off, u_int voice_bit);
// SPU transfer functions
int SpuSetTransferMode(int mode);
int SpuSetTransferStartAddr(int addr);
int SpuWrite(unsigned char* addr, int size);
void SpuWait();
#ifdef __cplusplus
}
#endif
#endif
|