From 2ac897c6430ee25726344b86ef485acf3bb5efc8 Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 15 Dec 2014 05:49:18 +0000 Subject: [PATCH] psx - fix some bad-sounding sounds bugs caused by some accidental older mednafen code --- output/dll/octoshock.dll | Bin 996352 -> 995840 bytes psx/octoshock/psx/spu.cpp | 59 ++++++++++++++++++++----------- psx/octoshock/psx/spu.h | 2 ++ psx/octoshock/psx/spu_nft.inc | 64 ---------------------------------- 4 files changed, 41 insertions(+), 84 deletions(-) delete mode 100644 psx/octoshock/psx/spu_nft.inc diff --git a/output/dll/octoshock.dll b/output/dll/octoshock.dll index 0c4d27c16ddb517e2e991f3a0189e22be6d15d0c..5858ec05de7e5dd213fdc6725f7adecec493cf59 100644 GIT binary patch delta 61254 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 RlPl`D%XnrI!Ij&H{{uUvC0+mk delta 65035 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 diff --git a/psx/octoshock/psx/spu.cpp b/psx/octoshock/psx/spu.cpp index 0c774e4c2f..8ef7c9abc7 100644 --- a/psx/octoshock/psx/spu.cpp +++ b/psx/octoshock/psx/spu.cpp @@ -82,11 +82,6 @@ static const int16 FIR_Table[256][4] = #include "spu_fir_table.inc" }; -static const uint32 NoiseFreqTable[64] = -{ - #include "spu_nft.inc" -}; - PS_SPU::PS_SPU() { last_rate = -1; @@ -94,8 +89,6 @@ PS_SPU::PS_SPU() IntermediateBufferPos = 0; memset(IntermediateBuffer, 0, sizeof(IntermediateBuffer)); - - for(int16 a = 32760; a >= 0; a++); } PS_SPU::~PS_SPU() @@ -147,6 +140,7 @@ void PS_SPU::Power(void) GlobalSweep[0].Power(); GlobalSweep[1].Power(); + NoiseDivider = 0; NoiseCounter = 0; LFSR = 0; @@ -356,8 +350,6 @@ void PS_SPU::RunDecoder(SPU_Voice *voice) //for(int z = 0; z < 4; z++) { - const uint16 CV = SPURAM[voice->CurAddr]; - if(SPUControl & 0x40) { unsigned test_addr = voice->CurAddr & 0x3FFFF; @@ -371,6 +363,8 @@ void PS_SPU::RunDecoder(SPU_Voice *voice) if((voice->CurAddr & 0x7) == 0) { + const uint16 CV = SPURAM[voice->CurAddr]; + voice->DecodeShift = CV & 0xF; voice->DecodeWeight = (CV >> 4) & 0xF; voice->DecodeFlags = (CV >> 8) & 0xFF; @@ -389,9 +383,15 @@ void PS_SPU::RunDecoder(SPU_Voice *voice) } } } + voice->CurAddr = (voice->CurAddr + 1) & 0x3FFFF; } - else + + // + // Don't else this block; we need to ALWAYS decode 4 samples per call to RunDecoder() if DecodeAvail < 11, or else sample playback + // at higher rates will fail horribly. + // { + const uint16 CV = SPURAM[voice->CurAddr]; const unsigned shift = voice->DecodeShift; const int32 weight_m1 = Weights[voice->DecodeWeight][0]; const int32 weight_m2 = Weights[voice->DecodeWeight][1]; @@ -414,8 +414,8 @@ void PS_SPU::RunDecoder(SPU_Voice *voice) } voice->DecodeWritePos = (voice->DecodeWritePos + 4) & 0x1F; voice->DecodeAvail += 4; + voice->CurAddr = (voice->CurAddr + 1) & 0x3FFFF; } - voice->CurAddr = (voice->CurAddr + 1) & 0x3FFFF; } } @@ -477,9 +477,7 @@ void PS_SPU::RunEnvelope(SPU_Voice *voice) //static INLINE void CalcVCDelta(const uint8 zs, uint8 speed, bool log_mode, bool decrement, bool inv_increment, int16 Current, int &increment, int &divinco) switch(ADSR->Phase) { - default: assert(0); - break; - + default: // Won't happen, but helps shut up gcc warnings. case ADSR_ATTACK: CalcVCDelta(0x7F, ADSR->AttackRate, ADSR->AttackExp, false, false, (int16)ADSR->EnvLevel, increment, divinco); uoflow_reset = 0x7FFF; @@ -553,6 +551,32 @@ INLINE uint16 PS_SPU::ReadSPURAM(uint32 addr) #include "spu_reverb.inc" +INLINE void PS_SPU::RunNoise(void) +{ + const unsigned rf = ((SPUControl >> 8) & 0x3F); + uint32 NoiseDividerInc = (2 << (rf >> 2)); + uint32 NoiseCounterInc = 4 + (rf & 0x3); + + if(rf >= 0x3C) + { + NoiseDividerInc = 0x8000; + NoiseCounterInc = 8; + } + + NoiseDivider += NoiseDividerInc; + if(NoiseDivider & 0x8000) + { + NoiseDivider = 0; + + NoiseCounter += NoiseCounterInc; + if(NoiseCounter & 0x8) + { + NoiseCounter &= 0x7; + LFSR = (LFSR << 1) | (((LFSR >> 15) ^ (LFSR >> 12) ^ (LFSR >> 11) ^ (LFSR >> 10) ^ 1) & 1); + } + } +} + int32 PS_SPU::UpdateFromCDC(int32 clocks) //pscpu_timestamp_t PS_SPU::Update(const pscpu_timestamp_t timestamp) { @@ -793,12 +817,7 @@ int32 PS_SPU::UpdateFromCDC(int32 clocks) CWA = (CWA + 1) & 0x1FF; - NoiseCounter += NoiseFreqTable[(SPUControl >> 8) & 0x3F]; - if(NoiseCounter >= 0x8000) - { - NoiseCounter -= 0x8000; - LFSR = (LFSR << 1) | (((LFSR >> 15) ^ (LFSR >> 12) ^ (LFSR >> 11) ^ (LFSR >> 10) ^ 1) & 1); - } + RunNoise(); clamp(&accum_l, -32768, 32767); clamp(&accum_r, -32768, 32767); diff --git a/psx/octoshock/psx/spu.h b/psx/octoshock/psx/spu.h index 813233b5ef..e31fe6fdf6 100644 --- a/psx/octoshock/psx/spu.h +++ b/psx/octoshock/psx/spu.h @@ -133,10 +133,12 @@ private: void RunReverb(int32 in_l, int32 in_r, int32 &out_l, int32 &out_r); + void RunNoise(void); bool GetCDAudio(int32 &l, int32 &r); SPU_Voice Voices[24]; + uint32 NoiseDivider; uint32 NoiseCounter; uint16 LFSR; diff --git a/psx/octoshock/psx/spu_nft.inc b/psx/octoshock/psx/spu_nft.inc deleted file mode 100644 index 95b8f49c11..0000000000 --- a/psx/octoshock/psx/spu_nft.inc +++ /dev/null @@ -1,64 +0,0 @@ -0x00000001, -0x00000001, -0x00000001, -0x00000001, -0x00000002, -0x00000002, -0x00000002, -0x00000002, -0x00000004, -0x00000005, -0x00000006, -0x00000007, -0x00000008, -0x0000000a, -0x0000000c, -0x0000000e, -0x00000010, -0x00000014, -0x00000018, -0x0000001c, -0x00000020, -0x00000028, -0x00000030, -0x00000038, -0x00000040, -0x00000050, -0x00000060, -0x00000070, -0x00000080, -0x000000a0, -0x000000c0, -0x000000e0, -0x00000100, -0x00000140, -0x00000180, -0x000001c0, -0x00000200, -0x00000280, -0x00000300, -0x00000380, -0x00000400, -0x00000500, -0x00000600, -0x00000700, -0x00000800, -0x00000a00, -0x00000c00, -0x00000e00, -0x00001000, -0x00001400, -0x00001800, -0x00001c00, -0x00002000, -0x00002800, -0x00003000, -0x00003800, -0x00004000, -0x00005000, -0x00006000, -0x00007000, -0x00008000, -0x00008000, -0x00008000, -0x00008000,