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