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_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);
}

View File

@ -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 */

View File

@ -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);
}

View File

@ -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 */

View File

@ -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);
}
/*

View File

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