C64: fix reSIDfp envelope reset being inconsistent

This commit is contained in:
tildearrow 2023-07-04 01:34:39 -05:00
parent f1b30c01a4
commit 23b65c61ce
3 changed files with 9 additions and 4 deletions

View File

@ -21,6 +21,7 @@
#include "../engine.h" #include "../engine.h"
#include "sound/c64_fp/siddefs-fp.h" #include "sound/c64_fp/siddefs-fp.h"
#include <math.h> #include <math.h>
#include "../../ta-log.h"
#define rWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} } #define rWrite(a,v) if (!skipRegisterWrites) {writes.emplace(a,v); if (dumpWrites) {addWrite(a,v);} }
@ -525,6 +526,7 @@ void DivPlatformC64::reset() {
if (isFP) { if (isFP) {
sid_fp.reset(); sid_fp.reset();
sid_fp.clockSilent(16000);
} else { } else {
sid.reset(); sid.reset();
} }

View File

@ -61,7 +61,6 @@ const unsigned int EnvelopeGenerator::adsrtable[16] =
void EnvelopeGenerator::reset() void EnvelopeGenerator::reset()
{ {
// counter is not changed on reset
envelope_pipeline = 0; envelope_pipeline = 0;
state_pipeline = 0; state_pipeline = 0;
@ -73,7 +72,7 @@ void EnvelopeGenerator::reset()
gate = false; gate = false;
resetLfsr = true; resetLfsr = false;
exponential_counter = 0; exponential_counter = 0;
exponential_counter_period = 1; exponential_counter_period = 1;
@ -81,7 +80,11 @@ void EnvelopeGenerator::reset()
state = RELEASE; state = RELEASE;
counter_enabled = true; counter_enabled = true;
rate = adsrtable[release]; rate = 0;
envelope_counter = 0;
env3 = 0;
lfsr = 0x7fff;
} }
void EnvelopeGenerator::writeCONTROL_REG(unsigned char control) void EnvelopeGenerator::writeCONTROL_REG(unsigned char control)

View File

@ -146,7 +146,7 @@ public:
counter_enabled(true), counter_enabled(true),
gate(false), gate(false),
resetLfsr(false), resetLfsr(false),
envelope_counter(0xaa), envelope_counter(0),
attack(0), attack(0),
decay(0), decay(0),
sustain(0), sustain(0),