summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/audio/snk6502.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/audio/snk6502.h')
-rw-r--r--src/mame/audio/snk6502.h148
1 files changed, 127 insertions, 21 deletions
diff --git a/src/mame/audio/snk6502.h b/src/mame/audio/snk6502.h
index 32869b1c5da..ce7be05119f 100644
--- a/src/mame/audio/snk6502.h
+++ b/src/mame/audio/snk6502.h
@@ -19,16 +19,20 @@ class snk6502_sound_device : public device_t, public device_sound_interface
public:
snk6502_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
- DECLARE_WRITE8_MEMBER( sasuke_sound_w );
- DECLARE_WRITE8_MEMBER( satansat_sound_w );
- DECLARE_WRITE8_MEMBER( vanguard_sound_w );
- DECLARE_WRITE8_MEMBER( vanguard_speech_w );
- DECLARE_WRITE8_MEMBER( fantasy_sound_w );
- DECLARE_WRITE8_MEMBER( fantasy_speech_w );
+ DECLARE_CUSTOM_INPUT_MEMBER(music0_playing);
- void set_music_clock(double clock_time);
void set_music_freq(int freq);
- int music0_playing();
+ void set_music_clock(double clock_time);
+ void set_channel_base(int channel, int base, int mask = 0xff);
+ void mute_channel(int channel);
+ void unmute_channel(int channel);
+ void set_sound0_stop_on_rollover(int value) { m_sound0_stop_on_rollover = value; }
+
+ void speech_w(uint8_t data, const uint16_t *table, int start);
+
+ void build_waveform(int channel, int mask);
+ void sasuke_build_waveform(int mask);
+ void satansat_build_waveform(int mask);
protected:
// device-level overrides
@@ -58,31 +62,133 @@ private:
int32_t m_tone_clock;
sound_stream * m_tone_stream;
- optional_device<sn76477_device> m_sn76477_2;
- optional_device<discrete_device> m_discrete;
optional_device<samples_device> m_samples;
required_memory_region m_rom;
int m_sound0_stop_on_rollover;
- uint8_t m_last_port1;
int m_hd38880_cmd;
uint32_t m_hd38880_addr;
int m_hd38880_data_bytes;
double m_hd38880_speed;
- inline void validate_tone_channel(int channel);
- void sasuke_build_waveform(int mask);
- void satansat_build_waveform(int mask);
- void build_waveform(int channel, int mask);
- void speech_w(uint8_t data, const uint16_t *table, int start);
+ void validate_tone_channel(int channel);
+};
+
+
+class vanguard_sound_device : public device_t
+{
+public:
+ vanguard_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_WRITE8_MEMBER( sound_w );
+ DECLARE_WRITE8_MEMBER( speech_w );
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ required_device<snk6502_sound_device> m_custom;
+ required_device<sn76477_device> m_sn76477_2;
+ required_device<samples_device> m_samples;
+
+ uint8_t m_last_port1;
+};
+
+
+class fantasy_sound_device : public device_t
+{
+public:
+ fantasy_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_WRITE8_MEMBER( sound_w );
+ DECLARE_WRITE8_MEMBER( speech_w );
+
+protected:
+ fantasy_sound_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
+
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+ required_device<snk6502_sound_device> m_custom;
+
+private:
+ required_device<discrete_device> m_discrete;
+
+ uint8_t m_last_port1;
+};
+
+
+class nibbler_sound_device : public fantasy_sound_device
+{
+public:
+ nibbler_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+};
+
+
+class pballoon_sound_device : public fantasy_sound_device
+{
+public:
+ pballoon_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_reset() override;
+};
+
+
+class sasuke_sound_device : public device_t
+{
+public:
+ sasuke_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_WRITE8_MEMBER(sound_w);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ required_device<snk6502_sound_device> m_custom;
+ required_device<samples_device> m_samples;
+
+ uint8_t m_last_port1;
+};
+
+
+class satansat_sound_device : public device_t
+{
+public:
+ satansat_sound_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
+
+ DECLARE_WRITE8_MEMBER(sound_w);
+
+protected:
+ virtual void device_add_mconfig(machine_config &config) override;
+ virtual void device_start() override;
+ virtual void device_reset() override;
+
+private:
+ required_device<snk6502_sound_device> m_custom;
+ required_device<samples_device> m_samples;
+
+ uint8_t m_last_port1;
};
-DECLARE_DEVICE_TYPE(SNK6502, snk6502_sound_device)
-DISCRETE_SOUND_EXTERN( fantasy_discrete );
+DECLARE_DEVICE_TYPE(SNK6502_SOUND, snk6502_sound_device)
-extern char const *const sasuke_sample_names[];
-extern char const *const vanguard_sample_names[];
-extern char const *const fantasy_sample_names[];
+DECLARE_DEVICE_TYPE(VANGUARD_SOUND, vanguard_sound_device)
+DECLARE_DEVICE_TYPE(FANTASY_SOUND, fantasy_sound_device)
+DECLARE_DEVICE_TYPE(NIBBLER_SOUND, nibbler_sound_device)
+DECLARE_DEVICE_TYPE(PBALLOON_SOUND, pballoon_sound_device)
+DECLARE_DEVICE_TYPE(SASUKE_SOUND, sasuke_sound_device)
+DECLARE_DEVICE_TYPE(SATANSAT_SOUND, satansat_sound_device)
#endif // MAME_AUDIO_SNK6502_H