From 6ceac620152380f2e061bfad5d1007dfb61e6620 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Sun, 23 Oct 2022 03:17:30 -0500 Subject: [PATCH] SNES: fix effective sustain mode --- src/engine/platform/snes.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/engine/platform/snes.cpp b/src/engine/platform/snes.cpp index 8ea97c93..fd15cc74 100644 --- a/src/engine/platform/snes.cpp +++ b/src/engine/platform/snes.cpp @@ -596,10 +596,16 @@ void DivPlatformSNES::writeOutVol(int ch) { void DivPlatformSNES::writeEnv(int ch) { if (chan[ch].state.useEnv) { - chWrite(ch,5,chan[ch].state.a|(chan[ch].state.d<<4)|0x80); - if (chan[ch].state.sus && chan[ch].active) { - chWrite(ch,6,chan[ch].state.s<<5); + if (chan[ch].state.sus) { + if (chan[ch].active) { + chWrite(ch,5,chan[ch].state.a|(chan[ch].state.d<<4)|0x80); + chWrite(ch,6,chan[ch].state.s<<5); + } else { // dec linear + chWrite(ch,7,0x80|chan[ch].state.r); + chWrite(ch,5,0); + } } else { + chWrite(ch,5,chan[ch].state.a|(chan[ch].state.d<<4)|0x80); chWrite(ch,6,chan[ch].state.r|(chan[ch].state.s<<5)); } } else {