Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}