summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2021-04-14 02:17:35 -0700
committer Aaron Giles <aaron@aarongiles.com>2021-04-14 02:17:35 -0700
commitd27be276f3dd64fd8a4719e34f7e755b01df8bde (patch)
tree70d60a8230203eb065c79c0f028bab4a94a6efd7 /src
parent6bfb3d997605a4dd1ed4274dd076bc478d570985 (diff)
Convert STRUCT_MEMBERs into proper struct saves for devices/sound/*
Diffstat (limited to 'src')
-rw-r--r--src/devices/sound/c140.cpp28
-rw-r--r--src/devices/sound/c140.h20
-rw-r--r--src/devices/sound/c352.cpp22
-rw-r--r--src/devices/sound/c352.h17
-rw-r--r--src/devices/sound/c6280.cpp23
-rw-r--r--src/devices/sound/c6280.h15
-rw-r--r--src/devices/sound/es5503.cpp16
-rw-r--r--src/devices/sound/es5503.h15
-rw-r--r--src/devices/sound/es5506.cpp59
-rw-r--r--src/devices/sound/es5506.h27
-rw-r--r--src/devices/sound/ics2115.cpp55
-rw-r--r--src/devices/sound/ics2115.h43
-rw-r--r--src/devices/sound/k007232.cpp17
-rw-r--r--src/devices/sound/k007232.h12
-rw-r--r--src/devices/sound/k051649.cpp16
-rw-r--r--src/devices/sound/k051649.h11
-rw-r--r--src/devices/sound/l7a1045_l6028_dsp_a.cpp24
-rw-r--r--src/devices/sound/l7a1045_l6028_dsp_a.h13
-rw-r--r--src/devices/sound/multipcm.cpp45
-rw-r--r--src/devices/sound/multipcm.h33
-rw-r--r--src/devices/sound/okiadpcm.h16
-rw-r--r--src/devices/sound/okim9810.cpp71
-rw-r--r--src/devices/sound/okim9810.h22
-rw-r--r--src/devices/sound/pokey.cpp61
-rw-r--r--src/devices/sound/pokey.h5
-rw-r--r--src/devices/sound/qsoundhle.cpp78
-rw-r--r--src/devices/sound/qsoundhle.h48
-rw-r--r--src/devices/sound/rf5c400.cpp39
-rw-r--r--src/devices/sound/rf5c400.h25
-rw-r--r--src/devices/sound/rf5c68.cpp22
-rw-r--r--src/devices/sound/rf5c68.h12
-rw-r--r--src/devices/sound/saa1099.cpp43
-rw-r--r--src/devices/sound/saa1099.h20
-rw-r--r--src/devices/sound/setapcm.cpp25
-rw-r--r--src/devices/sound/setapcm.h18
-rw-r--r--src/devices/sound/sp0250.cpp37
-rw-r--r--src/devices/sound/sp0250.h9
-rw-r--r--src/devices/sound/tt5665.cpp30
-rw-r--r--src/devices/sound/tt5665.h11
-rw-r--r--src/devices/sound/vrender0.cpp41
-rw-r--r--src/devices/sound/vrender0.h17
-rw-r--r--src/devices/sound/ymf271.cpp82
-rw-r--r--src/devices/sound/ymf271.h54
-rw-r--r--src/devices/sound/ymz280b.cpp58
-rw-r--r--src/devices/sound/ymz280b.h29
-rw-r--r--src/devices/sound/ymz770.cpp60
-rw-r--r--src/devices/sound/ymz770.h45
47 files changed, 893 insertions, 596 deletions
diff --git a/src/devices/sound/c140.cpp b/src/devices/sound/c140.cpp
index 62e32707f6c..2c79b04a9f2 100644
--- a/src/devices/sound/c140.cpp
+++ b/src/devices/sound/c140.cpp
@@ -145,23 +145,12 @@ void c140_device::device_start()
/* allocate a pair of buffers to mix into - 1 second's worth should be more than enough */
m_mixer_buffer_left = std::make_unique<s16[]>(m_sample_rate);
m_mixer_buffer_right = std::make_unique<s16[]>(m_sample_rate);
+}
- save_item(NAME(m_REG));
-
- save_item(STRUCT_MEMBER(m_voi, ptoffset));
- save_item(STRUCT_MEMBER(m_voi, pos));
- save_item(STRUCT_MEMBER(m_voi, key));
- save_item(STRUCT_MEMBER(m_voi, lastdt));
- save_item(STRUCT_MEMBER(m_voi, prevdt));
- save_item(STRUCT_MEMBER(m_voi, dltdt));
- save_item(STRUCT_MEMBER(m_voi, rvol));
- save_item(STRUCT_MEMBER(m_voi, lvol));
- save_item(STRUCT_MEMBER(m_voi, frequency));
- save_item(STRUCT_MEMBER(m_voi, bank));
- save_item(STRUCT_MEMBER(m_voi, mode));
- save_item(STRUCT_MEMBER(m_voi, sample_start));
- save_item(STRUCT_MEMBER(m_voi, sample_end));
- save_item(STRUCT_MEMBER(m_voi, sample_loop));
+void c140_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_REG))
+ .reg(NAME(m_voi));
}
void c219_device::device_start()
@@ -188,8 +177,13 @@ void c219_device::device_start()
m_pcmtbl[i + 128] = (~m_pcmtbl[i]) & 0xffe0;
m_lfsr = 0x1234;
+}
+
+void c219_device::device_register_save(save_registrar &save)
+{
+ c140_device::device_register_save(save);
- save_item(NAME(m_lfsr));
+ save.reg(NAME(m_lfsr));
}
void c140_device::device_clock_changed()
diff --git a/src/devices/sound/c140.h b/src/devices/sound/c140.h
index 3008d964a9d..d954ef41f40 100644
--- a/src/devices/sound/c140.h
+++ b/src/devices/sound/c140.h
@@ -39,6 +39,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
virtual void rom_bank_updated() override;
@@ -71,6 +72,24 @@ protected:
s32 sample_start = 0;
s32 sample_end = 0;
s32 sample_loop = 0;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(ptoffset))
+ .reg(NAME(pos))
+ .reg(NAME(key))
+ .reg(NAME(lastdt))
+ .reg(NAME(prevdt))
+ .reg(NAME(dltdt))
+ .reg(NAME(rvol))
+ .reg(NAME(lvol))
+ .reg(NAME(frequency))
+ .reg(NAME(bank))
+ .reg(NAME(mode))
+ .reg(NAME(sample_start))
+ .reg(NAME(sample_end))
+ .reg(NAME(sample_loop));
+ }
};
void init_voice(C140_VOICE *v);
@@ -114,6 +133,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
diff --git a/src/devices/sound/c352.cpp b/src/devices/sound/c352.cpp
index bea5a561b59..9ee01bc1628 100644
--- a/src/devices/sound/c352.cpp
+++ b/src/devices/sound/c352.cpp
@@ -385,24 +385,14 @@ void c352_device::device_start()
}
for (int i = 0; i < 128; i++)
m_mulawtab[i + 128] = (~m_mulawtab[i]) & 0xffe0;
+}
+void c352_device::device_register_save(save_registrar &save)
+{
// register save state info
- save_item(STRUCT_MEMBER(m_c352_v, pos));
- save_item(STRUCT_MEMBER(m_c352_v, counter));
- save_item(STRUCT_MEMBER(m_c352_v, sample));
- save_item(STRUCT_MEMBER(m_c352_v, last_sample));
- save_item(STRUCT_MEMBER(m_c352_v, vol_f));
- save_item(STRUCT_MEMBER(m_c352_v, vol_r));
- save_item(STRUCT_MEMBER(m_c352_v, curr_vol));
- save_item(STRUCT_MEMBER(m_c352_v, freq));
- save_item(STRUCT_MEMBER(m_c352_v, flags));
- save_item(STRUCT_MEMBER(m_c352_v, wave_bank));
- save_item(STRUCT_MEMBER(m_c352_v, wave_start));
- save_item(STRUCT_MEMBER(m_c352_v, wave_end));
- save_item(STRUCT_MEMBER(m_c352_v, wave_loop));
-
- save_item(NAME(m_random));
- save_item(NAME(m_control));
+ save.reg(NAME(m_c352_v))
+ .reg(NAME(m_random))
+ .reg(NAME(m_control));
}
void c352_device::device_reset()
diff --git a/src/devices/sound/c352.h b/src/devices/sound/c352.h
index d21ac96cd86..026d8c8e6b7 100644
--- a/src/devices/sound/c352.h
+++ b/src/devices/sound/c352.h
@@ -36,6 +36,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// device_sound_interface overrides
@@ -86,6 +87,22 @@ private:
u16 wave_end;
u16 wave_loop;
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(pos))
+ .reg(NAME(counter))
+ .reg(NAME(sample))
+ .reg(NAME(last_sample))
+ .reg(NAME(vol_f))
+ .reg(NAME(vol_r))
+ .reg(NAME(curr_vol))
+ .reg(NAME(freq))
+ .reg(NAME(flags))
+ .reg(NAME(wave_bank))
+ .reg(NAME(wave_start))
+ .reg(NAME(wave_end))
+ .reg(NAME(wave_loop));
+ }
};
void fetch_sample(c352_voice_t &v);
diff --git a/src/devices/sound/c6280.cpp b/src/devices/sound/c6280.cpp
index 1b6666455c9..4d59c145a31 100644
--- a/src/devices/sound/c6280.cpp
+++ b/src/devices/sound/c6280.cpp
@@ -330,22 +330,15 @@ void c6280_device::device_start()
level /= pow(10.0, step / 20.0);
}
m_volume_table[30] = m_volume_table[31] = 0;
+}
- save_item(NAME(m_select));
- save_item(NAME(m_balance));
- save_item(NAME(m_lfo_frequency));
- save_item(NAME(m_lfo_control));
-
- save_item(STRUCT_MEMBER(m_channel, frequency));
- save_item(STRUCT_MEMBER(m_channel, control));
- save_item(STRUCT_MEMBER(m_channel, balance));
- save_item(STRUCT_MEMBER(m_channel, waveform));
- save_item(STRUCT_MEMBER(m_channel, index));
- save_item(STRUCT_MEMBER(m_channel, dda));
- save_item(STRUCT_MEMBER(m_channel, noise_control));
- save_item(STRUCT_MEMBER(m_channel, noise_counter));
- save_item(STRUCT_MEMBER(m_channel, noise_seed));
- save_item(STRUCT_MEMBER(m_channel, tick));
+void c6280_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_select))
+ .reg(NAME(m_balance))
+ .reg(NAME(m_lfo_frequency))
+ .reg(NAME(m_lfo_control))
+ .reg(NAME(m_channel));
}
void c6280_device::device_reset()
diff --git a/src/devices/sound/c6280.h b/src/devices/sound/c6280.h
index 60ea993f71b..748d8517cdf 100644
--- a/src/devices/sound/c6280.h
+++ b/src/devices/sound/c6280.h
@@ -19,6 +19,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// sound stream update overrides
@@ -37,6 +38,20 @@ private:
u32 noise_frequency;
u32 noise_seed;
s32 tick;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(frequency))
+ .reg(NAME(control))
+ .reg(NAME(balance))
+ .reg(NAME(waveform))
+ .reg(NAME(index))
+ .reg(NAME(dda))
+ .reg(NAME(noise_control))
+ .reg(NAME(noise_counter))
+ .reg(NAME(noise_seed))
+ .reg(NAME(tick));
+ }
};
// internal state
diff --git a/src/devices/sound/es5503.cpp b/src/devices/sound/es5503.cpp
index f22d11473fc..43a14268dcc 100644
--- a/src/devices/sound/es5503.cpp
+++ b/src/devices/sound/es5503.cpp
@@ -219,17 +219,6 @@ void es5503_device::device_start()
rege0 = 0xff;
- save_pointer(STRUCT_MEMBER(oscillators, freq), 32);
- save_pointer(STRUCT_MEMBER(oscillators, wtsize), 32);
- save_pointer(STRUCT_MEMBER(oscillators, control), 32);
- save_pointer(STRUCT_MEMBER(oscillators, vol), 32);
- save_pointer(STRUCT_MEMBER(oscillators, data), 32);
- save_pointer(STRUCT_MEMBER(oscillators, wavetblpointer), 32);
- save_pointer(STRUCT_MEMBER(oscillators, wavetblsize), 32);
- save_pointer(STRUCT_MEMBER(oscillators, resolution), 32);
- save_pointer(STRUCT_MEMBER(oscillators, accumulator), 32);
- save_pointer(STRUCT_MEMBER(oscillators, irqpend), 32);
-
output_rate = (clock() / 8) / (2 + oscsenabled);
m_stream = stream_alloc(0, output_channels, output_rate);
@@ -238,6 +227,11 @@ void es5503_device::device_start()
m_timer->adjust(update_rate, 0, update_rate);
}
+void es5503_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(oscillators));
+}
+
void es5503_device::device_clock_changed()
{
output_rate = (clock() / 8) / (2 + oscsenabled);
diff --git a/src/devices/sound/es5503.h b/src/devices/sound/es5503.h
index 2fd316aad8e..8c286e0e7c9 100644
--- a/src/devices/sound/es5503.h
+++ b/src/devices/sound/es5503.h
@@ -31,6 +31,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id tid, int param, void *ptr) override;
@@ -70,6 +71,20 @@ private:
uint32_t accumulator;
uint8_t irqpend;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(freq))
+ .reg(NAME(wtsize))
+ .reg(NAME(control))
+ .reg(NAME(vol))
+ .reg(NAME(data))
+ .reg(NAME(wavetblpointer))
+ .reg(NAME(wavetblsize))
+ .reg(NAME(resolution))
+ .reg(NAME(accumulator))
+ .reg(NAME(irqpend));
+ }
};
ES5503Osc oscillators[32];
diff --git a/src/devices/sound/es5506.cpp b/src/devices/sound/es5506.cpp
index 3ea90a97261..14c19b4dc0d 100644
--- a/src/devices/sound/es5506.cpp
+++ b/src/devices/sound/es5506.cpp
@@ -203,31 +203,19 @@ void es550x_device::device_start()
m_read_port_cb.resolve();
m_sample_rate_changed_cb.resolve();
m_irqv = 0x80;
+}
+void es550x_device::device_register_save(save_registrar &save)
+{
// register save
- save_item(NAME(m_sample_rate));
-
- save_item(NAME(m_current_page));
- save_item(NAME(m_active_voices));
- save_item(NAME(m_mode));
- save_item(NAME(m_irqv));
- save_item(NAME(m_voice_index));
-
- save_item(STRUCT_MEMBER(m_voice, control));
- save_item(STRUCT_MEMBER(m_voice, freqcount));
- save_item(STRUCT_MEMBER(m_voice, start));
- save_item(STRUCT_MEMBER(m_voice, end));
- save_item(STRUCT_MEMBER(m_voice, accum));
- save_item(STRUCT_MEMBER(m_voice, lvol));
- save_item(STRUCT_MEMBER(m_voice, rvol));
- save_item(STRUCT_MEMBER(m_voice, k2));
- save_item(STRUCT_MEMBER(m_voice, k1));
- save_item(STRUCT_MEMBER(m_voice, o4n1));
- save_item(STRUCT_MEMBER(m_voice, o3n1));
- save_item(STRUCT_MEMBER(m_voice, o3n2));
- save_item(STRUCT_MEMBER(m_voice, o2n1));
- save_item(STRUCT_MEMBER(m_voice, o2n2));
- save_item(STRUCT_MEMBER(m_voice, o1n1));
+ save.reg(NAME(m_sample_rate))
+
+ .reg(NAME(m_current_page))
+ .reg(NAME(m_active_voices))
+ .reg(NAME(m_mode))
+ .reg(NAME(m_irqv))
+ .reg(NAME(m_voice_index))
+ .reg(NAME(m_voice));
}
void es5506_device::device_start()
@@ -272,22 +260,19 @@ void es5506_device::device_start()
// 21 bit integer and 11 bit fraction
get_accum_mask(ADDRESS_INTEGER_BIT_ES5506, ADDRESS_FRAC_BIT_ES5506);
- // register save
- save_item(NAME(m_write_latch));
- save_item(NAME(m_read_latch));
-
- save_item(NAME(m_wst));
- save_item(NAME(m_wend));
- save_item(NAME(m_lrend));
+ // success
+}
- save_item(STRUCT_MEMBER(m_voice, ecount));
- save_item(STRUCT_MEMBER(m_voice, lvramp));
- save_item(STRUCT_MEMBER(m_voice, rvramp));
- save_item(STRUCT_MEMBER(m_voice, k2ramp));
- save_item(STRUCT_MEMBER(m_voice, k1ramp));
- save_item(STRUCT_MEMBER(m_voice, filtcount));
+void es5506_device::device_register_save(save_registrar &save)
+{
+ es550x_device::device_register_save(save);
- // success
+ // register save
+ save.reg(NAME(m_write_latch))
+ .reg(NAME(m_read_latch))
+ .reg(NAME(m_wst))
+ .reg(NAME(m_wend))
+ .reg(NAME(m_lrend));
}
//-------------------------------------------------
diff --git a/src/devices/sound/es5506.h b/src/devices/sound/es5506.h
index 4e45617c8b7..1fb8aff36bb 100644
--- a/src/devices/sound/es5506.h
+++ b/src/devices/sound/es5506.h
@@ -73,12 +73,38 @@ protected:
// internal state
u8 index = 0; // index of this voice
u8 filtcount = 0; // filter count
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(control))
+ .reg(NAME(freqcount))
+ .reg(NAME(start))
+ .reg(NAME(lvol))
+ .reg(NAME(end))
+ .reg(NAME(lvramp))
+ .reg(NAME(accum))
+ .reg(NAME(rvol))
+ .reg(NAME(rvramp))
+ .reg(NAME(ecount))
+ .reg(NAME(k2))
+ .reg(NAME(k2ramp))
+ .reg(NAME(k1))
+ .reg(NAME(k1ramp))
+ .reg(NAME(o4n1))
+ .reg(NAME(o3n1))
+ .reg(NAME(o3n2))
+ .reg(NAME(o2n1))
+ .reg(NAME(o2n2))
+ .reg(NAME(o1n1))
+ .reg(NAME(filtcount));
+ }
};
es550x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock);
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
virtual void device_stop() override;
virtual void device_reset() override;
@@ -168,6 +194,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
// device_memory_interface configuration
diff --git a/src/devices/sound/ics2115.cpp b/src/devices/sound/ics2115.cpp
index 868bcb70bc4..c7747c58313 100644
--- a/src/devices/sound/ics2115.cpp
+++ b/src/devices/sound/ics2115.cpp
@@ -92,46 +92,23 @@ void ics2115_device::device_start()
s16 value = lut[exponent] + (mantissa << (exponent + 3));
m_ulaw[i] = (i & 0x80) ? -value : value;
}
+}
- save_item(NAME(m_timer[0].period));
- save_item(NAME(m_timer[0].scale));
- save_item(NAME(m_timer[0].preset));
- save_item(NAME(m_timer[1].period));
- save_item(NAME(m_timer[1].scale));
- save_item(NAME(m_timer[1].preset));
- save_item(NAME(m_reg_select));
- save_item(NAME(m_osc_select));
- save_item(NAME(m_irq_enabled));
- save_item(NAME(m_irq_pending));
- save_item(NAME(m_irq_on));
- save_item(NAME(m_active_osc));
- save_item(NAME(m_vmode));
- save_item(NAME(m_regs));
- save_item(STRUCT_MEMBER(m_voice, regs));
-
- for (int i = 0; i < 32; i++)
- {
- save_item(NAME(m_voice[i].osc_conf.value), i);
- save_item(NAME(m_voice[i].state.on), i);
- save_item(NAME(m_voice[i].state.ramp), i);
- save_item(NAME(m_voice[i].vol_ctrl.value), i);
- save_item(NAME(m_voice[i].osc.left), i);
- save_item(NAME(m_voice[i].osc.acc), i);
- save_item(NAME(m_voice[i].osc.start), i);
- save_item(NAME(m_voice[i].osc.end), i);
- save_item(NAME(m_voice[i].osc.fc), i);
- save_item(NAME(m_voice[i].osc.ctl), i);
- save_item(NAME(m_voice[i].osc.saddr), i);
- save_item(NAME(m_voice[i].vol.left), i);
- save_item(NAME(m_voice[i].vol.add), i);
- save_item(NAME(m_voice[i].vol.start), i);
- save_item(NAME(m_voice[i].vol.end), i);
- save_item(NAME(m_voice[i].vol.acc), i);
- save_item(NAME(m_voice[i].vol.regacc), i);
- save_item(NAME(m_voice[i].vol.incr), i);
- save_item(NAME(m_voice[i].vol.pan), i);
- save_item(NAME(m_voice[i].vol.mode), i);
- }
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void ics2115_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_timer))
+ .reg(NAME(m_reg_select))
+ .reg(NAME(m_osc_select))
+ .reg(NAME(m_irq_enabled))
+ .reg(NAME(m_irq_pending))
+ .reg(NAME(m_irq_on))
+ .reg(NAME(m_active_osc))
+ .reg(NAME(m_vmode))
+ .reg(NAME(m_regs));
}
//-------------------------------------------------
diff --git a/src/devices/sound/ics2115.h b/src/devices/sound/ics2115.h
index 5dd18fcf4ed..e3bfcbafde6 100644
--- a/src/devices/sound/ics2115.h
+++ b/src/devices/sound/ics2115.h
@@ -36,6 +36,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// device_sound_interface overrides
@@ -55,6 +56,17 @@ private:
u32 acc, start, end; // address counters (20.9 fixed point)
u16 fc; // frequency (6.9 fixed point)
u8 ctl, saddr;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(left))
+ .reg(NAME(acc))
+ .reg(NAME(start))
+ .reg(NAME(end))
+ .reg(NAME(fc))
+ .reg(NAME(ctl))
+ .reg(NAME(saddr));
+ }
} osc;
struct {
@@ -65,6 +77,19 @@ private:
u16 regacc;
u8 incr;
u8 pan, mode;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(left))
+ .reg(NAME(add))
+ .reg(NAME(start))
+ .reg(NAME(end))
+ .reg(NAME(acc))
+ .reg(NAME(regacc))
+ .reg(NAME(incr))
+ .reg(NAME(pan))
+ .reg(NAME(mode));
+ }
} vol;
union {
@@ -80,6 +105,8 @@ private:
// IRQ on variable?
} bitflags;
u8 value;
+
+ void register_save(save_registrar &save) { save.reg(NAME(value)); }
} osc_conf;
union {
@@ -95,6 +122,8 @@ private:
// noenvelope == (done | stop)
} bitflags;
u8 value;
+
+ void register_save(save_registrar &save) { save.reg(NAME(value)); }
} vol_ctrl;
// Possibly redundant state. => improvements of wavetable logic
@@ -102,6 +131,8 @@ private:
struct {
bool on;
int ramp; // 100 0000 = 0x40 maximum
+
+ void register_save(save_registrar &save) { save.reg(NAME(on)).reg(NAME(ramp)); }
} state;
u16 regs[0x20]; // channel registers
@@ -109,6 +140,16 @@ private:
int update_volume_envelope();
int update_oscillator();
void update_ramp();
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(osc_conf))
+ .reg(NAME(state))
+ .reg(NAME(vol_ctrl))
+ .reg(NAME(osc))
+ .reg(NAME(vol))
+ .reg(NAME(regs));
+ }
};
// internal register helper functions
@@ -139,6 +180,8 @@ private:
u8 scale, preset;
emu_timer *timer;
u64 period; /* in nsec */
+
+ void register_save(save_registrar &save) { save.reg(NAME(period)).reg(NAME(scale)).reg(NAME(preset)); }
} m_timer[2];
u8 m_active_osc;
diff --git a/src/devices/sound/k007232.cpp b/src/devices/sound/k007232.cpp
index 32623f187df..2113257adba 100644
--- a/src/devices/sound/k007232.cpp
+++ b/src/devices/sound/k007232.cpp
@@ -90,15 +90,16 @@ void k007232_device::device_start()
elem = 0;
m_stream = stream_alloc(0, 2, clock()/128);
+}
- save_item(STRUCT_MEMBER(m_channel, vol));
- save_item(STRUCT_MEMBER(m_channel, addr));
- save_item(STRUCT_MEMBER(m_channel, counter));
- save_item(STRUCT_MEMBER(m_channel, start));
- save_item(STRUCT_MEMBER(m_channel, step));
- save_item(STRUCT_MEMBER(m_channel, bank));
- save_item(STRUCT_MEMBER(m_channel, play));
- save_item(NAME(m_wreg));
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void k007232_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_channel))
+ .reg(NAME(m_wreg));
}
//-------------------------------------------------
diff --git a/src/devices/sound/k007232.h b/src/devices/sound/k007232.h
index f467670fc9b..ad9b29d6156 100644
--- a/src/devices/sound/k007232.h
+++ b/src/devices/sound/k007232.h
@@ -34,6 +34,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// sound stream update overrides
@@ -60,6 +61,17 @@ private:
u16 step;
u32 bank;
bool play;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(vol))
+ .reg(NAME(addr))
+ .reg(NAME(counter))
+ .reg(NAME(start))
+ .reg(NAME(step))
+ .reg(NAME(bank))
+ .reg(NAME(play));
+ }
};
u8 read_rom_default(offs_t offset) { return m_rom[(m_bank + (offset & 0x1ffff)) & (m_rom.length() - 1)]; }
diff --git a/src/devices/sound/k051649.cpp b/src/devices/sound/k051649.cpp
index 9a1f748580e..8e1aa25075f 100644
--- a/src/devices/sound/k051649.cpp
+++ b/src/devices/sound/k051649.cpp
@@ -77,15 +77,17 @@ void k051649_device::device_start()
// build the mixer table
make_mixer_table(5);
+}
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void k051649_device::device_register_save(save_registrar &save)
+{
// save states
- save_item(STRUCT_MEMBER(m_channel_list, counter));
- save_item(STRUCT_MEMBER(m_channel_list, clock));
- save_item(STRUCT_MEMBER(m_channel_list, frequency));
- save_item(STRUCT_MEMBER(m_channel_list, volume));
- save_item(STRUCT_MEMBER(m_channel_list, key));
- save_item(STRUCT_MEMBER(m_channel_list, waveram));
- save_item(NAME(m_test));
+ save.reg(NAME(m_channel_list))
+ .reg(NAME(m_test));
}
diff --git a/src/devices/sound/k051649.h b/src/devices/sound/k051649.h
index 368ef6c58a9..7e4036c0ea2 100644
--- a/src/devices/sound/k051649.h
+++ b/src/devices/sound/k051649.h
@@ -33,6 +33,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_clock_changed() override;
@@ -60,6 +61,16 @@ private:
int volume; // volume
bool key; // keyon/off
s8 waveram[32]; // 32 byte wavetable
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(counter))
+ .reg(NAME(clock))
+ .reg(NAME(frequency))
+ .reg(NAME(volume))
+ .reg(NAME(key))
+ .reg(NAME(waveram));
+ }
};
void make_mixer_table(int voices);
diff --git a/src/devices/sound/l7a1045_l6028_dsp_a.cpp b/src/devices/sound/l7a1045_l6028_dsp_a.cpp
index a9db61b5deb..61421a71998 100644
--- a/src/devices/sound/l7a1045_l6028_dsp_a.cpp
+++ b/src/devices/sound/l7a1045_l6028_dsp_a.cpp
@@ -121,18 +121,20 @@ void l7a1045_sound_device::device_start()
// Allocate the stream
m_stream = stream_alloc(0, 2, 66150); //clock() / 384);
+}
+
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
- save_item(STRUCT_MEMBER(m_voice, start));
- save_item(STRUCT_MEMBER(m_voice, end));
- save_item(STRUCT_MEMBER(m_voice, mode));
- save_item(STRUCT_MEMBER(m_voice, pos));
- save_item(STRUCT_MEMBER(m_voice, frac));
- save_item(STRUCT_MEMBER(m_voice, l_volume));
- save_item(STRUCT_MEMBER(m_voice, r_volume));
- save_item(NAME(m_key));
- save_item(NAME(m_audiochannel));
- save_item(NAME(m_audioregister));
- save_item(STRUCT_MEMBER(m_audiodat, dat));
+void l7a1045_sound_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_voice))
+ .reg(NAME(m_key))
+ .reg(NAME(m_audiochannel))
+ .reg(NAME(m_audioregister))
+ .reg(NAME(m_audiodat));
}
diff --git a/src/devices/sound/l7a1045_l6028_dsp_a.h b/src/devices/sound/l7a1045_l6028_dsp_a.h
index 4fff2caa465..a3ddcdecb11 100644
--- a/src/devices/sound/l7a1045_l6028_dsp_a.h
+++ b/src/devices/sound/l7a1045_l6028_dsp_a.h
@@ -31,6 +31,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
// sound stream update overrides
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
@@ -47,6 +48,17 @@ private:
uint32_t frac = 0;
uint16_t l_volume = 0;
uint16_t r_volume = 0;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(start))
+ .reg(NAME(end))
+ .reg(NAME(mode))
+ .reg(NAME(pos))
+ .reg(NAME(frac))
+ .reg(NAME(l_volume))
+ .reg(NAME(r_volume));
+ }
};
sound_stream *m_stream;
@@ -59,6 +71,7 @@ private:
struct l7a1045_48bit_data {
uint16_t dat[3];
+ void register_save(save_registrar &save) { save.reg(NAME(dat)); }
};
l7a1045_48bit_data m_audiodat[0x10][0x20];
diff --git a/src/devices/sound/multipcm.cpp b/src/devices/sound/multipcm.cpp
index b3dd084580f..7243340c9fe 100644
--- a/src/devices/sound/multipcm.cpp
+++ b/src/devices/sound/multipcm.cpp
@@ -584,45 +584,24 @@ void multipcm_device::device_start()
m_linear_to_exp_volume[i] = value_to_fixed(TL_SHIFT, exp_volume);
}
- save_item(NAME(m_cur_slot));
- save_item(NAME(m_address));
-
// Slots
m_slots = std::make_unique<slot_t []>(28);
- save_pointer(STRUCT_MEMBER(m_slots, m_regs), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_playing), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_base), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_offset), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_step), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_pan), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_total_level), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_dest_total_level), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_total_level_step), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_prev_sample), 28);
- save_pointer(STRUCT_MEMBER(m_slots, m_format), 28);
-
- for (int32_t slot = 0; slot < 28; ++slot)
- {
- m_slots[slot].m_playing = false;
-
- save_item(NAME(m_slots[slot].m_envelope_gen.m_volume), slot);
- save_item(NAME(m_slots[slot].m_envelope_gen.m_state), slot);
- save_item(NAME(m_slots[slot].m_envelope_gen.step), slot);
- save_item(NAME(m_slots[slot].m_envelope_gen.m_attack_rate), slot);
- save_item(NAME(m_slots[slot].m_envelope_gen.m_decay1_rate), slot);
- save_item(NAME(m_slots[slot].m_envelope_gen.m_decay2_rate), slot);
- save_item(NAME(m_slots[slot].m_envelope_gen.m_release_rate), slot);
- save_item(NAME(m_slots[slot].m_envelope_gen.m_decay_level), slot);
- save_item(NAME(m_slots[slot].m_pitch_lfo.m_phase), slot);
- save_item(NAME(m_slots[slot].m_pitch_lfo.m_phase_step), slot);
- save_item(NAME(m_slots[slot].m_amplitude_lfo.m_phase), slot);
- save_item(NAME(m_slots[slot].m_amplitude_lfo.m_phase_step), slot);
- }
-
lfo_init();
}
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void multipcm_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_slots), 28)
+ .reg(NAME(m_cur_slot))
+ .reg(NAME(m_address));
+}
+
//-------------------------------------------------
// device_clock_changed - called if the clock
// changes
diff --git a/src/devices/sound/multipcm.h b/src/devices/sound/multipcm.h
index 27f5f6d5de0..b09534f11e9 100644
--- a/src/devices/sound/multipcm.h
+++ b/src/devices/sound/multipcm.h
@@ -26,6 +26,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// sound stream update overrides
@@ -70,6 +71,18 @@ private:
int32_t m_decay2_rate = 0; // Decay2
int32_t m_release_rate = 0; // Release
int32_t m_decay_level = 0; // Decay level
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_volume))
+ .reg(NAME(m_state))
+ .reg(NAME(step))
+ .reg(NAME(m_attack_rate))
+ .reg(NAME(m_decay1_rate))
+ .reg(NAME(m_decay2_rate))
+ .reg(NAME(m_release_rate))
+ .reg(NAME(m_decay_level));
+ }
};
struct lfo_t
@@ -78,6 +91,8 @@ private:
uint32_t m_phase_step = 0;
int32_t *m_table = nullptr;
int32_t *m_scale = nullptr;
+
+ void register_save(save_registrar &save) { save.reg(NAME(m_phase)).reg(NAME(m_phase_step)); }
};
struct slot_t
@@ -97,6 +112,24 @@ private:
lfo_t m_pitch_lfo; // Pitch lfo
lfo_t m_amplitude_lfo; // AM lfo
uint8_t m_format;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_regs))
+ .reg(NAME(m_playing))
+ .reg(NAME(m_base))
+ .reg(NAME(m_offset))
+ .reg(NAME(m_step))
+ .reg(NAME(m_pan))
+ .reg(NAME(m_total_level))
+ .reg(NAME(m_dest_total_level))
+ .reg(NAME(m_total_level_step))
+ .reg(NAME(m_prev_sample))
+ .reg(NAME(m_format))
+ .reg(NAME(m_envelope_gen))
+ .reg(NAME(m_pitch_lfo))
+ .reg(NAME(m_amplitude_lfo));
+ }
};
// internal state
diff --git a/src/devices/sound/okiadpcm.h b/src/devices/sound/okiadpcm.h
index b89e3ab8db7..d7af277eea6 100644
--- a/src/devices/sound/okiadpcm.h
+++ b/src/devices/sound/okiadpcm.h
@@ -34,6 +34,14 @@ public:
int32_t m_loop_step;
bool m_saved;
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_signal))
+ .reg(NAME(m_step))
+ .reg(NAME(m_loop_signal))
+ .reg(NAME(m_loop_step));
+ }
+
private:
static const int8_t s_index_shift[8];
static int s_diff_lookup[49*16];
@@ -64,6 +72,14 @@ public:
int32_t m_loop_step;
bool m_saved;
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_signal))
+ .reg(NAME(m_step))
+ .reg(NAME(m_loop_signal))
+ .reg(NAME(m_loop_step));
+ }
+
private:
static const int8_t s_index_shift[8];
static int s_diff_lookup[49*16];
diff --git a/src/devices/sound/okim9810.cpp b/src/devices/sound/okim9810.cpp
index 21e2624cd80..e7223dbfc41 100644
--- a/src/devices/sound/okim9810.cpp
+++ b/src/devices/sound/okim9810.cpp
@@ -113,53 +113,36 @@ void okim9810_device::device_start()
{
// create the stream
m_stream = stream_alloc(0, 2, clock());
+}
- // save state stuff
- save_item(NAME(m_TMP_register));
- save_item(NAME(m_global_volume));
- save_item(NAME(m_filter_type));
- save_item(NAME(m_output_level));
-
- save_item(NAME(m_dadr));
- save_item(NAME(m_dadr_start_offset));
- save_item(NAME(m_dadr_end_offset));
- save_item(NAME(m_dadr_flags));
-
- save_item(NAME(m_serial));
- save_item(NAME(m_serial_read_latch));
- save_item(NAME(m_serial_write_latch));
- save_item(NAME(m_serial_bits));
- save_item(NAME(m_ud));
- save_item(NAME(m_si));
- save_item(NAME(m_sd));
- save_item(NAME(m_cmd));
-
- for (int i = 0; i < OKIM9810_VOICES; i++)
- {
- okim_voice *voice = &m_voice[i];
- // can't use STRUCT_MEMBER on nested structs
- save_item(NAME(voice->m_adpcm.m_signal), i);
- save_item(NAME(voice->m_adpcm.m_step), i);
- save_item(NAME(voice->m_adpcm2.m_signal), i);
- save_item(NAME(voice->m_adpcm2.m_step), i);
- }
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
- save_item(STRUCT_MEMBER(m_voice, m_playbackAlgo));
- save_item(STRUCT_MEMBER(m_voice, m_looping));
- save_item(STRUCT_MEMBER(m_voice, m_startFlags));
- save_item(STRUCT_MEMBER(m_voice, m_endFlags));
- save_item(STRUCT_MEMBER(m_voice, m_base_offset));
- save_item(STRUCT_MEMBER(m_voice, m_count));
- save_item(STRUCT_MEMBER(m_voice, m_samplingFreq));
- save_item(STRUCT_MEMBER(m_voice, m_playing));
- save_item(STRUCT_MEMBER(m_voice, m_sample));
- save_item(STRUCT_MEMBER(m_voice, m_channel_volume));
- save_item(STRUCT_MEMBER(m_voice, m_pan_volume_left));
- save_item(STRUCT_MEMBER(m_voice, m_pan_volume_right));
- save_item(STRUCT_MEMBER(m_voice, m_startSample));
- save_item(STRUCT_MEMBER(m_voice, m_endSample));
- save_item(STRUCT_MEMBER(m_voice, m_interpSampleNum));
+void okim9810_device::device_register_save(save_registrar &save)
+{
+ // save state stuff
+ save.reg(NAME(m_TMP_register))
+ .reg(NAME(m_global_volume))
+ .reg(NAME(m_filter_type))
+ .reg(NAME(m_output_level))
+
+ .reg(NAME(m_dadr))
+ .reg(NAME(m_dadr_start_offset))
+ .reg(NAME(m_dadr_end_offset))
+ .reg(NAME(m_dadr_flags))
+
+ .reg(NAME(m_serial))
+ .reg(NAME(m_serial_read_latch))
+ .reg(NAME(m_serial_write_latch))
+ .reg(NAME(m_serial_bits))
+ .reg(NAME(m_ud))
+ .reg(NAME(m_si))
+ .reg(NAME(m_sd))
+ .reg(NAME(m_cmd))
+
+ .reg(NAME(m_voice));
}
diff --git a/src/devices/sound/okim9810.h b/src/devices/sound/okim9810.h
index 01977b23e2b..3cf05867821 100644
--- a/src/devices/sound/okim9810.h
+++ b/src/devices/sound/okim9810.h
@@ -82,6 +82,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_clock_changed() override;
@@ -129,6 +130,27 @@ protected:
uint32_t m_interpSampleNum; // interpolation state - fraction between start & end
static const uint8_t s_volume_table[16];
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_adpcm))
+ .reg(NAME(m_adpcm2))
+ .reg(NAME(m_playbackAlgo))
+ .reg(NAME(m_looping))
+ .reg(NAME(m_startFlags))
+ .reg(NAME(m_endFlags))
+ .reg(NAME(m_base_offset))
+ .reg(NAME(m_count))
+ .reg(NAME(m_samplingFreq))
+ .reg(NAME(m_playing))
+ .reg(NAME(m_sample))
+ .reg(NAME(m_channel_volume))
+ .reg(NAME(m_pan_volume_left))
+ .reg(NAME(m_pan_volume_right))
+ .reg(NAME(m_startSample))
+ .reg(NAME(m_endSample))
+ .reg(NAME(m_interpSampleNum));
+ }
};
// internal state
diff --git a/src/devices/sound/pokey.cpp b/src/devices/sound/pokey.cpp
index f749afad2ae..1586195f74e 100644
--- a/src/devices/sound/pokey.cpp
+++ b/src/devices/sound/pokey.cpp
@@ -263,35 +263,6 @@ void pokey_device::device_start()
timer_alloc(SYNC_POT);
timer_alloc(SYNC_SET_IRQST);
- save_item(STRUCT_MEMBER(m_channel, m_borrow_cnt));
- save_item(STRUCT_MEMBER(m_channel, m_counter));
- save_item(STRUCT_MEMBER(m_channel, m_filter_sample));
- save_item(STRUCT_MEMBER(m_channel, m_output));
- save_item(STRUCT_MEMBER(m_channel, m_AUDF));
- save_item(STRUCT_MEMBER(m_channel, m_AUDC));
-
- save_item(NAME(m_clock_cnt));
- save_item(NAME(m_p4));
- save_item(NAME(m_p5));
- save_item(NAME(m_p9));
- save_item(NAME(m_p17));
-
- save_item(NAME(m_POTx));
- save_item(NAME(m_AUDCTL));
- save_item(NAME(m_ALLPOT));
- save_item(NAME(m_KBCODE));
- save_item(NAME(m_SERIN));
- save_item(NAME(m_SEROUT));
- save_item(NAME(m_IRQST));
- save_item(NAME(m_IRQEN));
- save_item(NAME(m_SKSTAT));
- save_item(NAME(m_SKCTL));
-
- save_item(NAME(m_pot_counter));
- save_item(NAME(m_kbd_cnt));
- save_item(NAME(m_kbd_latch));
- save_item(NAME(m_kbd_state));
-
// State support
state_add(AUDF1_C, "AUDF1", m_channel[0].m_AUDF);
@@ -316,6 +287,38 @@ void pokey_device::device_start()
set_icountptr(m_icount);
}
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void pokey_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_channel))
+
+ .reg(NAME(m_clock_cnt))
+ .reg(NAME(m_p4))
+ .reg(NAME(m_p5))
+ .reg(NAME(m_p9))
+ .reg(NAME(m_p17))
+
+ .reg(NAME(m_POTx))
+ .reg(NAME(m_AUDCTL))
+ .reg(NAME(m_ALLPOT))
+ .reg(NAME(m_KBCODE))
+ .reg(NAME(m_SERIN))
+ .reg(NAME(m_SEROUT))
+ .reg(NAME(m_IRQST))
+ .reg(NAME(m_IRQEN))
+ .reg(NAME(m_SKSTAT))
+ .reg(NAME(m_SKCTL))
+
+ .reg(NAME(m_pot_counter))
+ .reg(NAME(m_kbd_cnt))
+ .reg(NAME(m_kbd_latch))
+ .reg(NAME(m_kbd_state));
+}
+
//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
diff --git a/src/devices/sound/pokey.h b/src/devices/sound/pokey.h
index 0717429aff3..f0947292a7c 100644
--- a/src/devices/sound/pokey.h
+++ b/src/devices/sound/pokey.h
@@ -187,6 +187,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_clock_changed() override;
@@ -242,6 +243,10 @@ private:
}
return 0;
}
+
+ void register_save(save_registrar &save)
+ {
+ }
};
static constexpr int POKEY_CHANNELS = 4;
diff --git a/src/devices/sound/qsoundhle.cpp b/src/devices/sound/qsoundhle.cpp
index 913d22baed1..14766603f68 100644
--- a/src/devices/sound/qsoundhle.cpp
+++ b/src/devices/sound/qsoundhle.cpp
@@ -67,72 +67,42 @@ void qsound_hle_device::device_start()
m_stream = stream_alloc(0, 2, clock() / 2 / 1248); // DSP program uses 1248 machine cycles per iteration
init_register_map();
+}
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void qsound_hle_device::device_register_save(save_registrar &save)
+{
// state save
// PCM registers
// PCM voices
- save_item(STRUCT_MEMBER(m_voice, m_bank));
- save_item(STRUCT_MEMBER(m_voice, m_addr));
- save_item(STRUCT_MEMBER(m_voice, m_phase));
- save_item(STRUCT_MEMBER(m_voice, m_rate));
- save_item(STRUCT_MEMBER(m_voice, m_loop_len));
- save_item(STRUCT_MEMBER(m_voice, m_end_addr));
- save_item(STRUCT_MEMBER(m_voice, m_volume));
- save_item(STRUCT_MEMBER(m_voice, m_echo));
+ save.reg(NAME(m_voice))
// ADPCM voices
- save_item(STRUCT_MEMBER(m_adpcm, m_start_addr));
- save_item(STRUCT_MEMBER(m_adpcm, m_end_addr));
- save_item(STRUCT_MEMBER(m_adpcm, m_bank));
- save_item(STRUCT_MEMBER(m_adpcm, m_volume));
- save_item(STRUCT_MEMBER(m_adpcm, m_flag));
- save_item(STRUCT_MEMBER(m_adpcm, m_cur_vol));
- save_item(STRUCT_MEMBER(m_adpcm, m_step_size));
- save_item(STRUCT_MEMBER(m_adpcm, m_cur_addr));
+ .reg(NAME(m_adpcm))
// PCM voices
- save_item(NAME(m_voice_pan));
+ .reg(NAME(m_voice_pan))
// QSound registers
- save_item(NAME(m_echo.m_end_pos));
- save_item(NAME(m_echo.m_feedback));
- save_item(NAME(m_echo.m_length));
- save_item(NAME(m_echo.m_last_sample));
- save_item(NAME(m_echo.m_delay_line));
- save_item(NAME(m_echo.m_delay_pos));
+ .reg(NAME(m_echo))
// left, right
- save_item(STRUCT_MEMBER(m_filter, m_tap_count));
- save_item(STRUCT_MEMBER(m_filter, m_delay_pos));
- save_item(STRUCT_MEMBER(m_filter, m_table_pos));
- save_item(STRUCT_MEMBER(m_filter, m_taps));
- save_item(STRUCT_MEMBER(m_filter, m_delay_line));
-
- save_item(STRUCT_MEMBER(m_alt_filter, m_tap_count));
- save_item(STRUCT_MEMBER(m_alt_filter, m_delay_pos));
- save_item(STRUCT_MEMBER(m_alt_filter, m_table_pos));
- save_item(STRUCT_MEMBER(m_alt_filter, m_taps));
- save_item(STRUCT_MEMBER(m_alt_filter, m_delay_line));
-
- save_item(STRUCT_MEMBER(m_wet, m_delay));
- save_item(STRUCT_MEMBER(m_wet, m_volume));
- save_item(STRUCT_MEMBER(m_wet, m_write_pos));
- save_item(STRUCT_MEMBER(m_wet, m_read_pos));
- save_item(STRUCT_MEMBER(m_wet, m_delay_line));
-
- save_item(STRUCT_MEMBER(m_dry, m_delay));
- save_item(STRUCT_MEMBER(m_dry, m_volume));
- save_item(STRUCT_MEMBER(m_dry, m_write_pos));
- save_item(STRUCT_MEMBER(m_dry, m_read_pos));
- save_item(STRUCT_MEMBER(m_dry, m_delay_line));
-
- save_item(NAME(m_state));
- save_item(NAME(m_next_state));
- save_item(NAME(m_delay_update));
- save_item(NAME(m_state_counter));
- save_item(NAME(m_ready_flag));
- save_item(NAME(m_data_latch));
- save_item(NAME(m_out));
+ .reg(NAME(m_filter))
+ .reg(NAME(m_alt_filter))
+
+ .reg(NAME(m_wet))
+ .reg(NAME(m_dry))
+
+ .reg(NAME(m_state))
+ .reg(NAME(m_next_state))
+ .reg(NAME(m_delay_update))
+ .reg(NAME(m_state_counter))
+ .reg(NAME(m_ready_flag))
+ .reg(NAME(m_data_latch))
+ .reg(NAME(m_out));
}
//-------------------------------------------------
diff --git a/src/devices/sound/qsoundhle.h b/src/devices/sound/qsoundhle.h
index 4d6f61e0c7d..be052d3be38 100644
--- a/src/devices/sound/qsoundhle.h
+++ b/src/devices/sound/qsoundhle.h
@@ -27,6 +27,7 @@ protected:
// device_t implementation
tiny_rom_entry const *device_rom_region() const override;
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
// device_sound_interface implementation
@@ -71,6 +72,17 @@ private:
int16_t m_echo = 0;
int16_t update(qsound_hle_device &dsp, int32_t *echo_out);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_bank))
+ .reg(NAME(m_addr))
+ .reg(NAME(m_phase))
+ .reg(NAME(m_rate))
+ .reg(NAME(m_loop_len))
+ .reg(NAME(m_end_addr))
+ .reg(NAME(m_volume))
+ .reg(NAME(m_echo));
+ }
};
struct qsound_adpcm {
@@ -84,6 +96,17 @@ private:
uint16_t m_cur_addr = 0;
int16_t update(qsound_hle_device &dsp, int16_t curr_sample, int nibble);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_start_addr))
+ .reg(NAME(m_end_addr))
+ .reg(NAME(m_bank))
+ .reg(NAME(m_volume))
+ .reg(NAME(m_flag))
+ .reg(NAME(m_cur_vol))
+ .reg(NAME(m_step_size))
+ .reg(NAME(m_cur_addr));
+ }
};
// Q1 Filter
@@ -95,6 +118,14 @@ private:
int16_t m_delay_line[95] = { 0 };
int32_t apply(int16_t input);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_tap_count))
+ .reg(NAME(m_delay_pos))
+ .reg(NAME(m_table_pos))
+ .reg(NAME(m_taps))
+ .reg(NAME(m_delay_line));
+ }
};
// Delay line
@@ -107,6 +138,14 @@ private:
int32_t apply(const int32_t input);
void update();
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_delay))
+ .reg(NAME(m_volume))
+ .reg(NAME(m_write_pos))
+ .reg(NAME(m_read_pos))
+ .reg(NAME(m_delay_line));
+ }
};
struct qsound_echo {
@@ -119,6 +158,15 @@ private:
int16_t m_delay_pos = 0;
int16_t apply(int32_t input);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_end_pos))
+ .reg(NAME(m_feedback))
+ .reg(NAME(m_length))
+ .reg(NAME(m_last_sample))
+ .reg(NAME(m_delay_line))
+ .reg(NAME(m_delay_pos));
+ }
};
// MAME resources
diff --git a/src/devices/sound/rf5c400.cpp b/src/devices/sound/rf5c400.cpp
index f15b7923260..73d969e7f06 100644
--- a/src/devices/sound/rf5c400.cpp
+++ b/src/devices/sound/rf5c400.cpp
@@ -161,36 +161,23 @@ void rf5c400_device::device_start()
m_req_channel = 0;
- save_item(NAME(m_rf5c400_status));
- save_item(NAME(m_ext_mem_address));
- save_item(NAME(m_ext_mem_data));
- save_item(NAME(m_req_channel));
-
- 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, 4, clock() / 384);
}
//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void rf5c400_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_rf5c400_status))
+ .reg(NAME(m_ext_mem_address))
+ .reg(NAME(m_ext_mem_data))
+ .reg(NAME(m_req_channel))
+ .reg(NAME(m_channels));
+}
+
+//-------------------------------------------------
// device_clock_changed - called if the clock
// changes
//-------------------------------------------------
diff --git a/src/devices/sound/rf5c400.h b/src/devices/sound/rf5c400.h
index 8f54d2bc8b3..11d22576943 100644
--- a/src/devices/sound/rf5c400.h
+++ b/src/devices/sound/rf5c400.h
@@ -31,6 +31,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// sound stream update overrides
@@ -68,6 +69,30 @@ private:
double env_level = 0.0;
double env_step = 0.0;
double env_scale = 0.0;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(startH))
+ .reg(NAME(startL))
+ .reg(NAME(freq))
+ .reg(NAME(endL))
+ .reg(NAME(endHloopH))
+ .reg(NAME(loopL))
+ .reg(NAME(pan))
+ .reg(NAME(effect))
+ .reg(NAME(volume))
+ .reg(NAME(attack))
+ .reg(NAME(decay))
+ .reg(NAME(release))
+ .reg(NAME(cutoff))
+ .reg(NAME(pos))
+ .reg(NAME(step))
+ .reg(NAME(keyon))
+ .reg(NAME(env_phase))
+ .reg(NAME(env_level))
+ .reg(NAME(env_step))
+ .reg(NAME(env_scale));
+ }
};
class envelope_tables
diff --git a/src/devices/sound/rf5c68.cpp b/src/devices/sound/rf5c68.cpp
index 09fd397d4fb..cc8b38688a6 100644
--- a/src/devices/sound/rf5c68.cpp
+++ b/src/devices/sound/rf5c68.cpp
@@ -82,18 +82,18 @@ void rf5c68_device::device_start()
/* allocate the stream */
m_stream = stream_alloc(0, 2, clock() / 384);
+}
- save_item(STRUCT_MEMBER(m_chan, enable));
- save_item(STRUCT_MEMBER(m_chan, env));
- save_item(STRUCT_MEMBER(m_chan, pan));
- save_item(STRUCT_MEMBER(m_chan, start));
- save_item(STRUCT_MEMBER(m_chan, addr));
- save_item(STRUCT_MEMBER(m_chan, step));
- save_item(STRUCT_MEMBER(m_chan, loopst));
-
- save_item(NAME(m_cbank));
- save_item(NAME(m_wbank));
- save_item(NAME(m_enable));
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void rf5c68_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_chan))
+ .reg(NAME(m_cbank))
+ .reg(NAME(m_wbank))
+ .reg(NAME(m_enable));
}
//-------------------------------------------------
diff --git a/src/devices/sound/rf5c68.h b/src/devices/sound/rf5c68.h
index d78f378faaf..b7fb30058a5 100644
--- a/src/devices/sound/rf5c68.h
+++ b/src/devices/sound/rf5c68.h
@@ -42,6 +42,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// sound stream update overrides
@@ -66,6 +67,17 @@ private:
u32 addr = 0;
u16 step = 0;
u16 loopst = 0;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(enable))
+ .reg(NAME(env))
+ .reg(NAME(pan))
+ .reg(NAME(start))
+ .reg(NAME(addr))
+ .reg(NAME(step))
+ .reg(NAME(loopst));
+ }
};
memory_access<16, 0, 0, ENDIANNESS_LITTLE>::cache m_cache;
diff --git a/src/devices/sound/saa1099.cpp b/src/devices/sound/saa1099.cpp
index 080ebabe89c..963ac50e010 100644
--- a/src/devices/sound/saa1099.cpp
+++ b/src/devices/sound/saa1099.cpp
@@ -162,30 +162,27 @@ void saa1099_device::device_start()
{
/* for each chip allocate one stream */
m_stream = stream_alloc(0, 2, clock()/clock_divider);
+}
+
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
- save_item(NAME(m_noise_params));
- save_item(NAME(m_env_enable));
- save_item(NAME(m_env_reverse_right));
- save_item(NAME(m_env_mode));
- save_item(NAME(m_env_bits));
- save_item(NAME(m_env_clock));
- save_item(NAME(m_env_step));
- save_item(NAME(m_all_ch_enable));
- save_item(NAME(m_sync_state));
- save_item(NAME(m_selected_reg));
-
- save_item(STRUCT_MEMBER(m_channels, frequency));
- save_item(STRUCT_MEMBER(m_channels, freq_enable));
- save_item(STRUCT_MEMBER(m_channels, noise_enable));
- save_item(STRUCT_MEMBER(m_channels, octave));
- save_item(STRUCT_MEMBER(m_channels, amplitude));
- save_item(STRUCT_MEMBER(m_channels, envelope));
- save_item(STRUCT_MEMBER(m_channels, counter));
- save_item(STRUCT_MEMBER(m_channels, level));
-
- save_item(STRUCT_MEMBER(m_noise, counter));
- save_item(STRUCT_MEMBER(m_noise, freq));
- save_item(STRUCT_MEMBER(m_noise, level));
+void saa1099_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_noise_params))
+ .reg(NAME(m_env_enable))
+ .reg(NAME(m_env_reverse_right))
+ .reg(NAME(m_env_mode))
+ .reg(NAME(m_env_bits))
+ .reg(NAME(m_env_clock))
+ .reg(NAME(m_env_step))
+ .reg(NAME(m_all_ch_enable))
+ .reg(NAME(m_sync_state))
+ .reg(NAME(m_selected_reg))
+ .reg(NAME(m_channels))
+ .reg(NAME(m_noise));
}
diff --git a/src/devices/sound/saa1099.h b/src/devices/sound/saa1099.h
index 87f5b58f48a..183198028e2 100644
--- a/src/devices/sound/saa1099.h
+++ b/src/devices/sound/saa1099.h
@@ -29,6 +29,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// sound stream update overrides
@@ -50,6 +51,18 @@ private:
inline u32 freq() const { return (511 - frequency) << (8 - octave); } // clock / ((511 - frequency) * 2^(8 - octave))
int counter = 0;
u8 level = 0;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(frequency))
+ .reg(NAME(freq_enable))
+ .reg(NAME(noise_enable))
+ .reg(NAME(octave))
+ .reg(NAME(amplitude))
+ .reg(NAME(envelope))
+ .reg(NAME(counter))
+ .reg(NAME(level));
+ }
};
struct saa1099_noise
@@ -60,6 +73,13 @@ private:
int counter = 0;
int freq = 0;
u32 level = 0xffffffffU; // noise polynomial shifter
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(counter))
+ .reg(NAME(freq))
+ .reg(NAME(level));
+ }
};
void envelope_w(int ch);
diff --git a/src/devices/sound/setapcm.cpp b/src/devices/sound/setapcm.cpp
index 61346643216..5ff26716bf4 100644
--- a/src/devices/sound/setapcm.cpp
+++ b/src/devices/sound/setapcm.cpp
@@ -107,22 +107,17 @@ void setapcm_device<MaxVoices, Divider>::device_start()
// set host device to each voices
for (auto & elem : m_voice)
elem.m_host = this;
+}
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
- save_item(STRUCT_MEMBER(m_voice, m_start));
- save_item(STRUCT_MEMBER(m_voice, m_flags));
- save_item(STRUCT_MEMBER(m_voice, m_freq));
- save_item(STRUCT_MEMBER(m_voice, m_lpstart));
- save_item(STRUCT_MEMBER(m_voice, m_lpend));
- save_item(STRUCT_MEMBER(m_voice, m_end));
- save_item(STRUCT_MEMBER(m_voice, m_vol_r));
- save_item(STRUCT_MEMBER(m_voice, m_vol_l));
- save_item(STRUCT_MEMBER(m_voice, m_pos));
- save_item(STRUCT_MEMBER(m_voice, m_frac));
- save_item(STRUCT_MEMBER(m_voice, m_lponce));
- save_item(STRUCT_MEMBER(m_voice, m_keyon));
- save_item(STRUCT_MEMBER(m_voice, m_out));
-
- save_item(NAME(m_keyctrl));
+template<unsigned MaxVoices, unsigned Divider>
+void setapcm_device<MaxVoices, Divider>::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_voice))
+ .reg(NAME(m_keyctrl));
}
//-------------------------------------------------
diff --git a/src/devices/sound/setapcm.h b/src/devices/sound/setapcm.h
index 8c406c7076f..4ab362b4480 100644
--- a/src/devices/sound/setapcm.h
+++ b/src/devices/sound/setapcm.h
@@ -35,6 +35,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_clock_changed() override;
// sound stream update overrides
@@ -69,6 +70,23 @@ private:
bool m_lponce = false; // Is looped once?
bool m_keyon = false; // Keyon status
s32 m_out = 0; // output value
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_start))
+ .reg(NAME(m_flags))
+ .reg(NAME(m_freq))
+ .reg(NAME(m_lpstart))
+ .reg(NAME(m_lpend))
+ .reg(NAME(m_end))
+ .reg(NAME(m_vol_r))
+ .reg(NAME(m_vol_l))
+ .reg(NAME(m_pos))
+ .reg(NAME(m_frac))
+ .reg(NAME(m_lponce))
+ .reg(NAME(m_keyon))
+ .reg(NAME(m_out));
+ }
};
sound_stream *m_stream;
diff --git a/src/devices/sound/sp0250.cpp b/src/devices/sound/sp0250.cpp
index 862b3781a7c..f42bfc61598 100644
--- a/src/devices/sound/sp0250.cpp
+++ b/src/devices/sound/sp0250.cpp
@@ -74,29 +74,32 @@ void sp0250_device::device_start()
attotime period = attotime::from_hz(frame_rate);
timer_alloc()->adjust(period, 0, period);
}
+}
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void sp0250_device::device_register_save(save_registrar &save)
+{
// PWM state
- save_item(NAME(m_pwm_index));
- save_item(NAME(m_pwm_count));
- save_item(NAME(m_pwm_counts));
+ save.reg(NAME(m_pwm_index))
+ .reg(NAME(m_pwm_count))
+ .reg(NAME(m_pwm_counts))
// LPC state
- save_item(NAME(m_voiced));
- save_item(NAME(m_amp));
- save_item(NAME(m_lfsr));
- save_item(NAME(m_pitch));
- save_item(NAME(m_pcount));
- save_item(NAME(m_repeat));
- save_item(NAME(m_rcount));
-
- save_item(STRUCT_MEMBER(m_filter, F));
- save_item(STRUCT_MEMBER(m_filter, B));
- save_item(STRUCT_MEMBER(m_filter, z1));
- save_item(STRUCT_MEMBER(m_filter, z2));
+ .reg(NAME(m_voiced))
+ .reg(NAME(m_amp))
+ .reg(NAME(m_lfsr))
+ .reg(NAME(m_pitch))
+ .reg(NAME(m_pcount))
+ .reg(NAME(m_repeat))
+ .reg(NAME(m_rcount))
+ .reg(NAME(m_filter))
// FIFO state
- save_item(NAME(m_fifo));
- save_item(NAME(m_fifo_pos));
+ .reg(NAME(m_fifo))
+ .reg(NAME(m_fifo_pos));
}
void sp0250_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
diff --git a/src/devices/sound/sp0250.h b/src/devices/sound/sp0250.h
index d51ab2286bd..3fac364e347 100644
--- a/src/devices/sound/sp0250.h
+++ b/src/devices/sound/sp0250.h
@@ -19,6 +19,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
// sound stream update overrides
@@ -44,6 +45,14 @@ private:
}
int16_t F, B;
int16_t z1, z2;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(F))
+ .reg(NAME(B))
+ .reg(NAME(z1))
+ .reg(NAME(z2));
+ }
};
// PWM state
diff --git a/src/devices/sound/tt5665.cpp b/src/devices/sound/tt5665.cpp
index 0bd163f18df..dd57d62b3ea 100644
--- a/src/devices/sound/tt5665.cpp
+++ b/src/devices/sound/tt5665.cpp
@@ -152,23 +152,21 @@ void tt5665_device::device_start()
// create the stream
m_stream = stream_alloc(0, 2, clock() / freq_divider());
+}
- save_item(NAME(m_command));
- save_item(NAME(m_ss_state));
- save_item(NAME(m_s0_s1_state));
- save_item(NAME(m_daol_output));
- save_item(NAME(m_daol_timing));
-
- save_item(STRUCT_MEMBER(m_voice, m_playing));
- save_item(STRUCT_MEMBER(m_voice, m_sample));
- save_item(STRUCT_MEMBER(m_voice, m_count));
- save_item(STRUCT_MEMBER(m_voice, m_volume));
- save_item(STRUCT_MEMBER(m_voice, m_base_offset));
- for (int voicenum = 0; voicenum < TT5665_VOICES * 2; voicenum++)
- {
- save_item(NAME(m_voice[voicenum].m_adpcm.m_signal), voicenum);
- save_item(NAME(m_voice[voicenum].m_adpcm.m_step), voicenum);
- }
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void tt5665_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_voice))
+ .reg(NAME(m_command))
+ .reg(NAME(m_ss_state))
+ .reg(NAME(m_s0_s1_state))
+ .reg(NAME(m_daol_output))
+ .reg(NAME(m_daol_timing));
}
diff --git a/src/devices/sound/tt5665.h b/src/devices/sound/tt5665.h
index 37a0a712e27..875cdac53d0 100644
--- a/src/devices/sound/tt5665.h
+++ b/src/devices/sound/tt5665.h
@@ -58,6 +58,7 @@ protected:
// device-level overrides
virtual void device_validity_check(validity_checker &valid) const override;
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void device_post_load() override;
virtual void device_clock_changed() override;
@@ -82,6 +83,16 @@ private:
u32 m_sample; // current sample number
u32 m_count; // total samples to play
stream_buffer::sample_t m_volume; // output volume
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_adpcm))
+ .reg(NAME(m_playing))
+ .reg(NAME(m_sample))
+ .reg(NAME(m_count))
+ .reg(NAME(m_volume))
+ .reg(NAME(m_base_offset));
+ }
};
// configuration state
diff --git a/src/devices/sound/vrender0.cpp b/src/devices/sound/vrender0.cpp
index fd86b56adea..65e926eb63a 100644
--- a/src/devices/sound/vrender0.cpp
+++ b/src/devices/sound/vrender0.cpp
@@ -149,29 +149,26 @@ void vr0sound_device::device_start()
elem.Cache = &m_fbcache;
m_stream = stream_alloc(0, 2, clock() / 972); // TODO : Correct source / divider?
+}
+
- save_item(STRUCT_MEMBER(m_channel, CurSAddr));
- save_item(STRUCT_MEMBER(m_channel, EnvVol));
- save_item(STRUCT_MEMBER(m_channel, EnvStage));
- save_item(STRUCT_MEMBER(m_channel, dSAddr));
- save_item(STRUCT_MEMBER(m_channel, Modes));
- save_item(STRUCT_MEMBER(m_channel, LD));
- save_item(STRUCT_MEMBER(m_channel, LoopBegin));
- save_item(STRUCT_MEMBER(m_channel, LoopEnd));
- save_item(STRUCT_MEMBER(m_channel, LChnVol));
- save_item(STRUCT_MEMBER(m_channel, RChnVol));
- save_item(STRUCT_MEMBER(m_channel, EnvRate));
- save_item(STRUCT_MEMBER(m_channel, EnvTarget));
- save_item(NAME(m_Status));
- save_item(NAME(m_NoteOn));
- save_item(NAME(m_RevFactor));
- save_item(NAME(m_BufferAddr));
- save_item(NAME(m_BufferSize));
- save_item(NAME(m_IntMask));
- save_item(NAME(m_IntPend));
- save_item(NAME(m_MaxChn));
- save_item(NAME(m_ChnClkNum));
- save_item(NAME(m_Ctrl));
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void vr0sound_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_channel))
+ .reg(NAME(m_Status))
+ .reg(NAME(m_NoteOn))
+ .reg(NAME(m_RevFactor))
+ .reg(NAME(m_BufferAddr))
+ .reg(NAME(m_BufferSize))
+ .reg(NAME(m_IntMask))
+ .reg(NAME(m_IntPend))
+ .reg(NAME(m_MaxChn))
+ .reg(NAME(m_ChnClkNum))
+ .reg(NAME(m_Ctrl));
}
//-------------------------------------------------
diff --git a/src/devices/sound/vrender0.h b/src/devices/sound/vrender0.h
index 1e234232c69..90ce2b3be38 100644
--- a/src/devices/sound/vrender0.h
+++ b/src/devices/sound/vrender0.h
@@ -74,6 +74,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_post_load() override;
virtual void device_clock_changed() override;
@@ -130,6 +131,22 @@ private:
u8 EnvTarget[4]; // Envelope Target Volume per Each stages, High 7 Bits
u16 read(offs_t offset);
void write(offs_t offset, u16 data, u16 mem_mask);
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(CurSAddr))
+ .reg(NAME(EnvVol))
+ .reg(NAME(EnvStage))
+ .reg(NAME(dSAddr))
+ .reg(NAME(Modes))
+ .reg(NAME(LD))
+ .reg(NAME(LoopBegin))
+ .reg(NAME(LoopEnd))
+ .reg(NAME(LChnVol))
+ .reg(NAME(RChnVol))
+ .reg(NAME(EnvRate))
+ .reg(NAME(EnvTarget));
+ }
};
memory_access<23, 1, 0, ENDIANNESS_LITTLE>::cache m_texcache;
diff --git a/src/devices/sound/ymf271.cpp b/src/devices/sound/ymf271.cpp
index a473705b065..a07d885d13b 100644
--- a/src/devices/sound/ymf271.cpp
+++ b/src/devices/sound/ymf271.cpp
@@ -1661,70 +1661,25 @@ void ymf271_device::calculate_clock_correction()
}
}
-void ymf271_device::init_state()
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void ymf271_device::device_register_save(save_registrar &save)
{
- save_item(STRUCT_MEMBER(m_slots, ext_en));
- save_item(STRUCT_MEMBER(m_slots, ext_out));
- save_item(STRUCT_MEMBER(m_slots, lfoFreq));
- save_item(STRUCT_MEMBER(m_slots, pms));
- save_item(STRUCT_MEMBER(m_slots, ams));
- save_item(STRUCT_MEMBER(m_slots, detune));
- save_item(STRUCT_MEMBER(m_slots, multiple));
- save_item(STRUCT_MEMBER(m_slots, tl));
- save_item(STRUCT_MEMBER(m_slots, keyscale));
- save_item(STRUCT_MEMBER(m_slots, ar));
- save_item(STRUCT_MEMBER(m_slots, decay1rate));
- save_item(STRUCT_MEMBER(m_slots, decay2rate));
- save_item(STRUCT_MEMBER(m_slots, decay1lvl));
- save_item(STRUCT_MEMBER(m_slots, relrate));
- save_item(STRUCT_MEMBER(m_slots, block));
- save_item(STRUCT_MEMBER(m_slots, fns_hi));
- save_item(STRUCT_MEMBER(m_slots, fns));
- save_item(STRUCT_MEMBER(m_slots, feedback));
- save_item(STRUCT_MEMBER(m_slots, waveform));
- save_item(STRUCT_MEMBER(m_slots, accon));
- save_item(STRUCT_MEMBER(m_slots, algorithm));
- save_item(STRUCT_MEMBER(m_slots, ch0_level));
- save_item(STRUCT_MEMBER(m_slots, ch1_level));
- save_item(STRUCT_MEMBER(m_slots, ch2_level));
- save_item(STRUCT_MEMBER(m_slots, ch3_level));
- save_item(STRUCT_MEMBER(m_slots, startaddr));
- save_item(STRUCT_MEMBER(m_slots, loopaddr));
- save_item(STRUCT_MEMBER(m_slots, endaddr));
- save_item(STRUCT_MEMBER(m_slots, altloop));
- save_item(STRUCT_MEMBER(m_slots, fs));
- save_item(STRUCT_MEMBER(m_slots, srcnote));
- save_item(STRUCT_MEMBER(m_slots, srcb));
- save_item(STRUCT_MEMBER(m_slots, step));
- save_item(STRUCT_MEMBER(m_slots, stepptr));
- save_item(STRUCT_MEMBER(m_slots, active));
- save_item(STRUCT_MEMBER(m_slots, bits));
- save_item(STRUCT_MEMBER(m_slots, volume));
- save_item(STRUCT_MEMBER(m_slots, env_state));
- save_item(STRUCT_MEMBER(m_slots, env_attack_step));
- save_item(STRUCT_MEMBER(m_slots, env_decay1_step));
- save_item(STRUCT_MEMBER(m_slots, env_decay2_step));
- save_item(STRUCT_MEMBER(m_slots, env_release_step));
- save_item(STRUCT_MEMBER(m_slots, feedback_modulation0));
- save_item(STRUCT_MEMBER(m_slots, feedback_modulation1));
- save_item(STRUCT_MEMBER(m_slots, lfo_phase));
- save_item(STRUCT_MEMBER(m_slots, lfo_step));
- save_item(STRUCT_MEMBER(m_slots, lfo_amplitude));
-
- save_item(STRUCT_MEMBER(m_groups, sync));
- save_item(STRUCT_MEMBER(m_groups, pfm));
-
- save_item(NAME(m_regs_main));
- save_item(NAME(m_timerA));
- save_item(NAME(m_timerB));
- save_item(NAME(m_irqstate));
- save_item(NAME(m_status));
- save_item(NAME(m_end_status));
- save_item(NAME(m_enable));
- save_item(NAME(m_ext_address));
- save_item(NAME(m_ext_rw));
- save_item(NAME(m_ext_readlatch));
- save_item(NAME(m_master_clock));
+ save.reg(NAME(m_slots))
+ .reg(NAME(m_groups))
+ .reg(NAME(m_regs_main))
+ .reg(NAME(m_timerA))
+ .reg(NAME(m_timerB))
+ .reg(NAME(m_irqstate))
+ .reg(NAME(m_status))
+ .reg(NAME(m_end_status))
+ .reg(NAME(m_enable))
+ .reg(NAME(m_ext_address))
+ .reg(NAME(m_ext_rw))
+ .reg(NAME(m_ext_readlatch))
+ .reg(NAME(m_master_clock));
}
//-------------------------------------------------
@@ -1740,7 +1695,6 @@ void ymf271_device::device_start()
m_master_clock = clock();
init_tables();
- init_state();
m_mix_buffer.resize(m_master_clock/(384/4));
m_stream = stream_alloc(0, 4, m_master_clock/384);
diff --git a/src/devices/sound/ymf271.h b/src/devices/sound/ymf271.h
index 1c628f34cf1..78e4e22045f 100644
--- a/src/devices/sound/ymf271.h
+++ b/src/devices/sound/ymf271.h
@@ -23,6 +23,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
virtual void device_clock_changed() override;
@@ -85,14 +86,65 @@ private:
int lfo_phase, lfo_step;
int lfo_amplitude;
double lfo_phasemod;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(ext_en))
+ .reg(NAME(ext_out))
+ .reg(NAME(lfoFreq))
+ .reg(NAME(pms))
+ .reg(NAME(ams))
+ .reg(NAME(detune))
+ .reg(NAME(multiple))
+ .reg(NAME(tl))
+ .reg(NAME(keyscale))
+ .reg(NAME(ar))
+ .reg(NAME(decay1rate))
+ .reg(NAME(decay2rate))
+ .reg(NAME(decay1lvl))
+ .reg(NAME(relrate))
+ .reg(NAME(block))
+ .reg(NAME(fns_hi))
+ .reg(NAME(fns))
+ .reg(NAME(feedback))
+ .reg(NAME(waveform))
+ .reg(NAME(accon))
+ .reg(NAME(algorithm))
+ .reg(NAME(ch0_level))
+ .reg(NAME(ch1_level))
+ .reg(NAME(ch2_level))
+ .reg(NAME(ch3_level))
+ .reg(NAME(startaddr))
+ .reg(NAME(loopaddr))
+ .reg(NAME(endaddr))
+ .reg(NAME(altloop))
+ .reg(NAME(fs))
+ .reg(NAME(srcnote))
+ .reg(NAME(srcb))
+ .reg(NAME(step))
+ .reg(NAME(stepptr))
+ .reg(NAME(active))
+ .reg(NAME(bits))
+ .reg(NAME(volume))
+ .reg(NAME(env_state))
+ .reg(NAME(env_attack_step))
+ .reg(NAME(env_decay1_step))
+ .reg(NAME(env_decay2_step))
+ .reg(NAME(env_release_step))
+ .reg(NAME(feedback_modulation0))
+ .reg(NAME(feedback_modulation1))
+ .reg(NAME(lfo_phase))
+ .reg(NAME(lfo_step))
+ .reg(NAME(lfo_amplitude));
+ }
};
struct YMF271Group
{
uint8_t sync, pfm;
+ void register_save(save_registrar &save) { save.reg(NAME(sync)).reg(NAME(pfm)); }
};
- void init_state();
void init_tables();
void calculate_clock_correction();
void calculate_step(YMF271Slot *slot);
diff --git a/src/devices/sound/ymz280b.cpp b/src/devices/sound/ymz280b.cpp
index a9a87eb558f..1510d4543af 100644
--- a/src/devices/sound/ymz280b.cpp
+++ b/src/devices/sound/ymz280b.cpp
@@ -566,50 +566,32 @@ void ymz280b_device::device_start()
assert(MAX_SAMPLE_CHUNK < 0x10000);
m_scratch = std::make_unique<s16[]>(MAX_SAMPLE_CHUNK);
- /* state save */
- save_item(NAME(m_current_register));
- save_item(NAME(m_status_register));
- save_item(NAME(m_irq_state));
- save_item(NAME(m_irq_mask));
- save_item(NAME(m_irq_enable));
- save_item(NAME(m_keyon_enable));
- save_item(NAME(m_ext_mem_enable));
- save_item(NAME(m_ext_mem_address));
- save_item(NAME(m_ext_readlatch));
- save_item(NAME(m_ext_mem_address_hi));
- save_item(NAME(m_ext_mem_address_mid));
-
- save_item(STRUCT_MEMBER(m_voice, playing));
- save_item(STRUCT_MEMBER(m_voice, ended));
- save_item(STRUCT_MEMBER(m_voice, keyon));
- save_item(STRUCT_MEMBER(m_voice, looping));
- save_item(STRUCT_MEMBER(m_voice, mode));
- save_item(STRUCT_MEMBER(m_voice, fnum));
- save_item(STRUCT_MEMBER(m_voice, level));
- save_item(STRUCT_MEMBER(m_voice, pan));
- save_item(STRUCT_MEMBER(m_voice, start));
- save_item(STRUCT_MEMBER(m_voice, stop));
- save_item(STRUCT_MEMBER(m_voice, loop_start));
- save_item(STRUCT_MEMBER(m_voice, loop_end));
- save_item(STRUCT_MEMBER(m_voice, position));
- save_item(STRUCT_MEMBER(m_voice, signal));
- save_item(STRUCT_MEMBER(m_voice, step));
- save_item(STRUCT_MEMBER(m_voice, loop_signal));
- save_item(STRUCT_MEMBER(m_voice, loop_step));
- save_item(STRUCT_MEMBER(m_voice, loop_count));
- save_item(STRUCT_MEMBER(m_voice, output_left));
- save_item(STRUCT_MEMBER(m_voice, output_right));
- save_item(STRUCT_MEMBER(m_voice, output_pos));
- save_item(STRUCT_MEMBER(m_voice, last_sample));
- save_item(STRUCT_MEMBER(m_voice, curr_sample));
- save_item(STRUCT_MEMBER(m_voice, irq_schedule));
-
#if YMZ280B_MAKE_WAVS
m_wavresample = wav_open("resamp.wav", INTERNAL_SAMPLE_RATE, 2);
#endif
}
//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void ymz280b_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_voice))
+ .reg(NAME(m_current_register))
+ .reg(NAME(m_status_register))
+ .reg(NAME(m_irq_state))
+ .reg(NAME(m_irq_mask))
+ .reg(NAME(m_irq_enable))
+ .reg(NAME(m_keyon_enable))
+ .reg(NAME(m_ext_mem_enable))
+ .reg(NAME(m_ext_mem_address))
+ .reg(NAME(m_ext_readlatch))
+ .reg(NAME(m_ext_mem_address_hi))
+ .reg(NAME(m_ext_mem_address_mid));
+}
+
+//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
diff --git a/src/devices/sound/ymz280b.h b/src/devices/sound/ymz280b.h
index 5da3ea46cc3..5994a33b0ee 100644
--- a/src/devices/sound/ymz280b.h
+++ b/src/devices/sound/ymz280b.h
@@ -30,6 +30,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_post_load() override;
virtual void device_reset() override;
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override;
@@ -77,6 +78,34 @@ private:
u8 irq_schedule; /* 1 if the IRQ state is updated by timer */
emu_timer *timer;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(playing))
+ .reg(NAME(ended))
+ .reg(NAME(keyon))
+ .reg(NAME(looping))
+ .reg(NAME(mode))
+ .reg(NAME(fnum))
+ .reg(NAME(level))
+ .reg(NAME(pan))
+ .reg(NAME(start))
+ .reg(NAME(stop))
+ .reg(NAME(loop_start))
+ .reg(NAME(loop_end))
+ .reg(NAME(position))
+ .reg(NAME(signal))
+ .reg(NAME(step))
+ .reg(NAME(loop_signal))
+ .reg(NAME(loop_step))
+ .reg(NAME(loop_count))
+ .reg(NAME(output_left))
+ .reg(NAME(output_right))
+ .reg(NAME(output_pos))
+ .reg(NAME(last_sample))
+ .reg(NAME(curr_sample))
+ .reg(NAME(irq_schedule));
+ }
};
void update_irq_state();
diff --git a/src/devices/sound/ymz770.cpp b/src/devices/sound/ymz770.cpp
index 9d489d8a89d..918a749c3d7 100644
--- a/src/devices/sound/ymz770.cpp
+++ b/src/devices/sound/ymz770.cpp
@@ -88,50 +88,26 @@ void ymz770_device::device_start()
sequence.is_playing = false;
for (auto & sqc : m_sqcs)
sqc.is_playing = false;
+}
+
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+void ymz770_device::device_register_save(save_registrar &save)
+{
// register for save states
- save_item(NAME(m_cur_reg));
- save_item(NAME(m_mute));
- save_item(NAME(m_doen));
- save_item(NAME(m_vlma));
- save_item(NAME(m_vlma1));
- save_item(NAME(m_bsl));
- save_item(NAME(m_cpl));
-
- save_item(STRUCT_MEMBER(m_channels, phrase));
- save_item(STRUCT_MEMBER(m_channels, pan));
- save_item(STRUCT_MEMBER(m_channels, pan_delay));
- save_item(STRUCT_MEMBER(m_channels, pan1));
- save_item(STRUCT_MEMBER(m_channels, pan1_delay));
- save_item(STRUCT_MEMBER(m_channels, volume));
- save_item(STRUCT_MEMBER(m_channels, volume_target));
- save_item(STRUCT_MEMBER(m_channels, volume_delay));
- save_item(STRUCT_MEMBER(m_channels, volume2));
- save_item(STRUCT_MEMBER(m_channels, loop));
- save_item(STRUCT_MEMBER(m_channels, is_playing));
- save_item(STRUCT_MEMBER(m_channels, last_block));
- save_item(STRUCT_MEMBER(m_channels, is_paused));
- save_item(STRUCT_MEMBER(m_channels, output_remaining));
- save_item(STRUCT_MEMBER(m_channels, output_ptr));
- save_item(STRUCT_MEMBER(m_channels, atbl));
- save_item(STRUCT_MEMBER(m_channels, pptr));
- save_item(STRUCT_MEMBER(m_channels, output_data));
-
- save_item(STRUCT_MEMBER(m_sequences, delay));
- save_item(STRUCT_MEMBER(m_sequences, sequence));
- save_item(STRUCT_MEMBER(m_sequences, timer));
- save_item(STRUCT_MEMBER(m_sequences, stopchan));
- save_item(STRUCT_MEMBER(m_sequences, loop));
- save_item(STRUCT_MEMBER(m_sequences, bank));
- save_item(STRUCT_MEMBER(m_sequences, is_playing));
- save_item(STRUCT_MEMBER(m_sequences, is_paused));
- save_item(STRUCT_MEMBER(m_sequences, offset));
-
- save_item(STRUCT_MEMBER(m_sqcs, sqc));
- save_item(STRUCT_MEMBER(m_sqcs, loop));
- save_item(STRUCT_MEMBER(m_sqcs, is_playing));
- save_item(STRUCT_MEMBER(m_sqcs, is_waiting));
- save_item(STRUCT_MEMBER(m_sqcs, offset));
+ save.reg(NAME(m_cur_reg))
+ .reg(NAME(m_mute))
+ .reg(NAME(m_doen))
+ .reg(NAME(m_vlma))
+ .reg(NAME(m_vlma1))
+ .reg(NAME(m_bsl))
+ .reg(NAME(m_cpl))
+ .reg(NAME(m_channels))
+ .reg(NAME(m_sequences))
+ .reg(NAME(m_sqcs));
}
diff --git a/src/devices/sound/ymz770.h b/src/devices/sound/ymz770.h
index 6c87cef8de4..f312323bea7 100644
--- a/src/devices/sound/ymz770.h
+++ b/src/devices/sound/ymz770.h
@@ -31,6 +31,7 @@ public:
protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
virtual void sound_stream_update(sound_stream &stream, std::vector<read_stream_view> const &inputs, std::vector<write_stream_view> &outputs) override;
@@ -78,6 +79,28 @@ protected:
int output_ptr;
int atbl;
int pptr;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(phrase))
+ .reg(NAME(pan))
+ .reg(NAME(pan_delay))
+ .reg(NAME(pan1))
+ .reg(NAME(pan1_delay))
+ .reg(NAME(volume))
+ .reg(NAME(volume_target))
+ .reg(NAME(volume_delay))
+ .reg(NAME(volume2))
+ .reg(NAME(loop))
+ .reg(NAME(is_playing))
+ .reg(NAME(last_block))
+ .reg(NAME(is_paused))
+ .reg(NAME(output_remaining))
+ .reg(NAME(output_ptr))
+ .reg(NAME(atbl))
+ .reg(NAME(pptr))
+ .reg(NAME(output_data));
+ }
};
struct ymz_sequence
{
@@ -90,6 +113,19 @@ protected:
uint8_t bank;
bool is_playing;
bool is_paused;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(delay))
+ .reg(NAME(sequence))
+ .reg(NAME(timer))
+ .reg(NAME(stopchan))
+ .reg(NAME(loop))
+ .reg(NAME(bank))
+ .reg(NAME(is_playing))
+ .reg(NAME(is_paused))
+ .reg(NAME(offset));
+ }
};
struct ymz_sqc
{
@@ -98,6 +134,15 @@ protected:
uint32_t offset;
bool is_playing;
bool is_waiting;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(sqc))
+ .reg(NAME(loop))
+ .reg(NAME(is_playing))
+ .reg(NAME(is_waiting))
+ .reg(NAME(offset));
+ }
};
ymz_channel m_channels[16];