sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
libsd-common.h
Go to the documentation of this file.
1
6
7#ifndef __LIBSD_COMMON_H__
8#define __LIBSD_COMMON_H__
9
10#include <tamtypes.h>
11
12#define SD_VOICE(_core, _v) ((_core) | ((_v) << 1))
13
14/* Macros to set ADSR: i=increment, d=decrement */
15#define SD_ADSR_AR_LINEARi 0
16#define SD_ADSR_AR_EXPi 1
17#define SD_ADSR_SR_LINEARi 0
18#define SD_ADSR_SR_LINEARd 2
19#define SD_ADSR_SR_EXPi 4
20#define SD_ADSR_SR_EXPd 6
21#define SD_ADSR_RR_LINEARd 0
22#define SD_ADSR_RR_EXPd 1
23#define SD_SET_ADSR1(_arm, _ar, _dr, _sl) ((((_arm)&1) << 15) | (((_ar)&0x7f) << 8) | (((_dr)&0xf) << 4) | ((_sl)&0xf))
24#define SD_SET_ADSR2(_srm, _sr, _rrm, _rr) ((((_srm)&7) << 13) | (((_sr)&0x7f) << 6) | (((_rrm)&1) << 5) | ((_rr)&0x1f))
25
26/* Parameters */
27#define SD_VPARAM_VOLL (0x00 << 8)
28#define SD_VPARAM_VOLR (0x01 << 8)
29#define SD_VPARAM_PITCH (0x02 << 8)
30#define SD_VPARAM_ADSR1 (0x03 << 8)
31#define SD_VPARAM_ADSR2 (0x04 << 8)
32#define SD_VPARAM_ENVX (0x05 << 8)
33#define SD_VPARAM_VOLXL (0x06 << 8)
34#define SD_VPARAM_VOLXR (0x07 << 8)
35#define SD_PARAM_MMIX (0x08 << 8)
36#define SD_PARAM_MVOLL ((0x09 << 8) | 0x80)
37#define SD_PARAM_MVOLR ((0x0A << 8) | 0x80)
38#define SD_PARAM_EVOLL ((0x0B << 8) | 0x80)
39#define SD_PARAM_EVOLR ((0x0C << 8) | 0x80)
40#define SD_PARAM_AVOLL ((0x0D << 8) | 0x80)
41#define SD_PARAM_AVOLR ((0x0E << 8) | 0x80)
42#define SD_PARAM_BVOLL ((0x0F << 8) | 0x80)
43#define SD_PARAM_BVOLR ((0x10 << 8) | 0x80)
44#define SD_PARAM_MVOLXL ((0x11 << 8) | 0x80)
45#define SD_PARAM_MVOLXR ((0x12 << 8) | 0x80)
46
47/* Transfer modes */
48#define SD_TRANS_WRITE 0
49#define SD_TRANS_READ 1
50#define SD_TRANS_STOP 2
51#define SD_TRANS_WRITE_FROM 3 /* only for block */
52#define SD_TRANS_LOOP 0x10 /* only for block*/
53#define SD_TRANS_MODE_DMA 0
54#define SD_TRANS_MODE_IO 8
55
56// Reverb
57#define SD_EFFECT_MODE_OFF 0x0
58#define SD_EFFECT_MODE_ROOM 0x1
59#define SD_EFFECT_MODE_STUDIO_1 0x2
60#define SD_EFFECT_MODE_STUDIO_2 0x3
61#define SD_EFFECT_MODE_STUDIO_3 0x4
62#define SD_EFFECT_MODE_HALL 0x5
63#define SD_EFFECT_MODE_SPACE 0x6
64#define SD_EFFECT_MODE_ECHO 0x7
65#define SD_EFFECT_MODE_DELAY 0x8
66#define SD_EFFECT_MODE_PIPE 0x9
67#define SD_EFFECT_MODE_CLEAR 0x100
68
69// CoreAttr
70#define SD_CORE_EFFECT_ENABLE 0x2
71#define SD_CORE_IRQ_ENABLE 0x4
72#define SD_CORE_MUTE_ENABLE 0x6
73#define SD_CORE_NOISE_CLK 0x8
74#define SD_CORE_SPDIF_MODE 0xA
75
76/* Switches */
77#define SD_SWITCH_PMON (0x13 << 8)
78#define SD_SWITCH_NON (0x14 << 8)
79#define SD_SWITCH_KON (0x15 << 8)
80#define SD_SWITCH_KEYDOWN SD_SWITCH_KON // For backward-compatibility
81#define SD_SWITCH_KOFF (0x16 << 8)
82#define SD_SWITCH_KEYUP SD_SWITCH_KOFF // For backward-compatibility
83#define SD_SWITCH_ENDX (0x17 << 8)
84#define SD_SWITCH_VMIXL (0x18 << 8)
85#define SD_SWITCH_VMIXEL (0x19 << 8)
86#define SD_SWITCH_VMIXR (0x1A << 8)
87#define SD_SWITCH_VMIXER (0x1B << 8)
88
89/* Addresses */
90#define SD_ADDR_ESA (0x1C << 8)
91#define SD_ADDR_EEA (0x1D << 8)
92#define SD_ADDR_TSA (0x1E << 8)
93#define SD_ADDR_IRQA (0x1F << 8)
94#define SD_VADDR_SSA (0x20 << 8)
95#define SD_VADDR_LSAX (0x21 << 8)
96#define SD_VADDR_NAX (0x22 << 8)
97
98// SD_CORE_ATTR Macros
99#define SD_SPU2_ON (1 << 15)
100#define SD_MUTE (1 << 14)
101#define SD_NOISE_CLOCK(c) ((c & 0x1F) << 8) // Bits 8..13 is noise clock
102#define SD_ENABLE_EFFECTS (1 << 7)
103#define SD_ENABLE_IRQ (1 << 6)
104#define SD_DMA_IO (1 << 4)
105#define SD_DMA_WRITE (2 << 4)
106#define SD_DMA_READ (3 << 4)
107#define SD_DMA_IN_PROCESS (3 << 4) // If either of the DMA bits are set, the DMA channel is occupied.
108#define SD_CORE_DMA (3 << 4)
109#define SD_ENABLE_EX_INPUT (1 << 0) // Enable external input, Not sure.
110
111// SD_C_STATX
112#define SD_IO_IN_PROCESS (1 << 10)
113
114// Batch
115#define SD_BATCH_SETPARAM 0x1
116#define SD_BATCH_SETSWITCH 0x2
117#define SD_BATCH_SETADDR 0x3
118#define SD_BATCH_SETCORE 0x4
119#define SD_BATCH_WRITEIOP 0x5
120#define SD_BATCH_WRITEEE 0x6
121#define SD_BATCH_EERETURN 0x7
122#define SD_BATCH_GETPARAM 0x11
123#define SD_BATCH_GETSWITCH 0x12
124#define SD_BATCH_GETADDR 0x13
125#define SD_BATCH_GETCORE 0x14
126
127#define ADPCM_LOOP_START 4 /* Set on first block of looped data */
128#define ADPCM_LOOP 2 /* Set on all blocks (?that are inside the loop?) */
129#define ADPCM_LOOP_END 1 /* Set on last block to loop */
130
131typedef struct
132{
133 u16 func;
134 u16 entry;
135 u32 value;
136} sceSdBatch;
137
138typedef struct
139{
140 int core;
141 int mode;
142 short depth_L;
143 short depth_R;
144 int delay;
145 int feedback;
147
148typedef int (*sceSdSpu2IntrHandler)(int core_bit, void *arg);
149typedef int (*sceSdTransIntrHandler)(int core, void *arg);
150typedef int (*SdIntrCallback)(void *data);
151typedef int (*sceSdBlockTransHandler)(int channel, void *userdata, void **addr, int *size);
152
153#ifdef __cplusplus
154extern "C" {
155#endif
156
157extern int sceSdQuit();
158extern int sceSdInit(int flag);
159extern SdIntrCallback sceSdSetIRQCallback(SdIntrCallback cb);
160extern SdIntrCallback sceSdSetTransCallback(s32 core, SdIntrCallback cb);
161
162extern void sceSdSetParam(u16 entry, u16 value);
163extern u16 sceSdGetParam(u16 entry);
164
165extern void sceSdSetCoreAttr(u16 entry, u16 value);
166extern u16 sceSdGetCoreAttr(u16 entry);
167extern int sceSdClearEffectWorkArea(int core, int channel, int effect_mode);
168
169extern void sceSdSetAddr(u16 entry, u32 value);
170extern u32 sceSdGetAddr(u16 entry);
171
172extern void sceSdSetSwitch(u16 entry, u32 value);
173extern u32 sceSdGetSwitch(u16 entry);
174
175extern u16 sceSdNote2Pitch(u16 center_note, u16 center_fine, u16 note, s16 fine);
176extern u16 sceSdPitch2Note(u16 center_note, u16 center_fine, u16 pitch);
177
178extern int sceSdSetEffectAttr(int core, const sceSdEffectAttr *attr);
179extern void sceSdGetEffectAttr(int core, sceSdEffectAttr *attr);
180
181extern int sceSdProcBatch(const sceSdBatch *batch, u32 *rets, u32 num);
182extern int sceSdProcBatchEx(const sceSdBatch *batch, u32 *rets, u32 num, u32 voice);
183
184extern int sceSdVoiceTrans(s16 chan, u16 mode, u8 *iopaddr, u32 *spuaddr, u32 size);
185extern int sceSdBlockTrans(s16 chan, u16 mode, u8 *iopaddr, u32 size, ...);
186extern u32 sceSdVoiceTransStatus(s16 channel, s16 flag);
187extern u32 sceSdBlockTransStatus(s16 channel, s16 flag);
188
189extern sceSdTransIntrHandler sceSdSetTransIntrHandler(int channel, sceSdTransIntrHandler func, void *arg);
190extern sceSdSpu2IntrHandler sceSdSetSpu2IntrHandler(sceSdSpu2IntrHandler func, void *arg);
191
192extern void *sceSdGetTransIntrHandlerArgument(int arg);
193extern void *sceSdGetSpu2IntrHandlerArgument();
194
195// The following was added in module version 3.1, export version 1.5, SDK 2.4.2
196extern int sceSdStopTrans(int channel);
197// The following was added in module version 3.3, export version 1.5, SDK 2.5
198extern int sceSdCleanEffectWorkArea(int core, int channel, int effect_mode);
199extern int sceSdSetEffectMode(int core, const sceSdEffectAttr *param);
200extern int sceSdSetEffectModeParams(int core, const sceSdEffectAttr *attr);
201
202#ifdef __cplusplus
203}
204#endif
205
206// Backwards compatibility definitions
207#define BATCH_SETPARAM SD_BATCH_SETPARAM
208#define BATCH_SETSWITCH SD_BATCH_SETSWITCH
209#define BATCH_SETADDR SD_BATCH_SETADDR
210#define BATCH_SETCORE SD_BATCH_SETCORE
211#define BATCH_WRITEIOP SD_BATCH_WRITEIOP
212#define BATCH_WRITEEE SD_BATCH_WRITEEE
213#define BATCH_EERETURN SD_BATCH_EERETURN
214#define BATCH_GETPARAM SD_BATCH_GETPARAM
215#define BATCH_GETSWITCH SD_BATCH_GETSWITCH
216#define BATCH_GETADDR SD_BATCH_GETADDR
217#define BATCH_GETCORE SD_BATCH_GETCORE
218
219#define SD_BLOCK_TRANS_WRITE SD_TRANS_WRITE
220#define SD_BLOCK_TRANS_READ SD_TRANS_READ
221#define SD_BLOCK_TRANS_STOP SD_TRANS_STOP
222#define SD_BLOCK_TRANS_WRITE_FROM SD_TRANS_WRITE_FROM
223#define SD_BLOCK_TRANS_LOOP SD_TRANS_LOOP
224
225#define SD_VOICE_TRANS_WRITE SD_TRANS_WRITE
226#define SD_VOICE_TRANS_READ SD_TRANS_READ
227#define SD_VOICE_TRANS_STOP SD_TRANS_STOP
228#define SD_VOICE_TRANS_MODE_DMA SD_TRANS_MODE_DMA
229#define SD_VOICE_TRANS_MODE_IO SD_TRANS_MODE_IO
230
231#define SdBatch sceSdBatch
232#define SdEffectAttr sceSdEffectAttr
233#define SdSpu2IntrHandler sceSdSpu2IntrHandler
234#define SdTransIntrHandler sceSdTransIntrHandler
235#define IntrCallback SdIntrCallback
236
237#define SdQuit sceSdQuit
238#define SdInit sceSdInit
239#define SdSetIRQCallback sceSdSetIRQCallback
240#define SdSetTransCallback sceSdSetTransCallback
241#define SdSetParam sceSdSetParam
242#define SdGetParam sceSdGetParam
243#define SdSetCoreAttr sceSdSetCoreAttr
244#define SdGetCoreAttr sceSdGetCoreAttr
245#define SdClearEffectWorkArea sceSdClearEffectWorkArea
246#define SdSetAddr sceSdSetAddr
247#define SdGetAddr sceSdGetAddr
248#define SdSetSwitch sceSdSetSwitch
249#define SdGetSwitch sceSdGetSwitch
250#define SdNote2Pitch sceSdNote2Pitch
251#define SdPitch2Note sceSdPitch2Note
252#define SdSetEffectAttr sceSdSetEffectAttr
253#define SdGetEffectAttr sceSdGetEffectAttr
254#define SdProcBatch sceSdProcBatch
255#define SdProcBatchEx sceSdProcBatchEx
256#define SdVoiceTrans sceSdVoiceTrans
257#define SdBlockTrans sceSdBlockTrans
258#define SdVoiceTransStatus sceSdVoiceTransStatus
259#define SdBlockTransStatus sceSdBlockTransStatus
260#define SdSetTransIntrHandler sceSdSetTransIntrHandler
261#define SdSetSpu2IntrHandler sceSdSetSpu2IntrHandler
262#define SdGetTransIntrHandlerArgument sceSdGetTransIntrHandlerArgument
263#define SdGetSpu2IntrHandlerArgument sceSdGetSpu2IntrHandlerArgument
264#define SdStopTrans sceSdStopTrans
265#define SdCleanEffectWorkArea sceSdCleanEffectWorkArea
266#define SdSetEffectMode sceSdSetEffectMode
267#define SdSetEffectModeParams sceSdSetEffectModeParams
268
269#endif /* __LIBSD_COMMON_H__ */