From a1dce66ca8721757da5a48719d0544893a7e90b3 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 11 Jan 2015 21:10:32 +0000 Subject: [PATCH 1/2] Proposed fix 1492 Nescaline crash when playing very high note --- plugins/nes/Nes.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/plugins/nes/Nes.cpp b/plugins/nes/Nes.cpp index b60f07a47..b1b6c4e5a 100644 --- a/plugins/nes/Nes.cpp +++ b/plugins/nes/Nes.cpp @@ -234,7 +234,7 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) // update framecounters m_ch1Counter++; - m_ch1Counter = m_ch1Counter % m_wlen1; + m_ch1Counter = m_wlen1 ? m_ch1Counter % m_wlen1 : 0; m_ch1EnvCounter++; if( m_ch1EnvCounter >= ch1EnvLen ) @@ -287,7 +287,7 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) // update framecounters m_ch2Counter++; - m_ch2Counter = m_ch2Counter % m_wlen2; + m_ch2Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0; m_ch2EnvCounter++; if( m_ch2EnvCounter >= ch2EnvLen ) @@ -310,13 +310,13 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) //////////////////////////////// // make sure we don't overflow - m_ch3Counter %= m_wlen3; + m_ch3Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0; // render triangle wave if( m_wlen3 <= m_maxWlen && ch3Enabled ) { ch3Level = static_cast( m_parent->m_ch3Volume.value() ); - ch3 = TRIANGLE_WAVETABLE[ ( m_ch3Counter * 32 ) / m_wlen3 ]; + ch3 = m_wlen3 ? TRIANGLE_WAVETABLE[ ( m_ch3Counter * 32 ) / m_wlen3 ] : 0; ch3 = ( ch3 * ch3Level ) / 15; } else ch3 = ch3Level = 0; From 49b3f36a5704ed6d998f15048633dc102f5e4f93 Mon Sep 17 00:00:00 2001 From: Dave French Date: Sun, 11 Jan 2015 21:23:30 +0000 Subject: [PATCH 2/2] 1492 fixed type on line 313 --- plugins/nes/Nes.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/nes/Nes.cpp b/plugins/nes/Nes.cpp index b1b6c4e5a..84f08c6b4 100644 --- a/plugins/nes/Nes.cpp +++ b/plugins/nes/Nes.cpp @@ -310,7 +310,7 @@ void NesObject::renderOutput( sampleFrame * buf, fpp_t frames ) //////////////////////////////// // make sure we don't overflow - m_ch3Counter = m_wlen2 ? m_ch2Counter % m_wlen2 : 0; + m_ch3Counter = m_wlen3 ? m_ch3Counter % m_wlen3 : 0; // render triangle wave if( m_wlen3 <= m_maxWlen && ch3Enabled )