Merge pull request #3800 from cam900/ymf262

ymf262.cpp : Add device_clock_changed
This commit is contained in:
ajrhacker 2018-07-28 01:05:35 -04:00 committed by GitHub
commit d38c19d33d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 49 additions and 5 deletions

View File

@ -109,6 +109,17 @@ void ymf262_device::device_reset()
ymf262_reset_chip(m_chip);
}
//-------------------------------------------------
// device_clock_changed - called if the clock
// changes
//-------------------------------------------------
void ymf262_device::device_clock_changed()
{
int rate = clock()/288;
ymf262_clock_changed(m_chip,clock(),rate);
m_stream->set_sample_rate(rate);
}
READ8_MEMBER( ymf262_device::read )
{

View File

@ -26,6 +26,7 @@ protected:
virtual void device_start() override;
virtual void device_stop() override;
virtual void device_reset() override;
virtual void device_clock_changed() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;

View File

@ -1401,6 +1401,15 @@ static void OPL3_initalize(OPL3 *chip)
}
static void OPL3_clock_changed(OPL3 *chip, int clock, int rate)
{
chip->clock = clock;
chip->rate = rate;
/* init global tables */
OPL3_initalize(chip);
}
static inline void FM_KEYON(OPL3_SLOT *SLOT, uint32_t key_set)
{
if( !SLOT->key )
@ -2360,11 +2369,7 @@ static OPL3 *OPL3Create(device_t *device, int clock, int rate, int type)
chip->device = device;
chip->type = type;
chip->clock = clock;
chip->rate = rate;
/* init global tables */
OPL3_initalize(chip);
OPL3_clock_changed(chip, clock, rate);
/* reset chip */
OPL3ResetChip(chip);
@ -2531,6 +2536,11 @@ void * ymf262_init(device_t *device, int clock, int rate)
return chip;
}
void ymf262_clock_changed(void *chip, int clock, int rate)
{
OPL3_clock_changed((OPL3 *)chip, clock, rate);
}
void ymf262_post_load(void *chip) {
OPL3 *opl3 = (OPL3 *)chip;
for (int ch=0; ch<18; ch++) {

View File

@ -24,6 +24,7 @@ typedef void (*OPL3_UPDATEHANDLER)(device_t *device,int min_interval_us);
void *ymf262_init(device_t *device, int clock, int rate);
void ymf262_clock_changed(void *chip, int clock, int rate);
void ymf262_post_load(void *chip);
void ymf262_shutdown(void *chip);
void ymf262_reset_chip(void *chip);

View File

@ -777,6 +777,14 @@ READ8_MEMBER( ymf278b_device::read )
/**************************************************************************/
//-------------------------------------------------
// device_post_load - device-specific post load
//-------------------------------------------------
void ymf278b_device::device_post_load()
{
ymf262_post_load(m_ymf262);
}
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
@ -841,6 +849,17 @@ void ymf278b_device::device_stop()
m_ymf262 = nullptr;
}
void ymf278b_device::device_clock_changed()
{
m_stream->set_sample_rate(clock()/768);
// YMF262 related
int ymf262_clock = clock() / (19/8.0);
ymf262_clock_changed(m_ymf262, ymf262_clock, ymf262_clock / 288);
m_stream_ymf262->set_sample_rate(ymf262_clock / 288);
}
void ymf278b_device::rom_bank_updated()
{
m_stream->update();

View File

@ -24,9 +24,11 @@ public:
protected:
// device-level overrides
virtual void device_post_load() override;
virtual void device_start() override;
virtual void device_reset() override;
virtual void device_stop() override;
virtual void device_clock_changed() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;