diff options
author | João Silva | 2017-08-13 03:54:24 +0100 |
---|---|---|
committer | João Silva | 2017-08-13 03:54:24 +0100 |
commit | e18e3e55bbe96eb2e415ef0ba0ea743460ec0b7b (patch) | |
tree | 57a6be092ef3d39b714de8aab96ac5a05c8676e8 /source/apu.c | |
parent | 62be8bed4dc3dc7793f1df1391f153436e4ea949 (diff) | |
download | snes9x2005-e18e3e55bbe96eb2e415ef0ba0ea743460ec0b7b.tar.gz snes9x2005-e18e3e55bbe96eb2e415ef0ba0ea743460ec0b7b.tar.bz2 snes9x2005-e18e3e55bbe96eb2e415ef0ba0ea743460ec0b7b.zip |
Sound fixes (including a savestate loading crash fix on 64-bit).
Diffstat (limited to 'source/apu.c')
-rw-r--r-- | source/apu.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/source/apu.c b/source/apu.c index 9d18242..28214e1 100644 --- a/source/apu.c +++ b/source/apu.c @@ -61,8 +61,8 @@ void S9xResetAPU() APU.Cycles = 0; IAPU.Registers.YA.W = 0; IAPU.Registers.X = 0; - IAPU.Registers.S = 0xff; - IAPU.Registers.P = 0; + IAPU.Registers.S = 0xef; + IAPU.Registers.P = 0x02; S9xAPUUnpackStatus(); IAPU.Registers.PC = 0; IAPU.APUExecuting = Settings.APUEnabled; @@ -211,7 +211,8 @@ void S9xSetAPUDSP(uint8_t byte) APU.DSP [APU_ENDX] &= ~mask; S9xPlaySample(c); } - else KeyOn |= mask; + else + KeyOn |= mask; } } } @@ -244,7 +245,7 @@ void S9xSetAPUDSP(uint8_t byte) case APU_P_LOW + 0x50: case APU_P_LOW + 0x60: case APU_P_LOW + 0x70: - S9xSetSoundHertz(reg >> 4, (((int16_t) byte + ((int16_t) APU.DSP [reg + 1] << 8)) & FREQUENCY_MASK) / 8); + S9xSetSoundHertz(reg >> 4, ((((int16_t) byte + ((int16_t) APU.DSP [reg + 1] << 8)) & FREQUENCY_MASK) * 32000) >> 12); break; case APU_P_HIGH + 0x00: case APU_P_HIGH + 0x10: @@ -442,7 +443,10 @@ uint8_t S9xGetAPUDSP() case APU_ENVX + 0x50: case APU_ENVX + 0x60: case APU_ENVX + 0x70: - return 0; + { + int32_t eVal = SoundData.channels [reg >> 4].envx; + return (eVal > 0x7F) ? 0x7F : (eVal < 0 ? 0 : eVal); + } default: break; } |