diff options
author | 2020-07-10 23:20:28 -0400 | |
---|---|---|
committer | 2020-07-10 23:20:28 -0400 | |
commit | 7ae77915e7fac9719c7e3b37d1b737f3fc5f6a59 (patch) | |
tree | c15807edaea3229ee821be0eb4800a6e54a3fa5d /src/devices/sound | |
parent | f10dafcbb9d30fb35a2fe2d071fa615764b136f8 (diff) | |
parent | 84689414be250a30e6ccac1d222a7677dc66debc (diff) |
Merge pull request #6917 from cam900/rf5c400_save
rf5c400.cpp: Modernized save states, Allow clock changed behavior
Diffstat (limited to 'src/devices/sound')
-rw-r--r-- | src/devices/sound/rf5c400.cpp | 54 | ||||
-rw-r--r-- | src/devices/sound/rf5c400.h | 3 |
2 files changed, 34 insertions, 23 deletions
diff --git a/src/devices/sound/rf5c400.cpp b/src/devices/sound/rf5c400.cpp index 43fef5db852..d61ccb65337 100644 --- a/src/devices/sound/rf5c400.cpp +++ b/src/devices/sound/rf5c400.cpp @@ -159,34 +159,42 @@ void rf5c400_device::device_start() save_item(NAME(m_ext_mem_address)); save_item(NAME(m_ext_mem_data)); - for (int i = 0; i < ARRAY_LENGTH(m_channels); i++) - { - save_item(NAME(m_channels[i].startH), i); - save_item(NAME(m_channels[i].startL), i); - save_item(NAME(m_channels[i].freq), i); - save_item(NAME(m_channels[i].endL), i); - save_item(NAME(m_channels[i].endHloopH), i); - save_item(NAME(m_channels[i].loopL), i); - save_item(NAME(m_channels[i].pan), i); - save_item(NAME(m_channels[i].effect), i); - save_item(NAME(m_channels[i].volume), i); - save_item(NAME(m_channels[i].attack), i); - save_item(NAME(m_channels[i].decay), i); - save_item(NAME(m_channels[i].release), i); - save_item(NAME(m_channels[i].cutoff), i); - save_item(NAME(m_channels[i].pos), i); - save_item(NAME(m_channels[i].step), i); - save_item(NAME(m_channels[i].keyon), i); - save_item(NAME(m_channels[i].env_phase), i); - save_item(NAME(m_channels[i].env_level), i); - save_item(NAME(m_channels[i].env_step), i); - save_item(NAME(m_channels[i].env_scale), i); - } + save_item(STRUCT_MEMBER(m_channels, startH)); + save_item(STRUCT_MEMBER(m_channels, startL)); + save_item(STRUCT_MEMBER(m_channels, freq)); + save_item(STRUCT_MEMBER(m_channels, endL)); + save_item(STRUCT_MEMBER(m_channels, endHloopH)); + save_item(STRUCT_MEMBER(m_channels, loopL)); + save_item(STRUCT_MEMBER(m_channels, pan)); + save_item(STRUCT_MEMBER(m_channels, effect)); + save_item(STRUCT_MEMBER(m_channels, volume)); + save_item(STRUCT_MEMBER(m_channels, attack)); + save_item(STRUCT_MEMBER(m_channels, decay)); + save_item(STRUCT_MEMBER(m_channels, release)); + save_item(STRUCT_MEMBER(m_channels, cutoff)); + save_item(STRUCT_MEMBER(m_channels, pos)); + save_item(STRUCT_MEMBER(m_channels, step)); + save_item(STRUCT_MEMBER(m_channels, keyon)); + save_item(STRUCT_MEMBER(m_channels, env_phase)); + save_item(STRUCT_MEMBER(m_channels, env_level)); + save_item(STRUCT_MEMBER(m_channels, env_step)); + save_item(STRUCT_MEMBER(m_channels, env_scale)); m_stream = stream_alloc(0, 2, clock() / 384); } //------------------------------------------------- +// device_clock_changed - called if the clock +// changes +//------------------------------------------------- + +void rf5c400_device::device_clock_changed() +{ + m_env_tables.init(clock()); + m_stream->set_sample_rate(clock() / 384); +} + +//------------------------------------------------- // sound_stream_update - handle a stream update //------------------------------------------------- diff --git a/src/devices/sound/rf5c400.h b/src/devices/sound/rf5c400.h index 6971c8fc283..faccf327bf2 100644 --- a/src/devices/sound/rf5c400.h +++ b/src/devices/sound/rf5c400.h @@ -21,6 +21,8 @@ class rf5c400_device : public device_t, public device_rom_interface<25, 1, 0, ENDIANNESS_LITTLE> { public: + static constexpr feature_type imperfect_features() { return feature::SOUND; } // unemulated and/or unverified effects and envelopes + rf5c400_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); uint16_t rf5c400_r(offs_t offset, uint16_t mem_mask = ~0); @@ -29,6 +31,7 @@ public: protected: // device-level overrides virtual void device_start() 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; |