okim6258, okim6376: Replace custom handlers with device_clock_changed (nw)

This commit is contained in:
AJR 2017-06-26 22:54:23 -04:00
parent b6e896dab9
commit 431ede8470
6 changed files with 13 additions and 27 deletions

View File

@ -50,8 +50,7 @@ okim6258_device::okim6258_device(const machine_config &mconfig, const char *tag,
: device_t(mconfig, OKIM6258, tag, owner, clock), : device_t(mconfig, OKIM6258, tag, owner, clock),
device_sound_interface(mconfig, *this), device_sound_interface(mconfig, *this),
m_status(0), m_status(0),
m_master_clock(0), m_divider(512),
m_divider(0),
m_adpcm_type(0), m_adpcm_type(0),
m_data_in(0), m_data_in(0),
m_nibble_shift(0), m_nibble_shift(0),
@ -112,8 +111,6 @@ void okim6258_device::device_start()
{ {
compute_tables(); compute_tables();
m_master_clock = clock();
m_divider = dividers[m_start_divider]; m_divider = dividers[m_start_divider];
m_stream = stream_alloc(0, 1, clock()/m_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() void okim6258_device::state_save_register()
{ {
save_item(NAME(m_status)); save_item(NAME(m_status));
save_item(NAME(m_master_clock));
save_item(NAME(m_divider)); save_item(NAME(m_divider));
save_item(NAME(m_data_in)); save_item(NAME(m_data_in));
save_item(NAME(m_nibble_shift)); 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) void okim6258_device::set_divider(int val)
{ {
int divider = dividers[val];
m_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(clock() / m_divider);
m_stream->set_sample_rate(m_master_clock / m_divider);
} }
@ -259,7 +252,7 @@ void okim6258_device::set_clock(int val)
int okim6258_device::get_vclk() int okim6258_device::get_vclk()
{ {
return (m_master_clock / m_divider); return (clock() / m_divider);
} }

View File

@ -58,13 +58,13 @@ public:
DECLARE_WRITE8_MEMBER( ctrl_w ); DECLARE_WRITE8_MEMBER( ctrl_w );
void set_divider(int val); void set_divider(int val);
void set_clock(int val);
int get_vclk(); int get_vclk();
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_clock_changed() override;
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; 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; uint8_t m_status;
uint32_t m_master_clock; /* master clock frequency */
uint32_t m_start_divider; uint32_t m_start_divider;
uint32_t m_divider; /* master clock divider */ uint32_t m_divider; /* master clock divider */
uint8_t m_adpcm_type; /* 3/4 bit ADPCM select */ uint8_t m_adpcm_type; /* 3/4 bit ADPCM select */

View File

@ -120,8 +120,7 @@ okim6376_device::okim6376_device(const machine_config &mconfig, const char *tag,
m_latch(0), m_latch(0),
//m_stage[OKIM6376_VOICES], //m_stage[OKIM6376_VOICES],
m_stream(nullptr), m_stream(nullptr),
m_master_clock(0), m_divisor(8),
m_divisor(0),
m_channel(0), m_channel(0),
m_nar(0), m_nar(0),
m_nartimer(0), m_nartimer(0),
@ -148,7 +147,6 @@ void okim6376_device::device_start()
m_stage[0] = 0; m_stage[0] = 0;
m_stage[1] = 0; m_stage[1] = 0;
m_latch = 0; m_latch = 0;
m_master_clock = clock();
m_divisor = divisor_table[0]; m_divisor = divisor_table[0];
m_nar = 1; m_nar = 1;
m_nartimer = 0; m_nartimer = 0;
@ -359,7 +357,7 @@ void okim6376_device::generate_adpcm(struct ADPCMVoice *voice, int16_t *buffer,
void okim6376_device::postload() void okim6376_device::postload()
{ {
set_frequency(m_master_clock); notify_clock_changed();
} }
void okim6376_device::adpcm_state_save_register(struct ADPCMVoice *voice, int index) 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_st_update));
save_item(NAME(m_ch2)); save_item(NAME(m_ch2));
save_item(NAME(m_ch2_update)); 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(clock() / m_divisor);
m_stream->set_sample_rate(m_master_clock / m_divisor);
} }

View File

@ -21,12 +21,11 @@ public:
DECLARE_READ_LINE_MEMBER( busy_r ); DECLARE_READ_LINE_MEMBER( busy_r );
DECLARE_READ_LINE_MEMBER( nar_r ); DECLARE_READ_LINE_MEMBER( nar_r );
void set_frequency(int frequency);
protected: protected:
// device-level overrides // device-level overrides
virtual void device_start() override; virtual void device_start() override;
virtual void device_reset() override; virtual void device_reset() override;
virtual void device_clock_changed() override;
// sound stream update overrides // sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, stream_sample_t **inputs, stream_sample_t **outputs, int samples) override; 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 */ 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 */ 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? */ 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_divisor; /* can be 8,10,16, and is read out of ROM data */
uint8_t m_channel; uint8_t m_channel;
uint8_t m_nar; /* Next Address Ready */ uint8_t m_nar; /* Next Address Ready */

View File

@ -728,7 +728,7 @@ WRITE8_MEMBER(x68k_state::x68k_ct_w)
m_adpcm.clock = data & 0x02; m_adpcm.clock = data & 0x02;
x68k_set_adpcm(); x68k_set_adpcm();
m_okim6258->set_clock(data & 0x02 ? 4000000 : 8000000); m_okim6258->set_unscaled_clock(data & 0x02 ? 4000000 : 8000000);
} }
/* /*

View File

@ -1448,7 +1448,7 @@ WRITE8_MEMBER(mpu4_state::ic3ss_w)
if (freq) if (freq)
{ {
m_msm6376->set_frequency(freq); m_msm6376->set_unscaled_clock(freq);
} }
} }