From 23b65c61ce2135745f6dcd97e340328ec44be500 Mon Sep 17 00:00:00 2001 From: tildearrow Date: Tue, 4 Jul 2023 01:34:39 -0500 Subject: [PATCH] C64: fix reSIDfp envelope reset being inconsistent --- src/engine/platform/c64.cpp | 2 ++ src/engine/platform/sound/c64_fp/EnvelopeGenerator.cpp | 9 ++++++--- src/engine/platform/sound/c64_fp/EnvelopeGenerator.h | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/c64.cpp b/src/engine/platform/c64.cpp index 29a9a105..6d03ba2f 100644 --- a/src/engine/platform/c64.cpp +++ b/src/engine/platform/c64.cpp @@ -21,6 +21,7 @@ #include "../engine.h" #include "sound/c64_fp/siddefs-fp.h" #include +#include "../../ta-log.h" #define rWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } @@ -525,6 +526,7 @@ void DivPlatformC64::reset() { if (isFP) { sid_fp.reset(); + sid_fp.clockSilent(16000); } else { sid.reset(); } diff --git a/src/engine/platform/sound/c64_fp/EnvelopeGenerator.cpp b/src/engine/platform/sound/c64_fp/EnvelopeGenerator.cpp index af636ac7..d92f68d6 100644 --- a/src/engine/platform/sound/c64_fp/EnvelopeGenerator.cpp +++ b/src/engine/platform/sound/c64_fp/EnvelopeGenerator.cpp @@ -61,7 +61,6 @@ const unsigned int EnvelopeGenerator::adsrtable[16] = void EnvelopeGenerator::reset() { - // counter is not changed on reset envelope_pipeline = 0; state_pipeline = 0; @@ -73,7 +72,7 @@ void EnvelopeGenerator::reset() gate = false; - resetLfsr = true; + resetLfsr = false; exponential_counter = 0; exponential_counter_period = 1; @@ -81,7 +80,11 @@ void EnvelopeGenerator::reset() state = RELEASE; counter_enabled = true; - rate = adsrtable[release]; + rate = 0; + + envelope_counter = 0; + env3 = 0; + lfsr = 0x7fff; } void EnvelopeGenerator::writeCONTROL_REG(unsigned char control) diff --git a/src/engine/platform/sound/c64_fp/EnvelopeGenerator.h b/src/engine/platform/sound/c64_fp/EnvelopeGenerator.h index f2aab387..1014cf82 100644 --- a/src/engine/platform/sound/c64_fp/EnvelopeGenerator.h +++ b/src/engine/platform/sound/c64_fp/EnvelopeGenerator.h @@ -146,7 +146,7 @@ public: counter_enabled(true), gate(false), resetLfsr(false), - envelope_counter(0xaa), + envelope_counter(0), attack(0), decay(0), sustain(0),