summaryrefslogblamecommitdiffstatshomepage
path: root/src/mame/audio/pleiads.h
blob: 4a6f34dfdb173e820b327738bdaee03cc3ec1ef3 (plain) (tree)
1
2
3
4
5
6
7
8
9

                                        

                            
 
            
 
                          
 
                                                                           

       
                                                                                                                  
 


                                             
 
          





























                                                                                                                                
                                 
                                             

                                        
                                                                                                                                          
 









                                                
 
                         






                                                                  
                                             


















                               

  



                                                         
                                                                                                                   
 

                                 
                                             

                                        
                                                                                                                                          

  



                                                         

                                                                                                                   

                                 
                                             

                                        
                                                                                                                                          

  



                                                          

                              
// license:GPL-2.0+
// copyright-holders:Juergen Buchmueller
#ifndef MAME_AUDIO_PLEIADS_H
#define MAME_AUDIO_PLEIADS_H

#pragma once

#include "sound/tms36xx.h"

class pleiads_sound_device : public device_t, public device_sound_interface
{
public:
	pleiads_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);

	DECLARE_WRITE8_MEMBER( control_a_w );
	DECLARE_WRITE8_MEMBER( control_b_w );
	DECLARE_WRITE8_MEMBER( control_c_w );

protected:
	struct pl_t_state
	{
		pl_t_state() { }

		int counter = 0;
		int output = 0;
		int max_freq = 0;
	};

	struct pl_c_state
	{
		pl_c_state() { }

		int counter = 0;
		int level = 0;
		double charge_time = 0;
		double discharge_time = 0;
	};

	struct pl_n_state
	{
		pl_n_state() { }

		int counter = 0;
		int polyoffs = 0;
		int freq = 0;
	};

	pleiads_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);

	// device-level overrides
	virtual void device_start() override;

	// sound stream update overrides
	virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;

	void common_start();
	inline int tone1(int samplerate);
	inline int update_pb4(int samplerate);
	inline int tone23(int samplerate);
	inline int update_c_pc4(int samplerate);
	inline int update_c_pc5(int samplerate);
	inline int update_c_pa5(int samplerate);
	inline int tone4(int samplerate);
	inline int update_c_pa6(int samplerate);
	inline int noise(int samplerate);

	// internal state
	tms36xx_device *m_tms;
	sound_stream *m_channel;

	int m_sound_latch_a;
	int m_sound_latch_b;
	int m_sound_latch_c;    /* part of the videoreg_w latch */

	std::unique_ptr<uint32_t[]> m_poly18;
	int m_polybit;

	pl_t_state m_tone1;
	pl_t_state m_tone2;
	pl_t_state m_tone3;
	pl_t_state m_tone4;

	pl_c_state m_pa5;
	pl_c_state m_pa6;
	pl_c_state m_pb4;
	pl_c_state m_pc4;
	pl_c_state m_pc5;

	pl_n_state m_noise;

	int m_pa5_resistor;
	int m_pc5_resistor;
	int m_polybit_resistor;
	int m_opamp_resistor;
};


class naughtyb_sound_device : public pleiads_sound_device
{
public:
	naughtyb_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);

protected:
	// device-level overrides
	virtual void device_start() override;

	// sound stream update overrides
	virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
};


class popflame_sound_device : public pleiads_sound_device
{
public:
	popflame_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);

protected:
	// device-level overrides
	virtual void device_start() override;

	// sound stream update overrides
	virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
};


DECLARE_DEVICE_TYPE(PLEIADS_SOUND, pleiads_sound_device)
DECLARE_DEVICE_TYPE(NAUGHTYB_SOUND, naughtyb_sound_device)
DECLARE_DEVICE_TYPE(POPFLAME_SOUND, popflame_sound_device)

#endif // MAME_AUDIO_PLEIADS_H