mirror of
https://github.com/holub/mame
synced 2025-06-30 16:00:01 +03:00
Untangled gottlieb audio from the arcade driver, so it becomes available for pinball.
This commit is contained in:
parent
2b7bf5c0c7
commit
4c4c3b484c
1
.gitattributes
vendored
1
.gitattributes
vendored
@ -4462,6 +4462,7 @@ src/mame/audio/geebee.c svneol=native#text/plain
|
|||||||
src/mame/audio/gomoku.c svneol=native#text/plain
|
src/mame/audio/gomoku.c svneol=native#text/plain
|
||||||
src/mame/audio/gorf.c svneol=native#text/plain
|
src/mame/audio/gorf.c svneol=native#text/plain
|
||||||
src/mame/audio/gottlieb.c svneol=native#text/plain
|
src/mame/audio/gottlieb.c svneol=native#text/plain
|
||||||
|
src/mame/audio/gottlieb.h svneol=native#text/plain
|
||||||
src/mame/audio/gotya.c svneol=native#text/plain
|
src/mame/audio/gotya.c svneol=native#text/plain
|
||||||
src/mame/audio/grchamp.c svneol=native#text/plain
|
src/mame/audio/grchamp.c svneol=native#text/plain
|
||||||
src/mame/audio/gridlee.c svneol=native#text/plain
|
src/mame/audio/gridlee.c svneol=native#text/plain
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
// copyright-holders:Aaron Giles
|
// copyright-holders:Aaron Giles
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
|
|
||||||
gottlieb.h
|
gottlieb.c
|
||||||
|
|
||||||
Gottlieb 6502-based sound hardware implementations.
|
Gottlieb 6502-based sound hardware implementations.
|
||||||
|
|
||||||
@ -10,8 +10,7 @@
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
#include "audio/gottlieb.h"
|
||||||
#include "includes/gottlieb.h"
|
|
||||||
|
|
||||||
|
|
||||||
#define SOUND1_CLOCK XTAL_3_579545MHz
|
#define SOUND1_CLOCK XTAL_3_579545MHz
|
||||||
@ -247,46 +246,6 @@ MACHINE_CONFIG_END
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
|
||||||
// QBERT MECHANICAL KNOCKER
|
|
||||||
//**************************************************************************
|
|
||||||
|
|
||||||
//-------------------------------------------------
|
|
||||||
// qbert cabinets have a mechanical knocker near the floor,
|
|
||||||
// MAME simulates this with a sample.
|
|
||||||
// (like all MAME samples, it is optional. If you actually have
|
|
||||||
// a real kicker/knocker, hook it up via output "knocker0")
|
|
||||||
//-------------------------------------------------
|
|
||||||
|
|
||||||
void gottlieb_state::qbert_knocker(UINT8 knock)
|
|
||||||
{
|
|
||||||
output_set_value("knocker0", knock);
|
|
||||||
|
|
||||||
// start sound on rising edge
|
|
||||||
if (knock & ~m_knocker_prev)
|
|
||||||
m_knocker_sample->start(0, 0);
|
|
||||||
m_knocker_prev = knock;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const char *const qbert_knocker_names[] =
|
|
||||||
{
|
|
||||||
"*qbert",
|
|
||||||
"knocker",
|
|
||||||
0 /* end of array */
|
|
||||||
};
|
|
||||||
|
|
||||||
MACHINE_CONFIG_FRAGMENT( qbert_knocker )
|
|
||||||
MCFG_SPEAKER_ADD("knocker", 0.0, 0.0, 1.0)
|
|
||||||
|
|
||||||
MCFG_SOUND_ADD("knocker_sam", SAMPLES, 0)
|
|
||||||
MCFG_SAMPLES_CHANNELS(1)
|
|
||||||
MCFG_SAMPLES_NAMES(qbert_knocker_names)
|
|
||||||
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "knocker", 1.0)
|
|
||||||
MACHINE_CONFIG_END
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
// REV 1 SOUND BOARD: 6502 + DAC
|
// REV 1 SOUND BOARD: 6502 + DAC
|
||||||
//**************************************************************************
|
//**************************************************************************
|
||||||
|
193
src/mame/audio/gottlieb.h
Normal file
193
src/mame/audio/gottlieb.h
Normal file
@ -0,0 +1,193 @@
|
|||||||
|
// license:BSD-3-Clause
|
||||||
|
// copyright-holders:Aaron Giles
|
||||||
|
/***************************************************************************
|
||||||
|
|
||||||
|
Gottlieb hardware
|
||||||
|
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "cpu/m6502/m6502.h"
|
||||||
|
#include "machine/6532riot.h"
|
||||||
|
#include "sound/dac.h"
|
||||||
|
#include "sound/ay8910.h"
|
||||||
|
#include "sound/sp0250.h"
|
||||||
|
#include "sound/votrax.h"
|
||||||
|
|
||||||
|
|
||||||
|
// set to 0 to enable Votrax device and disable samples
|
||||||
|
#define USE_FAKE_VOTRAX (1)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// GLOBAL VARIABLES
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
extern const device_type GOTTLIEB_SOUND_REV1;
|
||||||
|
extern const device_type GOTTLIEB_SOUND_REV1_WITH_VOTRAX;
|
||||||
|
extern const device_type GOTTLIEB_SOUND_REV2;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// DEVICE CONFIGURATION MACROS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
#define MCFG_GOTTLIEB_SOUND_R1_ADD(_tag) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV1, 0)
|
||||||
|
#define MCFG_GOTTLIEB_SOUND_R1_ADD_VOTRAX(_tag) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV1_WITH_VOTRAX, 0)
|
||||||
|
|
||||||
|
#define MCFG_GOTTLIEB_SOUND_R2_ADD(_tag) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV2, 0)
|
||||||
|
#define MCFG_GOTTLIEB_SOUND_R2_ADD_COBRAM3(_tag) \
|
||||||
|
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV2, 0) \
|
||||||
|
gottlieb_sound_r2_device::static_enable_cobram3_mods(*device);
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// TYPE DEFINITIONS
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
// ======================> gottlieb_sound_r1_device
|
||||||
|
|
||||||
|
// rev 1 sound board, with unpopulated VOTRAX
|
||||||
|
class gottlieb_sound_r1_device : public device_t, public device_mixer_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
gottlieb_sound_r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
gottlieb_sound_r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock, bool populate_votrax);
|
||||||
|
|
||||||
|
// read/write
|
||||||
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
|
|
||||||
|
// internal communications
|
||||||
|
DECLARE_WRITE_LINE_MEMBER( snd_interrupt );
|
||||||
|
DECLARE_WRITE8_MEMBER( r6532_portb_w );
|
||||||
|
DECLARE_WRITE8_MEMBER( votrax_data_w );
|
||||||
|
DECLARE_WRITE8_MEMBER( speech_clock_dac_w );
|
||||||
|
DECLARE_WRITE_LINE_MEMBER( votrax_request );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
virtual ioport_constructor device_input_ports() const;
|
||||||
|
virtual void device_start();
|
||||||
|
|
||||||
|
private:
|
||||||
|
// devices
|
||||||
|
required_device<m6502_device> m_audiocpu;
|
||||||
|
required_device<riot6532_device> m_riot;
|
||||||
|
required_device<dac_device> m_dac;
|
||||||
|
optional_device<votrax_sc01_device> m_votrax;
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
//bool m_populate_votrax;
|
||||||
|
UINT8 m_last_speech_clock;
|
||||||
|
|
||||||
|
#if USE_FAKE_VOTRAX
|
||||||
|
protected:
|
||||||
|
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||||
|
private:
|
||||||
|
void fake_votrax_data_w(UINT8 data);
|
||||||
|
void trigger_sample(UINT8 data);
|
||||||
|
optional_device<samples_device> m_samples;
|
||||||
|
UINT8 m_score_sample;
|
||||||
|
UINT8 m_random_offset;
|
||||||
|
UINT8 m_votrax_queue[100];
|
||||||
|
UINT8 m_votrax_queuepos;
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
// fully populated rev 1 sound board
|
||||||
|
class gottlieb_sound_r1_with_votrax_device : public gottlieb_sound_r1_device
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
gottlieb_sound_r1_with_votrax_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
virtual ioport_constructor device_input_ports() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
// ======================> gottlieb_sound_r2_device
|
||||||
|
|
||||||
|
// fully populated rev 2 sound board
|
||||||
|
class gottlieb_sound_r2_device : public device_t, public device_mixer_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// construction/destruction
|
||||||
|
gottlieb_sound_r2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
||||||
|
|
||||||
|
// static configuration helpers
|
||||||
|
static void static_enable_cobram3_mods(device_t &device);
|
||||||
|
|
||||||
|
// read/write
|
||||||
|
DECLARE_WRITE8_MEMBER( write );
|
||||||
|
|
||||||
|
// internal communications
|
||||||
|
DECLARE_READ8_MEMBER( speech_data_r );
|
||||||
|
DECLARE_READ8_MEMBER( audio_data_r );
|
||||||
|
DECLARE_WRITE8_MEMBER( signal_audio_nmi_w );
|
||||||
|
DECLARE_WRITE8_MEMBER( nmi_rate_w );
|
||||||
|
CUSTOM_INPUT_MEMBER( speech_drq_custom_r );
|
||||||
|
DECLARE_WRITE8_MEMBER( dac_w );
|
||||||
|
DECLARE_WRITE8_MEMBER( speech_control_w );
|
||||||
|
DECLARE_WRITE8_MEMBER( sp0250_latch_w );
|
||||||
|
DECLARE_WRITE8_MEMBER( psg_latch_w );
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// device-level overrides
|
||||||
|
virtual machine_config_constructor device_mconfig_additions() const;
|
||||||
|
virtual ioport_constructor device_input_ports() const;
|
||||||
|
virtual void device_start();
|
||||||
|
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
// internal helpers
|
||||||
|
void nmi_timer_adjust();
|
||||||
|
void nmi_state_update();
|
||||||
|
|
||||||
|
// timer IDs
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
TID_NMI_GENERATE,
|
||||||
|
TID_NMI_CLEAR,
|
||||||
|
TID_SOUND_LATCH_WRITE
|
||||||
|
};
|
||||||
|
|
||||||
|
// devices
|
||||||
|
required_device<m6502_device> m_audiocpu;
|
||||||
|
required_device<m6502_device> m_speechcpu;
|
||||||
|
required_device<dac_device> m_dac;
|
||||||
|
required_device<ay8913_device> m_ay1;
|
||||||
|
required_device<ay8913_device> m_ay2;
|
||||||
|
optional_device<sp0250_device> m_sp0250;
|
||||||
|
|
||||||
|
// internal state
|
||||||
|
bool m_cobram3_mod;
|
||||||
|
emu_timer * m_nmi_timer;
|
||||||
|
UINT8 m_nmi_rate;
|
||||||
|
UINT8 m_nmi_state;
|
||||||
|
UINT8 m_audiocpu_latch;
|
||||||
|
UINT8 m_speechcpu_latch;
|
||||||
|
UINT8 m_speech_control;
|
||||||
|
UINT8 m_last_command;
|
||||||
|
UINT8 m_dac_data[2];
|
||||||
|
UINT8 m_psg_latch;
|
||||||
|
UINT8 m_psg_data_latch;
|
||||||
|
UINT8 m_sp0250_latch;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/*----------- defined in audio/gottlieb.c -----------*/
|
||||||
|
|
||||||
|
#if USE_FAKE_VOTRAX
|
||||||
|
MACHINE_CONFIG_EXTERN( reactor_samples );
|
||||||
|
MACHINE_CONFIG_EXTERN( qbert_samples );
|
||||||
|
#endif
|
@ -194,13 +194,8 @@ VBlank duration: 1/VSYNC * (16/256) = 1017.6 us
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "machine/6532riot.h"
|
|
||||||
#include "sound/ay8910.h"
|
|
||||||
#include "sound/dac.h"
|
|
||||||
#include "sound/samples.h"
|
|
||||||
#include "machine/nvram.h"
|
|
||||||
#include "includes/gottlieb.h"
|
#include "includes/gottlieb.h"
|
||||||
|
#include "machine/nvram.h"
|
||||||
|
|
||||||
|
|
||||||
#define LOG_AUDIO_DECODE (0)
|
#define LOG_AUDIO_DECODE (0)
|
||||||
@ -642,6 +637,46 @@ void gottlieb_state::laserdisc_audio_process(laserdisc_device &device, int sampl
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//**************************************************************************
|
||||||
|
// QBERT MECHANICAL KNOCKER
|
||||||
|
//**************************************************************************
|
||||||
|
|
||||||
|
//-------------------------------------------------
|
||||||
|
// qbert cabinets have a mechanical knocker near the floor,
|
||||||
|
// MAME simulates this with a sample.
|
||||||
|
// (like all MAME samples, it is optional. If you actually have
|
||||||
|
// a real kicker/knocker, hook it up via output "knocker0")
|
||||||
|
//-------------------------------------------------
|
||||||
|
|
||||||
|
void gottlieb_state::qbert_knocker(UINT8 knock)
|
||||||
|
{
|
||||||
|
output_set_value("knocker0", knock);
|
||||||
|
|
||||||
|
// start sound on rising edge
|
||||||
|
if (knock & ~m_knocker_prev)
|
||||||
|
m_knocker_sample->start(0, 0);
|
||||||
|
m_knocker_prev = knock;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const char *const qbert_knocker_names[] =
|
||||||
|
{
|
||||||
|
"*qbert",
|
||||||
|
"knocker",
|
||||||
|
0 /* end of array */
|
||||||
|
};
|
||||||
|
|
||||||
|
MACHINE_CONFIG_FRAGMENT( qbert_knocker )
|
||||||
|
MCFG_SPEAKER_ADD("knocker", 0.0, 0.0, 1.0)
|
||||||
|
|
||||||
|
MCFG_SOUND_ADD("knocker_sam", SAMPLES, 0)
|
||||||
|
MCFG_SAMPLES_CHANNELS(1)
|
||||||
|
MCFG_SAMPLES_NAMES(qbert_knocker_names)
|
||||||
|
MCFG_SOUND_ROUTE(ALL_OUTPUTS, "knocker", 1.0)
|
||||||
|
MACHINE_CONFIG_END
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*************************************
|
/*************************************
|
||||||
*
|
*
|
||||||
* Interrupt generation
|
* Interrupt generation
|
||||||
|
@ -6,192 +6,20 @@
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include "emu.h"
|
||||||
|
#include "audio/gottlieb.h"
|
||||||
#include "cpu/i86/i86.h"
|
#include "cpu/i86/i86.h"
|
||||||
#include "cpu/m6502/m6502.h"
|
#include "cpu/m6502/m6502.h"
|
||||||
#include "machine/6532riot.h"
|
|
||||||
#include "sound/dac.h"
|
|
||||||
#include "sound/ay8910.h"
|
|
||||||
#include "sound/sp0250.h"
|
|
||||||
#include "sound/samples.h"
|
#include "sound/samples.h"
|
||||||
#include "sound/votrax.h"
|
|
||||||
#include "machine/ldpr8210.h"
|
#include "machine/ldpr8210.h"
|
||||||
|
|
||||||
|
|
||||||
// set to 0 to enable Votrax device and disable samples
|
|
||||||
#define USE_FAKE_VOTRAX (1)
|
|
||||||
|
|
||||||
|
|
||||||
#define GOTTLIEB_VIDEO_HCOUNT 318
|
#define GOTTLIEB_VIDEO_HCOUNT 318
|
||||||
#define GOTTLIEB_VIDEO_HBLANK 256
|
#define GOTTLIEB_VIDEO_HBLANK 256
|
||||||
#define GOTTLIEB_VIDEO_VCOUNT 256
|
#define GOTTLIEB_VIDEO_VCOUNT 256
|
||||||
#define GOTTLIEB_VIDEO_VBLANK 240
|
#define GOTTLIEB_VIDEO_VBLANK 240
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
|
||||||
// GLOBAL VARIABLES
|
|
||||||
//**************************************************************************
|
|
||||||
|
|
||||||
extern const device_type GOTTLIEB_SOUND_REV1;
|
|
||||||
extern const device_type GOTTLIEB_SOUND_REV1_WITH_VOTRAX;
|
|
||||||
extern const device_type GOTTLIEB_SOUND_REV2;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
|
||||||
// DEVICE CONFIGURATION MACROS
|
|
||||||
//**************************************************************************
|
|
||||||
|
|
||||||
#define MCFG_GOTTLIEB_SOUND_R1_ADD(_tag) \
|
|
||||||
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV1, 0)
|
|
||||||
#define MCFG_GOTTLIEB_SOUND_R1_ADD_VOTRAX(_tag) \
|
|
||||||
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV1_WITH_VOTRAX, 0)
|
|
||||||
|
|
||||||
#define MCFG_GOTTLIEB_SOUND_R2_ADD(_tag) \
|
|
||||||
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV2, 0)
|
|
||||||
#define MCFG_GOTTLIEB_SOUND_R2_ADD_COBRAM3(_tag) \
|
|
||||||
MCFG_DEVICE_ADD(_tag, GOTTLIEB_SOUND_REV2, 0) \
|
|
||||||
gottlieb_sound_r2_device::static_enable_cobram3_mods(*device);
|
|
||||||
|
|
||||||
|
|
||||||
//**************************************************************************
|
|
||||||
// TYPE DEFINITIONS
|
|
||||||
//**************************************************************************
|
|
||||||
|
|
||||||
// ======================> gottlieb_sound_r1_device
|
|
||||||
|
|
||||||
// rev 1 sound board, with unpopulated VOTRAX
|
|
||||||
class gottlieb_sound_r1_device : public device_t,
|
|
||||||
public device_mixer_interface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// construction/destruction
|
|
||||||
gottlieb_sound_r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
gottlieb_sound_r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock, bool populate_votrax);
|
|
||||||
|
|
||||||
// read/write
|
|
||||||
DECLARE_WRITE8_MEMBER( write );
|
|
||||||
|
|
||||||
// internal communications
|
|
||||||
DECLARE_WRITE_LINE_MEMBER( snd_interrupt );
|
|
||||||
DECLARE_WRITE8_MEMBER( r6532_portb_w );
|
|
||||||
DECLARE_WRITE8_MEMBER( votrax_data_w );
|
|
||||||
DECLARE_WRITE8_MEMBER( speech_clock_dac_w );
|
|
||||||
DECLARE_WRITE_LINE_MEMBER( votrax_request );
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// device-level overrides
|
|
||||||
virtual machine_config_constructor device_mconfig_additions() const;
|
|
||||||
virtual ioport_constructor device_input_ports() const;
|
|
||||||
virtual void device_start();
|
|
||||||
|
|
||||||
private:
|
|
||||||
// devices
|
|
||||||
required_device<m6502_device> m_audiocpu;
|
|
||||||
required_device<riot6532_device> m_riot;
|
|
||||||
required_device<dac_device> m_dac;
|
|
||||||
optional_device<votrax_sc01_device> m_votrax;
|
|
||||||
|
|
||||||
// internal state
|
|
||||||
//bool m_populate_votrax;
|
|
||||||
UINT8 m_last_speech_clock;
|
|
||||||
|
|
||||||
#if USE_FAKE_VOTRAX
|
|
||||||
protected:
|
|
||||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
|
||||||
private:
|
|
||||||
void fake_votrax_data_w(UINT8 data);
|
|
||||||
void trigger_sample(UINT8 data);
|
|
||||||
optional_device<samples_device> m_samples;
|
|
||||||
UINT8 m_score_sample;
|
|
||||||
UINT8 m_random_offset;
|
|
||||||
UINT8 m_votrax_queue[100];
|
|
||||||
UINT8 m_votrax_queuepos;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
// fully populated rev 1 sound board
|
|
||||||
class gottlieb_sound_r1_with_votrax_device : public gottlieb_sound_r1_device
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// construction/destruction
|
|
||||||
gottlieb_sound_r1_with_votrax_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// device-level overrides
|
|
||||||
virtual machine_config_constructor device_mconfig_additions() const;
|
|
||||||
virtual ioport_constructor device_input_ports() const;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> gottlieb_sound_r2_device
|
|
||||||
|
|
||||||
// fully populated rev 2 sound board
|
|
||||||
class gottlieb_sound_r2_device : public device_t,
|
|
||||||
public device_mixer_interface
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// construction/destruction
|
|
||||||
gottlieb_sound_r2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
|
|
||||||
|
|
||||||
// static configuration helpers
|
|
||||||
static void static_enable_cobram3_mods(device_t &device);
|
|
||||||
|
|
||||||
// read/write
|
|
||||||
DECLARE_WRITE8_MEMBER( write );
|
|
||||||
|
|
||||||
// internal communications
|
|
||||||
DECLARE_READ8_MEMBER( speech_data_r );
|
|
||||||
DECLARE_READ8_MEMBER( audio_data_r );
|
|
||||||
DECLARE_WRITE8_MEMBER( signal_audio_nmi_w );
|
|
||||||
DECLARE_WRITE8_MEMBER( nmi_rate_w );
|
|
||||||
CUSTOM_INPUT_MEMBER( speech_drq_custom_r );
|
|
||||||
DECLARE_WRITE8_MEMBER( dac_w );
|
|
||||||
DECLARE_WRITE8_MEMBER( speech_control_w );
|
|
||||||
DECLARE_WRITE8_MEMBER( sp0250_latch_w );
|
|
||||||
DECLARE_WRITE8_MEMBER( psg_latch_w );
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// device-level overrides
|
|
||||||
virtual machine_config_constructor device_mconfig_additions() const;
|
|
||||||
virtual ioport_constructor device_input_ports() const;
|
|
||||||
virtual void device_start();
|
|
||||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
|
||||||
|
|
||||||
private:
|
|
||||||
// internal helpers
|
|
||||||
void nmi_timer_adjust();
|
|
||||||
void nmi_state_update();
|
|
||||||
|
|
||||||
// timer IDs
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
TID_NMI_GENERATE,
|
|
||||||
TID_NMI_CLEAR,
|
|
||||||
TID_SOUND_LATCH_WRITE
|
|
||||||
};
|
|
||||||
|
|
||||||
// devices
|
|
||||||
required_device<m6502_device> m_audiocpu;
|
|
||||||
required_device<m6502_device> m_speechcpu;
|
|
||||||
required_device<dac_device> m_dac;
|
|
||||||
required_device<ay8913_device> m_ay1;
|
|
||||||
required_device<ay8913_device> m_ay2;
|
|
||||||
optional_device<sp0250_device> m_sp0250;
|
|
||||||
|
|
||||||
// internal state
|
|
||||||
bool m_cobram3_mod;
|
|
||||||
emu_timer * m_nmi_timer;
|
|
||||||
UINT8 m_nmi_rate;
|
|
||||||
UINT8 m_nmi_state;
|
|
||||||
UINT8 m_audiocpu_latch;
|
|
||||||
UINT8 m_speechcpu_latch;
|
|
||||||
UINT8 m_speech_control;
|
|
||||||
UINT8 m_last_command;
|
|
||||||
UINT8 m_dac_data[2];
|
|
||||||
UINT8 m_psg_latch;
|
|
||||||
UINT8 m_psg_data_latch;
|
|
||||||
UINT8 m_sp0250_latch;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
// ======================> gottlieb_state
|
// ======================> gottlieb_state
|
||||||
@ -311,12 +139,3 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*----------- defined in audio/gottlieb.c -----------*/
|
|
||||||
|
|
||||||
MACHINE_CONFIG_EXTERN( qbert_knocker );
|
|
||||||
|
|
||||||
#if USE_FAKE_VOTRAX
|
|
||||||
MACHINE_CONFIG_EXTERN( reactor_samples );
|
|
||||||
MACHINE_CONFIG_EXTERN( qbert_samples );
|
|
||||||
#endif
|
|
||||||
|
@ -4,7 +4,6 @@
|
|||||||
|
|
||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "emu.h"
|
|
||||||
#include "includes/gottlieb.h"
|
#include "includes/gottlieb.h"
|
||||||
#include "video/resnet.h"
|
#include "video/resnet.h"
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user