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






                                                                              

                             




































































































                                                                                                         
                                                                                                                             














                                                                         

                                                                                     

  
                               
// license:BSD-3-Clause
// copyright-holders:Acho A. Tang, Nicola Salmoria

//****************************************************************************
//    Functions to emulate the Alpha Denshi "59MC07" audio board
//****************************************************************************

#ifndef MAME_AUDIO_AD_SOUND_H
#define MAME_AUDIO_AD_SOUND_H

#pragma once

#include "cpu/i8085/i8085.h"
#include "machine/gen_latch.h"
#include "machine/i8155.h"
#include "sound/dac.h"
#include "sound/msm5232.h"
#include "sound/samples.h"


//**************************************************************************
//  GLOBAL VARIABLES
//**************************************************************************

DECLARE_DEVICE_TYPE(AD_59MC07, ad_59mc07_device)


//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************

// ======================> ad_59mc07_device

class ad_59mc07_device : public device_t
{
public:
	// construction/destruction
	ad_59mc07_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);

	void sound_command_w(uint8_t data) { m_soundlatch->write(data); }

protected:
	// device level overrides
	virtual void device_add_mconfig(machine_config &config) override;
	virtual void device_start() override;
	virtual void device_reset() override;

private:
	required_device<i8085a_cpu_device> m_audiocpu;
	required_device<i8155_device> m_audio8155;
	required_device<samples_device> m_samples;
	required_device<msm5232_device> m_msm;
	required_device<dac_byte_interface> m_dac_1;
	required_device<dac_byte_interface> m_dac_2;
	required_device<generic_latch_8_device> m_soundlatch;
	required_ioport m_frq_adjuster;

	int       m_sound_prom_address;
	uint8_t   m_dac_latch;
	uint8_t   m_8155_port_b;
	uint8_t   m_8155_port_a;
	uint8_t   m_8155_port_c;
	uint8_t   m_ay_port_a;
	uint8_t   m_ay_port_b;
	uint8_t   m_cymbal_ctrl;
	float     m_cymvol;
	float     m_hihatvol;
	emu_timer *m_adjuster_timer;

	void sound_map(address_map &map);
	void sound_portmap(address_map &map);

	void c0f8_w(offs_t offset, uint8_t data);
	void cymbal_ctrl_w(uint8_t data);
	void dac_latch_w(uint8_t data);
	void i8155_porta_w(uint8_t data);
	void i8155_portb_w(uint8_t data);
	void i8155_portc_w(uint8_t data);
	void ay8910_porta_w(uint8_t data);
	void ay8910_portb_w(uint8_t data);
	DECLARE_WRITE_LINE_MEMBER(i8155_timer_pulse);
	TIMER_CALLBACK_MEMBER(frq_adjuster_callback);
	void update_dac();
	DECLARE_WRITE_LINE_MEMBER(msm5232_gate);
};


//****************************************************************************
//    Functions to emulate the Alpha Denshi "60MC01" audio board
//****************************************************************************

//**************************************************************************
//  GLOBAL VARIABLES
//**************************************************************************

DECLARE_DEVICE_TYPE(AD_60MC01, ad_60mc01_device)


//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************

// ======================> ad_60mc01_device

class ad_60mc01_device : public device_t
{
public:
	// construction/destruction
	ad_60mc01_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0);

	static constexpr feature_type imperfect_features() { return feature::SOUND; } // TODO: fix interrupts, missing music?

	void sound_command_w(uint8_t data) { m_soundlatch->write(data); }

protected:
	// device level overrides
	virtual void device_add_mconfig(machine_config &config) override;
	virtual void device_start() override;
	virtual void device_reset() override;

private:
	required_device<cpu_device> m_audiocpu;
	required_device<generic_latch_8_device> m_soundlatch;

	void sound_map(address_map &map);
	void sound_portmap(address_map &map);

	INTERRUPT_GEN_MEMBER(sound_irq) { m_audiocpu->set_input_line(0, HOLD_LINE); }
};

#endif // MAME_AUDIO_AD_SOUND_H