mirror of
https://github.com/holub/mame
synced 2025-06-02 10:59:52 +03:00
okim6258, okim6376: Replace custom handlers with device_clock_changed (nw)
This commit is contained in:
parent
b6e896dab9
commit
431ede8470
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1448,7 +1448,7 @@ WRITE8_MEMBER(mpu4_state::ic3ss_w)
|
||||
|
||||
if (freq)
|
||||
{
|
||||
m_msm6376->set_frequency(freq);
|
||||
m_msm6376->set_unscaled_clock(freq);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user