19#define SPU_INVALID_ARGS (-3)
26#define SPU_DONT_CARE 4
29#define SPU_VOICEONLY 6
34#define SpuDiag SPU_DIAG
35#define SpuCheck SPU_CHECK
38#define SpuClear SPU_CLEAR
39#define SpuReset SPU_RESET
40#define SpuDontCare SPU_DONT_CARE
42#define SpuCDOnly SPU_CDONLY
43#define SpuVoiceOnly SPU_VOICEONLY
44#define SpuCont SPU_CONT
45#define SpuNull SPU_NULL
47#define SPU_OFF_ENV_ON 2
48#define SPU_ON_ENV_OFF 3
50#define SpuOffEnvOn SPU_OFF_ENV_ON
51#define SpuOnEnvOff SPU_ON_ENV_OFF
54#define SpuError SPU_ERROR
56#define SPU_TRANSFER_BY_DMA 0
57#define SPU_TRANSFER_BY_IO 1
59#define SpuTransferByDMA SPU_TRANSFER_BY_DMA
60#define SpuTransferByIO SPU_TRANSFER_BY_IO
61#define SpuTransByDMA SPU_TRANSFER_BY_DMA
62#define SpuTransByIO SPU_TRANSFER_BY_IO
64#define SPU_TRANSFER_WAIT 1
65#define SPU_TRANSFER_PEEK 0
66#define SPU_TRANSFER_GLANCE SPU_TRANSFER_PEEK
68#define SPU_AUTODMA_ONESHOT 0
69#define SPU_AUTODMA_LOOP 1
70#define SPU_AUTODMA_START_ADDR (1 << 1)
71#define SPU_AUTODMA_BIT4 (1 << 4)
72#define SPU_AUTODMA_BIT6 (1 << 6)
73#define SPU_AUTODMA_BIT7 (1 << 6)
75#define SPU_00CH ((u32)1 << 0)
76#define SPU_01CH ((u32)1 << 1)
77#define SPU_02CH ((u32)1 << 2)
78#define SPU_03CH ((u32)1 << 3)
79#define SPU_04CH ((u32)1 << 4)
80#define SPU_05CH ((u32)1 << 5)
81#define SPU_06CH ((u32)1 << 6)
82#define SPU_07CH ((u32)1 << 7)
83#define SPU_08CH ((u32)1 << 8)
84#define SPU_09CH ((u32)1 << 9)
85#define SPU_10CH ((u32)1 << 10)
86#define SPU_11CH ((u32)1 << 11)
87#define SPU_12CH ((u32)1 << 12)
88#define SPU_13CH ((u32)1 << 13)
89#define SPU_14CH ((u32)1 << 14)
90#define SPU_15CH ((u32)1 << 15)
91#define SPU_16CH ((u32)1 << 16)
92#define SPU_17CH ((u32)1 << 17)
93#define SPU_18CH ((u32)1 << 18)
94#define SPU_19CH ((u32)1 << 19)
95#define SPU_20CH ((u32)1 << 20)
96#define SPU_21CH ((u32)1 << 21)
97#define SPU_22CH ((u32)1 << 22)
98#define SPU_23CH ((u32)1 << 23)
100#define SPU_0CH SPU_00CH
101#define SPU_1CH SPU_01CH
102#define SPU_2CH SPU_02CH
103#define SPU_3CH SPU_03CH
104#define SPU_4CH SPU_04CH
105#define SPU_5CH SPU_05CH
106#define SPU_6CH SPU_06CH
107#define SPU_7CH SPU_07CH
108#define SPU_8CH SPU_08CH
109#define SPU_9CH SPU_09CH
112 (SPU_00CH | SPU_01CH | SPU_02CH | SPU_03CH | SPU_04CH | SPU_05CH | SPU_06CH | SPU_07CH | SPU_08CH | SPU_09CH \
113 | SPU_10CH | SPU_11CH | SPU_12CH | SPU_13CH | SPU_14CH | SPU_15CH | SPU_16CH | SPU_17CH | SPU_18CH | SPU_19CH \
114 | SPU_20CH | SPU_21CH | SPU_22CH | SPU_23CH | 0)
116#define SPU_KEYCH(x) ((u32)1 << (x))
117#define SPU_VOICECH(...) SPU_VOICECH(__VA_ARGS__)
119#define SPU_VOICE_VOLL ((u32)1 << 0)
120#define SPU_VOICE_VOLR ((u32)1 << 1)
121#define SPU_VOICE_VOLMODEL ((u32)1 << 2)
122#define SPU_VOICE_VOLMODER ((u32)1 << 3)
123#define SPU_VOICE_PITCH ((u32)1 << 4)
124#define SPU_VOICE_NOTE ((u32)1 << 5)
125#define SPU_VOICE_SAMPLE_NOTE ((u32)1 << 6)
126#define SPU_VOICE_WDSA ((u32)1 << 7)
127#define SPU_VOICE_ADSR_AMODE ((u32)1 << 8)
128#define SPU_VOICE_ADSR_SMODE ((u32)1 << 9)
129#define SPU_VOICE_ADSR_RMODE ((u32)1 << 10)
130#define SPU_VOICE_ADSR_AR ((u32)1 << 11)
131#define SPU_VOICE_ADSR_DR ((u32)1 << 12)
132#define SPU_VOICE_ADSR_SR ((u32)1 << 13)
133#define SPU_VOICE_ADSR_RR ((u32)1 << 14)
134#define SPU_VOICE_ADSR_SL ((u32)1 << 15)
135#define SPU_VOICE_LSAX ((u32)1 << 16)
136#define SPU_VOICE_ADSR_ADSR1 ((u32)1 << 17)
137#define SPU_VOICE_ADSR_ADSR2 ((u32)1 << 18)
139enum libspu2_spu_voice_enum
141 SPU_VOICE_DIRECT = 0,
142 SPU_VOICE_LINEARIncN,
143 SPU_VOICE_LINEARIncR,
144 SPU_VOICE_LINEARDecN,
145 SPU_VOICE_LINEARDecR,
149 SPU_VOICE_EXPDecN = 7,
150 SPU_VOICE_EXPDecR = 7,
153#define SPU_DECODED_FIRSTHALF 0
154#define SPU_DECODED_SECONDHALF 1
155#define SPU_DECODE_FIRSTHALF SPU_DECODED_FIRSTHALF
156#define SPU_DECODE_SECONDHALF SPU_DECODED_SECONDHALF
158#define SPU_COMMON_MVOLL (1 << 0)
159#define SPU_COMMON_MVOLR (1 << 1)
160#define SPU_COMMON_MVOLMODEL (1 << 2)
161#define SPU_COMMON_MVOLMODER (1 << 3)
162#define SPU_COMMON_RVOLL (1 << 4)
163#define SPU_COMMON_RVOLR (1 << 5)
164#define SPU_COMMON_CDVOLL (1 << 6)
165#define SPU_COMMON_CDVOLR (1 << 7)
166#define SPU_COMMON_CDREV (1 << 8)
167#define SPU_COMMON_CDMIX (1 << 9)
168#define SPU_COMMON_EXTVOLL (1 << 10)
169#define SPU_COMMON_EXTVOLR (1 << 11)
170#define SPU_COMMON_EXTREV (1 << 12)
171#define SPU_COMMON_EXTMIX (1 << 13)
173#define SPU_REV_MODE (1 << 0)
174#define SPU_REV_DEPTHL (1 << 1)
175#define SPU_REV_DEPTHR (1 << 2)
176#define SPU_REV_DELAYTIME (1 << 3)
177#define SPU_REV_FEEDBACK (1 << 4)
179enum libspu2_spu_rev_type_enum
181 SPU_REV_MODE_CHECK = -1,
182 SPU_REV_MODE_OFF = 0,
184 SPU_REV_MODE_STUDIO_A,
185 SPU_REV_MODE_STUDIO_B,
186 SPU_REV_MODE_STUDIO_C,
195#define SPU_REV_MODE_CLEAR_WA 0x100
197#define SPU_EVENT_KEY (1 << 0)
198#define SPU_EVENT_PITCHLFO (1 << 1)
199#define SPU_EVENT_NOISE (1 << 2)
200#define SPU_EVENT_REVERB (1 << 3)
202enum libspu2_spu_spdif_out_enum
204 SPU_SPDIF_OUT_OFF = 0,
206 SPU_SPDIF_OUT_BITSTREAM,
207 SPU_SPDIF_OUT_BYPASS,
210#define SPU_SPDIF_COPY_NORMAL 0x00
211#define SPU_SPDIF_COPY_PROHIBIT 0x80
213#define SPU_SPDIF_MEDIA_CD 0x000
214#define SPU_SPDIF_MEDIA_DVD 0x800
216#define SPU_DECODEDDATA_SIZE 0x200
217#define SPU_DECODEDATA_SIZE SPU_DECODEDDATA_SIZE
220#define SPU_MALLOC_RECSIZ 8
222#define SPU_ENV_EVENT_QUEUEING (1 << 0)
224#define SPU_ST_NOT_AVAILABLE 0
225#define SPU_ST_ACCEPT 1
226#define SPU_ST_ERROR (-1)
227#define SPU_ST_INVALID_ARGUMENT (-2)
228#define SPU_ST_WRONG_STATUS (-3)
231#define SPU_ST_PREPARE 4
232#define SPU_ST_START 5
234#define SPU_ST_TRANSFER 7
235#define SPU_ST_FINAL 8
237#define SPU_ST_VAG_HEADER_SIZE 0x30
257 unsigned int loop_addr;
288 s16 cd_left[SPU_DECODEDDATA_SIZE];
289 s16 cd_right[SPU_DECODEDDATA_SIZE];
290 s16 voice1[SPU_DECODEDDATA_SIZE];
291 s16 voice3[SPU_DECODEDDATA_SIZE];
311typedef void (*SpuIRQCallbackProc)(void);
312typedef void (*SpuTransferCallbackProc)(void);
317 unsigned int queueing;
327 unsigned int buf_addr;
328 unsigned int data_addr;
335 SpuStVoiceAttr voice[24];
338typedef void (*SpuStCallbackProc)(
unsigned int voice_bit,
int status);
340extern void SpuSetDigitalOut(
int mode);
341#define SpuSetDegitalOut(...) SpuSetDigitalOut(__VA_ARGS__)
342extern void SpuStart(
void);
343extern void SpuInit(
void);
344extern unsigned int SpuSetCore(
unsigned int which_core);
345extern unsigned int SpuGetCore(
void);
346extern void SpuSetReverbEndAddr(
unsigned int eea);
347extern unsigned int SpuGetReverbEndAddr(
void);
348extern void SpuInitHot(
void);
349extern void SpuQuit(
void);
350extern int SpuSetMute(
int on_off);
351extern int SpuGetMute(
void);
352extern int SpuInitMalloc(
int num,
char *top);
353extern int SpuMalloc(
int size);
354extern int SpuMallocWithStartAddr(
unsigned int addr,
int size);
355extern void SpuFree(
unsigned int addr);
356extern void SpuSetEnv(
const SpuEnv *env);
357extern unsigned int SpuFlush(
unsigned int ev);
358extern unsigned int SpuSetNoiseVoice(
int on_off,
unsigned int voice_bit);
359extern unsigned int SpuGetNoiseVoice(
void);
360extern int SpuSetNoiseClock(
int n_clock);
361extern int SpuGetNoiseClock(
void);
362extern int SpuSetReverb(
int on_off);
363extern int SpuGetReverb(
void);
364extern int SpuSetReverbModeParam(SpuReverbAttr *attr);
365extern void SpuGetReverbModeParam(SpuReverbAttr *attr);
366extern int SpuReserveReverbWorkArea(
int on_off);
367extern int SpuIsReverbWorkAreaReserved(
int on_off);
368extern int SpuSetReverbDepth(SpuReverbAttr *attr);
369extern unsigned int SpuSetReverbVoice(
int on_off,
unsigned int voice_bit);
370extern unsigned int SpuGetReverbVoice(
void);
371extern int SpuClearReverbWorkArea(
int mode);
372extern int SpuReadDecodedData(SpuDecodedData *d_data,
int flag);
373extern int SpuSetIRQ(
int on_off);
374extern int SpuGetIRQ(
void);
375extern unsigned int SpuSetIRQAddr(
unsigned int addr);
376extern unsigned int SpuGetIRQAddr(
void);
377extern unsigned int SpuGetNextAddr(
int v_num);
378extern SpuIRQCallbackProc SpuSetIRQCallback(SpuIRQCallbackProc func);
379extern void SpuSetKey(
int on_off,
unsigned int voice_bit);
380extern int SpuGetKeyStatus(
unsigned int voice_bit);
381extern void SpuSetKeyOnWithAttr(SpuVoiceAttr *attr);
382extern void SpuGetVoiceEnvelopeAttr(
int v_num,
int *key_stat, s16 *envx);
383extern unsigned int SpuRead(u8 *addr,
unsigned int size);
384extern unsigned int SpuWrite(u8 *addr,
unsigned int size);
385extern unsigned int SpuAutoDMAWrite(u8 *addr,
unsigned int size,
unsigned int mode, ...);
386extern int SpuAutoDMAStop(
void);
387extern int SpuAutoDMAGetStatus(
void);
388extern unsigned int SpuWrite0(
unsigned int size);
389extern unsigned int SpuSetTransferStartAddr(
unsigned int addr);
390extern unsigned int SpuGetTransferStartAddr(
void);
391extern int SpuSetTransferMode(
int mode);
392extern int SpuGetTransferMode(
void);
393extern unsigned int SpuWritePartly(u8 *addr,
unsigned int size);
394extern int SpuIsTransferCompleted(
int flag);
395extern SpuTransferCallbackProc SpuSetTransferCallback(SpuTransferCallbackProc func);
396extern SpuTransferCallbackProc SpuAutoDMASetCallback(SpuTransferCallbackProc func);
397extern unsigned int SpuSetPitchLFOVoice(
int on_off,
unsigned int voice_bit);
398extern unsigned int SpuGetPitchLFOVoice(
void);
399extern void SpuSetCommonAttr(SpuCommonAttr *attr);
400extern void SpuGetCommonAttr(SpuCommonAttr *attr);
401extern int SpuRGetAllKeysStatus(
int min_,
int max_,
char *status);
402extern void SpuGetAllKeysStatus(
char *status);
403extern int SpuStTransfer(
int flag,
unsigned int voice_bit);
404extern SpuStEnv *SpuStInit(
int mode);
405extern int SpuStQuit(
void);
406extern int SpuStGetStatus(
void);
407extern unsigned int SpuStGetVoiceStatus(
void);
408extern SpuStCallbackProc SpuStSetPreparationFinishedCallback(SpuStCallbackProc func);
409extern SpuStCallbackProc SpuStSetTransferFinishedCallback(SpuStCallbackProc func);
410extern SpuStCallbackProc SpuStSetStreamFinishedCallback(SpuStCallbackProc func);
411extern unsigned int SpuStSetCore(
unsigned int core);
412extern void SpuSetVoiceVolume(
int v_num, s16 voll, s16 volr);
413extern void SpuSetVoiceVolumeAttr(
int v_num, s16 voll, s16 volr, s16 voll_mode, s16 volr_mode);
414extern void SpuSetVoicePitch(
int v_num, u16 pitch);
415extern void SpuSetVoiceNote(
int v_num, u16 note);
416extern void SpuSetVoiceSampleNote(
int v_num, u16 sample_note);
417extern void SpuSetVoiceStartAddr(
int v_num,
unsigned int start_addr);
418extern void SpuSetVoiceLoopStartAddr(
int v_num,
unsigned int lsa);
419extern void SpuSetVoiceAR(
int v_num, u16 ar);
420extern void SpuSetVoiceDR(
int v_num, u16 dr);
421extern void SpuSetVoiceSR(
int v_num, u16 sr);
422extern void SpuSetVoiceRR(
int v_num, u16 rr);
423extern void SpuSetVoiceSL(
int v_num, u16 sl);
424extern void SpuSetVoiceARAttr(
int v_num, u16 ar,
int ar_mode);
425extern void SpuSetVoiceSRAttr(
int v_num, u16 sr,
int sr_mode);
426extern void SpuSetVoiceRRAttr(
int v_num, u16 rr,
int rr_mode);
427extern void SpuSetVoiceADSR(
int v_num, u16 ar, u16 dr, u16 sr, u16 rr, u16 sl);
429SpuSetVoiceADSRAttr(
int v_num, u16 ar, u16 dr, u16 sr, u16 rr, u16 sl,
int ar_mode,
int sr_mode,
int rr_mode);
430extern void SpuSetVoiceAttr(SpuVoiceAttr *arg);
431extern int SpuRSetVoiceAttr(
int min_,
int max_, SpuVoiceAttr *arg);
432extern void SpuNSetVoiceAttr(
int v_num, SpuVoiceAttr *arg);
433extern void SpuLSetVoiceAttr(
int num, SpuLVoiceAttr *arg_list);
434extern void SpuGetVoiceVolume(
int v_num, s16 *voll, s16 *volr);
435extern void SpuGetVoiceVolumeAttr(
int v_num, s16 *voll, s16 *volr, s16 *voll_mode, s16 *volr_mode);
436extern void SpuGetVoiceVolumeX(
int v_num, s16 *voll_x, s16 *volr_x);
437extern void SpuGetVoicePitch(
int v_num, u16 *pitch);
438extern void SpuGetVoiceNote(
int v_num, u16 *note);
439extern void SpuGetVoiceSampleNote(
int v_num, u16 *sample_note);
440extern void SpuGetVoiceEnvelope(
int v_num, s16 *envx);
441extern void SpuGetVoiceStartAddr(
int v_num,
unsigned int *start_addr);
442extern void SpuGetVoiceLoopStartAddr(
int v_num,
unsigned int *loop_start_addr);
443extern void SpuGetVoiceAR(
int v_num, u16 *ar);
444extern void SpuGetVoiceDR(
int v_num, u16 *dr);
445extern void SpuGetVoiceSR(
int v_num, u16 *sr);
446extern void SpuGetVoiceRR(
int v_num, u16 *rr);
447extern void SpuGetVoiceSL(
int v_num, u16 *sl);
448extern void SpuGetVoiceARAttr(
int v_num, u16 *ar,
int *ar_mode);
449extern void SpuGetVoiceSRAttr(
int v_num, u16 *sr,
int *sr_mode);
450extern void SpuGetVoiceRRAttr(
int v_num, u16 *rr,
int *rr_mode);
451extern void SpuGetVoiceADSR(
int v_num, u16 *ar, u16 *dr, u16 *sr, u16 *rr, u16 *sl);
453SpuGetVoiceADSRAttr(
int v_num, u16 *ar, u16 *dr, u16 *sr, u16 *rr, u16 *sl,
int *ar_mode,
int *sr_mode,
int *rr_mode);
454extern void SpuSetCommonMasterVolume(s16 mvol_left, s16 mvol_right);
455extern void SpuSetCommonMasterVolumeAttr(s16 mvol_left, s16 mvol_right, s16 mvolmode_left, s16 mvolmode_right);
456extern void SpuSetCommonCDVolume(s16 cd_left, s16 cd_right);
457extern void SpuSetCommonCDReverb(
int cd_reverb);
458extern void SpuSetCommonCDMix(
int cd_mix);
459extern void SpuGetCommonMasterVolume(s16 *mvol_left, s16 *mvol_right);
460extern void SpuGetCommonMasterVolumeX(s16 *mvolx_left, s16 *mvolx_right);
461extern void SpuGetCommonMasterVolumeAttr(s16 *mvol_left, s16 *mvol_right, s16 *mvolmode_left, s16 *mvolmode_right);
462extern void SpuGetCommonCDVolume(s16 *cd_left, s16 *cd_right);
463extern void SpuGetCommonCDReverb(
int *cd_reverb);
464extern void SpuGetCommonCDMix(
int *cd_mix);
465extern int SpuSetReverbModeType(
int mode);
466extern void SpuSetReverbModeDepth(s16 depth_left, s16 depth_right);
467extern void SpuSetReverbModeDelayTime(
int delay);
468extern void SpuSetReverbModeFeedback(
int feedback);
469extern void SpuGetReverbModeType(
int *mode);
470extern void SpuGetReverbModeDepth(s16 *depth_left, s16 *depth_right);
471extern void SpuGetReverbModeDelayTime(
int *delay);
472extern void SpuGetReverbModeFeedback(
int *feedback);
473extern void SpuGetVoiceAttr(SpuVoiceAttr *arg);
474extern void SpuNGetVoiceAttr(
int v_num, SpuVoiceAttr *arg);
475extern void SpuSetESA(
int rev_addr);
476extern void SpuSetAutoDMAAttr(s16 vol_l, s16 vol_r, s16 dry_on, s16 effect_on);
477extern void SpuSetSerialInAttr(s16 dry_on, s16 effect_on);