From df7d25f4bfc5d3598b3ed887ffa1b784c9af3ade Mon Sep 17 00:00:00 2001 From: "Unknown W. Brackets" Date: Sun, 9 Feb 2014 11:30:15 -0800 Subject: [PATCH] Correct a case where release rate was set negative. Seems to be capped at INT_MAX like the others, oops. --- Core/HW/SasAudio.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Core/HW/SasAudio.cpp b/Core/HW/SasAudio.cpp index 5e64a5fb0..2c872972d 100644 --- a/Core/HW/SasAudio.cpp +++ b/Core/HW/SasAudio.cpp @@ -20,6 +20,7 @@ #include "Core/MemMap.h" #include "Core/HLE/sceAtrac.h" #include "Core/Config.h" +#include "Core/Reporting.h" #include "SasAudio.h" #include @@ -286,6 +287,8 @@ static int getReleaseRate(int bitfield2) { } return 0x10000000 >> n; } + if (n == 0) + return 0x7FFFFFFF; return 0x80000000 >> n; } @@ -303,6 +306,10 @@ void ADSREnvelope::SetSimpleEnvelope(u32 ADSREnv1, u32 ADSREnv2) { releaseRate = getReleaseRate(ADSREnv2); releaseType = getReleaseType(ADSREnv2); sustainLevel = getSustainLevel(ADSREnv1); + + if (attackRate < 0 || decayRate < 0 || sustainRate < 0 || releaseRate < 0) { + ERROR_LOG_REPORT(SCESAS, "Simple ADSR resulted in invalid rates: %04x, %04x", ADSREnv1, ADSREnv2); + } } SasInstance::SasInstance()