INLINE int tone23(pleiads_sound_state *state, int samplerate) { int level = VMAX - update_pb4(state, samplerate); int sum = 0; /* bit 5 = low: tone23 disabled */ if( (state->m_sound_latch_b & 0x20) == 0 ) return sum; /* modulate timers from the upper 556 with the voltage on Cxx on PB4. */ if( level < VMAX ) { state->m_tone2.counter -= state->m_tone2.max_freq * level / 32768; if( state->m_tone2.counter <= 0 ) { int n = (-state->m_tone2.counter / samplerate) + 1; state->m_tone2.counter += n * samplerate; state->m_tone2.output = (state->m_tone2.output + n) & 1; } state->m_tone3.counter -= state->m_tone3.max_freq*1/3 + state->m_tone3.max_freq*2/3 * level / 33768; if( state->m_tone3.counter <= 0 ) { int n = (-state->m_tone2.counter / samplerate) + 1; state->m_tone3.counter += samplerate; state->m_tone3.output = (state->m_tone3.output + n) & 1; } } sum += (state->m_tone2.output) ? VMAX : -VMAX; sum += (state->m_tone3.output) ? VMAX : -VMAX; return sum / 2; }
inline int pleiads_sound_device::tone23(int samplerate) { int level = VMAX - update_pb4(samplerate); int sum = 0; /* bit 5 = low: tone23 disabled */ if( (m_sound_latch_b & 0x20) == 0 ) return sum; /* modulate timers from the upper 556 with the voltage on Cxx on PB4. */ if( level < VMAX ) { m_tone2.counter -= m_tone2.max_freq * level / 32768; if( m_tone2.counter <= 0 ) { int n = (-m_tone2.counter / samplerate) + 1; m_tone2.counter += n * samplerate; m_tone2.output = (m_tone2.output + n) & 1; } m_tone3.counter -= m_tone3.max_freq*1/3 + m_tone3.max_freq*2/3 * level / 33768; if( m_tone3.counter <= 0 ) { int n = (-m_tone2.counter / samplerate) + 1; m_tone3.counter += samplerate; m_tone3.output = (m_tone3.output + n) & 1; } } sum += (m_tone2.output) ? VMAX : -VMAX; sum += (m_tone3.output) ? VMAX : -VMAX; return sum / 2; }
INLINE int tone23(int samplerate) { static int counter2, output2, counter3, output3; int level = VMAX - update_pb4(samplerate); int sum = 0; /* bit 5 = low: tone23 disabled */ if( (sound_latch_b & 0x20) == 0 ) return sum; /* modulate timers from the upper 556 with the voltage on Cxx on PB4. */ if( level < VMAX ) { counter2 -= tone2_max_freq * level / 32768; if( counter2 <= 0 ) { int n = (-counter2 / samplerate) + 1; counter2 += n * samplerate; output2 = (output2 + n) & 1; } counter3 -= tone3_max_freq*1/3 + tone3_max_freq*2/3 * level / 33768; if( counter3 <= 0 ) { int n = (-counter2 / samplerate) + 1; counter3 += samplerate; output3 = (output3 + n) & 1; } } sum += (output2) ? VMAX : -VMAX; sum += (output3) ? VMAX : -VMAX; return sum / 2; }