mirror of
https://github.com/tildearrow/furnace.git
synced 2024-11-16 01:35:07 +00:00
OPM: if the LFO rate is 0, don't clock the counter
This commit is contained in:
parent
78cd99af32
commit
e1b77d7e2b
1 changed files with 8 additions and 1 deletions
|
@ -87,6 +87,8 @@ void opm_registers::reset()
|
||||||
{
|
{
|
||||||
std::fill_n(&m_regdata[0], REGISTERS, 0);
|
std::fill_n(&m_regdata[0], REGISTERS, 0);
|
||||||
|
|
||||||
|
m_lfo_counter = 0;
|
||||||
|
|
||||||
// enable output on both channels by default
|
// enable output on both channels by default
|
||||||
m_regdata[0x20] = m_regdata[0x21] = m_regdata[0x22] = m_regdata[0x23] = 0xc0;
|
m_regdata[0x20] = m_regdata[0x21] = m_regdata[0x22] = m_regdata[0x23] = 0xc0;
|
||||||
m_regdata[0x24] = m_regdata[0x25] = m_regdata[0x26] = m_regdata[0x27] = 0xc0;
|
m_regdata[0x24] = m_regdata[0x25] = m_regdata[0x26] = m_regdata[0x27] = 0xc0;
|
||||||
|
@ -195,8 +197,13 @@ int32_t opm_registers::clock_noise_and_lfo()
|
||||||
// treat the rate as a 4.4 floating-point step value with implied
|
// treat the rate as a 4.4 floating-point step value with implied
|
||||||
// leading 1; this matches exactly the frequencies in the application
|
// leading 1; this matches exactly the frequencies in the application
|
||||||
// manual, though it might not be implemented exactly this way on chip
|
// manual, though it might not be implemented exactly this way on chip
|
||||||
|
// note from tildearrow:
|
||||||
|
// - in fact it doesn't. the strings in Scherzo Di Notte totally go out
|
||||||
|
// tune after a bit (and this doesn't happen in Nuked-OPM).
|
||||||
uint32_t rate = lfo_rate();
|
uint32_t rate = lfo_rate();
|
||||||
m_lfo_counter += (0x10 | bitfield(rate, 0, 4)) << bitfield(rate, 4, 4);
|
if (rate != 0) {
|
||||||
|
m_lfo_counter += (0x10 | bitfield(rate, 0, 4)) << bitfield(rate, 4, 4);
|
||||||
|
}
|
||||||
|
|
||||||
// bit 1 of the test register is officially undocumented but has been
|
// bit 1 of the test register is officially undocumented but has been
|
||||||
// discovered to hold the LFO in reset while active
|
// discovered to hold the LFO in reset while active
|
||||||
|
|
Loading…
Reference in a new issue