From a2e966796415d7888ef95d03f5703b7240934b2c Mon Sep 17 00:00:00 2001 From: zeromus Date: Mon, 25 Jun 2012 20:23:53 +0000 Subject: [PATCH] spu-fix 8bit data to be signed --- desmume/src/SPU.cpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/desmume/src/SPU.cpp b/desmume/src/SPU.cpp index f7e635711..7792377da 100644 --- a/desmume/src/SPU.cpp +++ b/desmume/src/SPU.cpp @@ -44,6 +44,7 @@ static inline s16 read16(u32 addr) { return (s16)_MMU_read16(addr); } static inline u8 read08(u32 addr) { return _MMU_read08(addr); } +static inline s8 read_s8(u32 addr) { return (s8)_MMU_read08(addr); } #define K_ADPCM_LOOPING_RECOVERY_INDEX 99999 #define COSINE_INTERPOLATION_RESOLUTION 8192 @@ -833,15 +834,15 @@ template static FORCEINLINE void Fetch8Bi u32 loc = sputrunc(chan->sampcnt); if(INTERPOLATE_MODE != SPUInterpolation_None) { - s32 a = (s32)(read08(chan->addr + loc) << 8); + s32 a = (s32)(read_s8(chan->addr + loc) << 8); if(loc < (chan->totlength << 2) - 1) { - s32 b = (s32)(read08(chan->addr + loc + 1) << 8); + s32 b = (s32)(read_s8(chan->addr + loc + 1) << 8); a = Interpolate(a, b, chan->sampcnt); } *data = a; } else - *data = (s32)read08(chan->addr + loc)<< 8; + *data = (s32)read_s8(chan->addr + loc)<< 8; } template static FORCEINLINE void Fetch16BitData(const channel_struct * const chan, s32 *data)