diff --git a/src/engine/platform/ym2610.cpp b/src/engine/platform/ym2610.cpp index 75d9b8ba..cdce9e8f 100644 --- a/src/engine/platform/ym2610.cpp +++ b/src/engine/platform/ym2610.cpp @@ -70,7 +70,8 @@ void DivPlatformYM2610::tick() { } } if (chan[i].std.hadDuty) { - rWrite(0x06,31-chan[i].std.duty); + ayNoiseFreq=31-chan[i].std.duty; + rWrite(0x06,ayNoiseFreq); } if (chan[i].std.hadWave) { chan[i].psgMode=(chan[i].std.wave+1)&7; @@ -477,7 +478,8 @@ int DivPlatformYM2610::dispatch(DivCommand c) { break; case DIV_CMD_STD_NOISE_FREQ: if (c.chan<4 || c.chan>6) break; - rWrite(0x06,31-c.value); + ayNoiseFreq=31-c.value; + rWrite(0x06,ayNoiseFreq); break; case DIV_CMD_AY_ENVELOPE_SET: if (c.chan<4 || c.chan>6) break; @@ -600,11 +602,15 @@ void DivPlatformYM2610::reset() { ayEnvMode=0; ayEnvSlide=0; ayEnvSlideLow=0; + ayNoiseFreq=0; delay=0; extMode=false; + // AY noise + immWrite(0x06,ayNoiseFreq); + // LFO immWrite(0x22,0x08); diff --git a/src/engine/platform/ym2610.h b/src/engine/platform/ym2610.h index 94900ac0..0269a5b0 100644 --- a/src/engine/platform/ym2610.h +++ b/src/engine/platform/ym2610.h @@ -47,6 +47,7 @@ class DivPlatformYM2610: public DivDispatch { int dacRate; int dacPos; int dacSample; + int ayNoiseFreq; unsigned char sampleBank; int delay;