X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=plugins%2Fdfsound%2Fregisters.c;h=580589975d334784b681f7f05af343adb5c87542;hb=906b1599387d4ecbf225282ba5123f83444c88fb;hp=e75f70861882a43e5a5a3a331bbd839086727c58;hpb=6c9db47c7c54b925e00a96b17faa05e17d6af262;p=pcsx_rearmed.git diff --git a/plugins/dfsound/registers.c b/plugins/dfsound/registers.c index e75f7086..58058997 100644 --- a/plugins/dfsound/registers.c +++ b/plugins/dfsound/registers.c @@ -22,6 +22,7 @@ #include "externals.h" #include "registers.h" #include "spu_config.h" +#include "spu.h" static void SoundOn(int start,int end,unsigned short val); static void SoundOff(int start,int end,unsigned short val); @@ -127,7 +128,7 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val, break; //-------------------------------------------------// case H_SPUdata: - *(unsigned short *)(spu.spuMemC + spu.spuAddr) = val; + *(unsigned short *)(spu.spuMemC + spu.spuAddr) = HTOLE16(val); spu.spuAddr += 2; spu.spuAddr &= 0x7fffe; break; @@ -149,6 +150,8 @@ void CALLBACK SPUwriteRegister(unsigned long reg, unsigned short val, goto rvbd; //-------------------------------------------------// case H_SPUirqAddr: + //if (val & 1) + // log_unhandled("w irq with lsb: %08lx %04x\n", reg, val); spu.pSpuIrq=spu.spuMemC+(((unsigned long) val<<3)&~0xf); goto upd_irq; //-------------------------------------------------// @@ -334,7 +337,7 @@ unsigned short CALLBACK SPUreadRegister(unsigned long reg) case H_SPUdata: { - unsigned short s = *(unsigned short *)(spu.spuMemC + spu.spuAddr); + unsigned short s = LE16TOH(*(unsigned short *)(spu.spuMemC + spu.spuAddr)); spu.spuAddr += 2; spu.spuAddr &= 0x7fffe; return s; @@ -350,6 +353,19 @@ unsigned short CALLBACK SPUreadRegister(unsigned long reg) case H_SPUMute2: log_unhandled("r isOn: %08lx\n", reg); break; + + case 0x0dac: + case H_SPUirqAddr: + case H_CDLeft: + case H_CDRight: + case H_ExtLeft: + case H_ExtRight: + break; + + default: + if (r >= 0xda0) + log_unhandled("spu r %08lx\n", reg); + break; } return spu.regArea[(r-0xc00)>>1]; @@ -504,11 +520,9 @@ static void SetPitch(int ch,unsigned short val) // SET PITCH spu.s_chan[ch].iRawPitch = NP; spu.s_chan[ch].sinc = NP << 4; spu.s_chan[ch].sinc_inv = 0; - spu.SB[ch * SB_SIZE + 32] = 1; // -> freq change in simple interpolation mode: set flag - if (val) - spu.dwChannelsAudible |= 1u << ch; - else - spu.dwChannelsAudible &= ~(1u << ch); + spu.s_chan[ch].bNewPitch = 1; + + // don't mess spu.dwChannelsAudible as adsr runs independently } ////////////////////////////////////////////////////////////////////////