summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author ajrhacker <ajrhacker@users.noreply.github.com>2020-07-10 23:20:28 -0400
committer GitHub <noreply@github.com>2020-07-10 23:20:28 -0400
commit7ae77915e7fac9719c7e3b37d1b737f3fc5f6a59 (patch)
treec15807edaea3229ee821be0eb4800a6e54a3fa5d
parentf10dafcbb9d30fb35a2fe2d071fa615764b136f8 (diff)
parent84689414be250a30e6ccac1d222a7677dc66debc (diff)
Merge pull request #6917 from cam900/rf5c400_save
rf5c400.cpp: Modernized save states, Allow clock changed behavior
-rw-r--r--src/devices/sound/rf5c400.cpp54
-rw-r--r--src/devices/sound/rf5c400.h3
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;