diff options
author | 2010-06-27 19:34:10 +0200 | |
---|---|---|
committer | 2010-06-27 19:34:10 +0200 | |
commit | 054be7fb7a39dc2e9162b9f4a13bf17f2c3360d3 (patch) | |
tree | 76a7e5bfc829fe01cf558845f2a99f8502893950 /plugins/ao/eng_psf/peops/spu.c | |
parent | 1b1de373ca8e27882d8123757dd55d0e15200807 (diff) |
ao psf/psf2/spu reentrancy WIP
Diffstat (limited to 'plugins/ao/eng_psf/peops/spu.c')
-rw-r--r-- | plugins/ao/eng_psf/peops/spu.c | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/plugins/ao/eng_psf/peops/spu.c b/plugins/ao/eng_psf/peops/spu.c index b121cd11..4dca0d79 100644 --- a/plugins/ao/eng_psf/peops/spu.c +++ b/plugins/ao/eng_psf/peops/spu.c @@ -124,7 +124,7 @@ static const int f[5][2] = { { 115, -52 }, { 98, -55 }, { 122, -60 } }; -s16 * pS; +static s16 * pS; static s32 ttemp; //////////////////////////////////////////////////////////////////////// @@ -202,7 +202,7 @@ void setlength(s32 stop, s32 fade) } #define CLIP(_x) {if(_x>32767) _x=32767; if(_x<-32767) _x=-32767;} -int SPUasync(u32 cycles) +int SPUasync(mips_cpu_context *cpu, u32 cycles) { int volmul=iVolume; static s32 dosampies; @@ -490,12 +490,12 @@ int SPUasync(u32 cycles) return(1); } -extern void spu_update (unsigned char* pSound,long lBytes); // HACK! -void SPU_flushboot(void) +void SPU_flushboot(mips_cpu_context *cpu) { if((u8*)pS>((u8*)pSpuBuffer+1024)) { - spu_update((u8*)pSpuBuffer,(u8*)pS-(u8*)pSpuBuffer); + //spu_update(cpu, (u8*)pSpuBuffer,(u8*)pS-(u8*)pSpuBuffer); + cpu->spu_callback ((u8*)pSpuBuffer,(u8*)pS-(u8*)pSpuBuffer, cpu->spu_callback_data); pS=(s16 *)pSpuBuffer; } } @@ -522,8 +522,10 @@ static u64 gettime64(void) // SPUINIT: this func will be called first by the main emu //////////////////////////////////////////////////////////////////////// -int SPUinit(void) +int SPUinit(mips_cpu_context *cpu, void (*update_cb)(unsigned char *pSound, long lBytes, void *data), void *data) { + cpu->spu_callback = update_cb; + cpu->spu_callback_data = data; spuMemC=(u8*)spuMem; // just small setup memset((void *)s_chan,0,MAXCHAN*sizeof(SPUCHAN)); memset((void *)&rvb,0,sizeof(REVERBInfo)); @@ -584,7 +586,7 @@ void RemoveStreams(void) // SPUOPEN: called by main emu after init //////////////////////////////////////////////////////////////////////// -int SPUopen(void) +int SPUopen(mips_cpu_context *cpu) { if(bSPUIsOpen) return 0; // security for some stupid main emus spuIrq=0; @@ -611,7 +613,7 @@ int SPUopen(void) // SPUCLOSE: called before shutdown //////////////////////////////////////////////////////////////////////// -int SPUclose(void) +int SPUclose(mips_cpu_context *cpu) { if(!bSPUIsOpen) return 0; // some security @@ -626,12 +628,12 @@ int SPUclose(void) // SPUSHUTDOWN: called by main emu on final exit //////////////////////////////////////////////////////////////////////// -int SPUshutdown(void) +int SPUshutdown(mips_cpu_context *cpu) { return 0; } -void SPUinjectRAMImage(u16 *pIncoming) +void SPUinjectRAMImage(mips_cpu_context *cpu, u16 *pIncoming) { int i; |