summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2017-06-26 22:54:23 -0400
committer AJR <ajrhacker@users.noreply.github.com>2017-06-26 22:54:23 -0400
commit431ede847028b37029c0f5824018129aa1af81b5 (patch)
tree67a3ae2c8dad7a1e69ab05fcce6dad442bb4b2bc
parentb6e896dab9b3f37e21be88bfc1fccf796765296d (diff)
okim6258, okim6376: Replace custom handlers with device_clock_changed (nw)
-rw-r--r--src/devices/sound/okim6258.cpp17
-rw-r--r--src/devices/sound/okim6258.h3
-rw-r--r--src/devices/sound/okim6376.cpp12
-rw-r--r--src/devices/sound/okim6376.h4
-rw-r--r--src/mame/drivers/x68k.cpp2
-rw-r--r--src/mame/machine/mpu4.cpp2
6 files changed, 13 insertions, 27 deletions
diff --git a/src/devices/sound/okim6258.cpp b/src/devices/sound/okim6258.cpp
index ac82ea267d9..491229a4e81 100644
--- a/src/devices/sound/okim6258.cpp
+++ b/src/devices/sound/okim6258.cpp
@@ -50,8 +50,7 @@ okim6258_device::okim6258_device(const machine_config &mconfig, const char *tag,
: device_t(mconfig, OKIM6258, tag, owner, clock),
device_sound_interface(mconfig, *this),
m_status(0),
- m_master_clock(0),
- m_divider(0),
+ m_divider(512),
m_adpcm_type(0),
m_data_in(0),
m_nibble_shift(0),
@@ -112,8 +111,6 @@ void okim6258_device::device_start()
{
compute_tables();
- m_master_clock = clock();
-
m_divider = dividers[m_start_divider];
m_stream = stream_alloc(0, 1, clock()/m_divider);
@@ -189,7 +186,6 @@ void okim6258_device::sound_stream_update(sound_stream &stream, stream_sample_t
void okim6258_device::state_save_register()
{
save_item(NAME(m_status));
- save_item(NAME(m_master_clock));
save_item(NAME(m_divider));
save_item(NAME(m_data_in));
save_item(NAME(m_nibble_shift));
@@ -231,10 +227,8 @@ int16_t okim6258_device::clock_adpcm(uint8_t nibble)
void okim6258_device::set_divider(int val)
{
- int divider = dividers[val];
-
m_divider = dividers[val];
- m_stream->set_sample_rate(m_master_clock / divider);
+ notify_clock_changed();
}
@@ -244,10 +238,9 @@ void okim6258_device::set_divider(int val)
***********************************************************************************************/
-void okim6258_device::set_clock(int val)
+void okim6258_device::device_clock_changed()
{
- m_master_clock = val;
- m_stream->set_sample_rate(m_master_clock / m_divider);
+ m_stream->set_sample_rate(clock() / m_divider);
}
@@ -259,7 +252,7 @@ void okim6258_device::set_clock(int val)
int okim6258_device::get_vclk()
{
- return (m_master_clock / m_divider);
+ return (clock() / m_divider);
}
diff --git a/src/devices/sound/okim6258.h b/src/devices/sound/okim6258.h
index 65313d8480d..ebaa9ed1559 100644
--- a/src/devices/sound/okim6258.h
+++ b/src/devices/sound/okim6258.h
@@ -58,13 +58,13 @@ public:
DECLARE_WRITE8_MEMBER( ctrl_w );
void set_divider(int val);
- void set_clock(int val);
int get_vclk();
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_clock_changed() override;
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -75,7 +75,6 @@ private:
uint8_t m_status;
- uint32_t m_master_clock; /* master clock frequency */
uint32_t m_start_divider;
uint32_t m_divider; /* master clock divider */
uint8_t m_adpcm_type; /* 3/4 bit ADPCM select */
diff --git a/src/devices/sound/okim6376.cpp b/src/devices/sound/okim6376.cpp
index 17adf11b49f..0446cf50eb4 100644
--- a/src/devices/sound/okim6376.cpp
+++ b/src/devices/sound/okim6376.cpp
@@ -120,8 +120,7 @@ okim6376_device::okim6376_device(const machine_config &mconfig, const char *tag,
m_latch(0),
//m_stage[OKIM6376_VOICES],
m_stream(nullptr),
- m_master_clock(0),
- m_divisor(0),
+ m_divisor(8),
m_channel(0),
m_nar(0),
m_nartimer(0),
@@ -148,7 +147,6 @@ void okim6376_device::device_start()
m_stage[0] = 0;
m_stage[1] = 0;
m_latch = 0;
- m_master_clock = clock();
m_divisor = divisor_table[0];
m_nar = 1;
m_nartimer = 0;
@@ -359,7 +357,7 @@ void okim6376_device::generate_adpcm(struct ADPCMVoice *voice, int16_t *buffer,
void okim6376_device::postload()
{
- set_frequency(m_master_clock);
+ notify_clock_changed();
}
void okim6376_device::adpcm_state_save_register(struct ADPCMVoice *voice, int index)
@@ -395,13 +393,11 @@ void okim6376_device::okim6376_state_save_register()
save_item(NAME(m_st_update));
save_item(NAME(m_ch2));
save_item(NAME(m_ch2_update));
- save_item(NAME(m_master_clock));
}
-void okim6376_device::set_frequency(int frequency)
+void okim6376_device::device_clock_changed()
{
- m_master_clock = frequency;
- m_stream->set_sample_rate(m_master_clock / m_divisor);
+ m_stream->set_sample_rate(clock() / m_divisor);
}
diff --git a/src/devices/sound/okim6376.h b/src/devices/sound/okim6376.h
index 7fe83bbf5a5..52760be23ca 100644
--- a/src/devices/sound/okim6376.h
+++ b/src/devices/sound/okim6376.h
@@ -21,12 +21,11 @@ public:
DECLARE_READ_LINE_MEMBER( busy_r );
DECLARE_READ_LINE_MEMBER( nar_r );
- void set_frequency(int frequency);
-
protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_clock_changed() override;
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override;
@@ -58,7 +57,6 @@ private:
int32_t m_latch; /* Command data is held before transferring to either channel */
uint8_t m_stage[OKIM6376_VOICES];/* If a sample is playing, flag that we have a command staged */
sound_stream *m_stream; /* which stream are we playing on? */
- uint32_t m_master_clock; /* master clock frequency */
uint8_t m_divisor; /* can be 8,10,16, and is read out of ROM data */
uint8_t m_channel;
uint8_t m_nar; /* Next Address Ready */
diff --git a/src/mame/drivers/x68k.cpp b/src/mame/drivers/x68k.cpp
index 0be83bea167..19da99f1a6e 100644
--- a/src/mame/drivers/x68k.cpp
+++ b/src/mame/drivers/x68k.cpp
@@ -728,7 +728,7 @@ WRITE8_MEMBER(x68k_state::x68k_ct_w)
m_adpcm.clock = data & 0x02;
x68k_set_adpcm();
- m_okim6258->set_clock(data & 0x02 ? 4000000 : 8000000);
+ m_okim6258->set_unscaled_clock(data & 0x02 ? 4000000 : 8000000);
}
/*
diff --git a/src/mame/machine/mpu4.cpp b/src/mame/machine/mpu4.cpp
index 6165b3f6d8c..d6718c4b4c3 100644
--- a/src/mame/machine/mpu4.cpp
+++ b/src/mame/machine/mpu4.cpp
@@ -1448,7 +1448,7 @@ WRITE8_MEMBER(mpu4_state::ic3ss_w)
if (freq)
{
- m_msm6376->set_frequency(freq);
+ m_msm6376->set_unscaled_clock(freq);
}
}