summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/bus/gba/rom.cpp89
-rw-r--r--src/devices/bus/gba/rom.h29
-rw-r--r--src/devices/bus/megadrive/stm95.cpp7
-rw-r--r--src/devices/bus/megadrive/stm95.h12
-rw-r--r--src/devices/bus/snes/bsx.cpp44
-rw-r--r--src/devices/bus/snes/bsx.h10
-rw-r--r--src/devices/bus/snes/spc7110.cpp152
-rw-r--r--src/devices/bus/snes/spc7110.h47
8 files changed, 242 insertions, 148 deletions
diff --git a/src/devices/bus/gba/rom.cpp b/src/devices/bus/gba/rom.cpp
index 643432b8433..fa6162a5a06 100644
--- a/src/devices/bus/gba/rom.cpp
+++ b/src/devices/bus/gba/rom.cpp
@@ -149,9 +149,13 @@ gba_rom_3dmatrix_device::gba_rom_3dmatrix_device(const machine_config &mconfig,
void gba_rom_device::device_start()
{
- save_item(NAME(m_gpio_regs));
- save_item(NAME(m_gpio_write_only));
- save_item(NAME(m_gpio_dirs));
+}
+
+void gba_rom_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_gpio_regs))
+ .reg(NAME(m_gpio_write_only))
+ .reg(NAME(m_gpio_dirs));
}
void gba_rom_device::device_reset()
@@ -174,8 +178,13 @@ void gba_rom_wariotws_device::device_start()
{
gba_rom_device::device_start();
m_rumble.resolve();
- save_item(NAME(m_last_val));
- save_item(NAME(m_counter));
+}
+
+void gba_rom_wariotws_device::device_register_save(save_registrar &save)
+{
+ gba_rom_sram_device::device_register_save(save);
+ save.reg(NAME(m_last_val))
+ .reg(NAME(m_counter));
}
void gba_rom_wariotws_device::device_reset()
@@ -204,12 +213,23 @@ void gba_rom_eeprom_device::device_start()
m_eeprom = std::make_unique<gba_eeprom_device>(machine(), (uint8_t*)get_nvram_base(), get_nvram_size(), 6);
}
+void gba_rom_eeprom_device::device_register_save(save_registrar &save)
+{
+ gba_rom_device::device_register_save(save);
+ save.reg(NAME(m_eeprom));
+}
+
void gba_rom_yoshiug_device::device_start()
{
gba_rom_eeprom_device::device_start();
- save_item(NAME(m_tilt_ready));
- save_item(NAME(m_xpos));
- save_item(NAME(m_ypos));
+}
+
+void gba_rom_yoshiug_device::device_register_save(save_registrar &save)
+{
+ gba_rom_eeprom_device::device_register_save(save);
+ save.reg(NAME(m_tilt_ready))
+ .reg(NAME(m_xpos))
+ .reg(NAME(m_ypos));
}
void gba_rom_yoshiug_device::device_reset()
@@ -227,13 +247,24 @@ void gba_rom_eeprom64_device::device_start()
m_eeprom = std::make_unique<gba_eeprom_device>(machine(), (uint8_t*)get_nvram_base(), get_nvram_size(), 14);
}
+void gba_rom_eeprom64_device::device_register_save(save_registrar &save)
+{
+ gba_rom_device::device_register_save(save);
+ save.reg(NAME(m_eeprom));
+}
+
void gba_rom_boktai_device::device_start()
{
gba_rom_eeprom64_device::device_start();
m_rtc = std::make_unique<gba_s3511_device>(machine());
+}
- save_item(NAME(m_last_val));
- save_item(NAME(m_counter));
+void gba_rom_boktai_device::device_register_save(save_registrar &save)
+{
+ gba_rom_eeprom64_device::device_register_save(save);
+ save.reg(NAME(m_rtc))
+ .reg(NAME(m_last_val))
+ .reg(NAME(m_counter));
}
void gba_rom_boktai_device::device_reset()
@@ -248,18 +279,36 @@ void gba_rom_flash_rtc_device::device_start()
m_rtc = std::make_unique<gba_s3511_device>(machine());
}
+void gba_rom_flash_rtc_device::device_register_save(save_registrar &save)
+{
+ gba_rom_flash_device::device_register_save(save);
+ save.reg(NAME(m_rtc));
+}
+
+
void gba_rom_flash1m_rtc_device::device_start()
{
gba_rom_device::device_start();
m_rtc = std::make_unique<gba_s3511_device>(machine());
}
+void gba_rom_flash1m_rtc_device::device_register_save(save_registrar &save)
+{
+ gba_rom_flash1m_device::device_register_save(save);
+ save.reg(NAME(m_rtc));
+}
+
void gba_rom_3dmatrix_device::device_start()
{
gba_rom_device::device_start();
- save_item(NAME(m_src));
- save_item(NAME(m_dst));
- save_item(NAME(m_nblock));
+}
+
+void gba_rom_3dmatrix_device::device_register_save(save_registrar &save)
+{
+ gba_rom_device::device_register_save(save);
+ save.reg(NAME(m_src))
+ .reg(NAME(m_dst))
+ .reg(NAME(m_nblock));
}
void gba_rom_3dmatrix_device::device_reset()
@@ -797,13 +846,6 @@ gba_s3511_device::gba_s3511_device(running_machine &machine) :
m_command = 0;
m_data_len = 1;
m_data[0] = 0;
-
- m_machine.save().save_item(m_phase, "GBA_RTC/m_phase");
- m_machine.save().save_item(m_data, "GBA_RTC/m_data");
- m_machine.save().save_item(m_last_val, "GBA_RTC/m_last_val");
- m_machine.save().save_item(m_bits, "GBA_RTC/m_bits");
- m_machine.save().save_item(m_command, "GBA_RTC/m_command");
- m_machine.save().save_item(m_data_len, "GBA_RTC/m_data_len");
}
@@ -962,13 +1004,6 @@ gba_eeprom_device::gba_eeprom_device(running_machine &machine, uint8_t *eeprom,
m_data = eeprom;
m_data_size = size;
m_addr_bits = addr_bits;
-
- m_machine.save().save_item(m_state, "GBA_EEPROM/m_state");
- m_machine.save().save_item(m_command, "GBA_EEPROM/m_command");
- m_machine.save().save_item(m_count, "GBA_EEPROM/m_count");
- m_machine.save().save_item(m_addr, "GBA_EEPROM/m_addr");
- m_machine.save().save_item(m_bits, "GBA_EEPROM/m_bits");
- m_machine.save().save_item(m_eep_data, "GBA_EEPROM/m_eep_data");
}
uint32_t gba_eeprom_device::read()
diff --git a/src/devices/bus/gba/rom.h b/src/devices/bus/gba/rom.h
index 3a1ac4005a1..d817087e0a7 100644
--- a/src/devices/bus/gba/rom.h
+++ b/src/devices/bus/gba/rom.h
@@ -22,6 +22,16 @@ public:
int read_line();
void write(uint16_t data, int gpio_dirs);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_phase))
+ .reg(NAME(m_data))
+ .reg(NAME(m_last_val))
+ .reg(NAME(m_bits))
+ .reg(NAME(m_command))
+ .reg(NAME(m_data_len));
+ }
+
protected:
enum
{
@@ -53,6 +63,16 @@ public:
uint32_t read();
void write(uint32_t data);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_state))
+ .reg(NAME(m_command))
+ .reg(NAME(m_count))
+ .reg(NAME(m_addr))
+ .reg(NAME(m_bits))
+ .reg(NAME(m_eep_data));
+ }
+
protected:
enum
{
@@ -104,6 +124,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
private:
@@ -163,6 +184,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;
private:
@@ -214,6 +236,7 @@ public:
protected:
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
private:
std::unique_ptr<gba_s3511_device> m_rtc;
@@ -260,6 +283,7 @@ public:
protected:
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
private:
std::unique_ptr<gba_s3511_device> m_rtc;
@@ -283,6 +307,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
private:
std::unique_ptr<gba_eeprom_device> m_eeprom;
@@ -306,6 +331,7 @@ public:
protected:
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
private:
@@ -333,6 +359,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
std::unique_ptr<gba_eeprom_device> m_eeprom;
};
@@ -354,6 +381,7 @@ public:
private:
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
virtual void device_reset() override;
std::unique_ptr<gba_s3511_device> m_rtc;
@@ -377,6 +405,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;
private:
diff --git a/src/devices/bus/megadrive/stm95.cpp b/src/devices/bus/megadrive/stm95.cpp
index e3fca0bbffe..21b729991a6 100644
--- a/src/devices/bus/megadrive/stm95.cpp
+++ b/src/devices/bus/megadrive/stm95.cpp
@@ -21,13 +21,6 @@ stm95_eeprom_device::stm95_eeprom_device(running_machine &machine, uint8_t *eepr
m_machine(machine)
{
eeprom_data = eeprom;
- m_machine.save().save_item(latch, "STM95/latch");
- m_machine.save().save_item(reset_line, "STM95/reset_line");
- m_machine.save().save_item(sck_line, "STM95/sck_line");
- m_machine.save().save_item(WEL, "STM95/WEL");
- m_machine.save().save_item(stream_pos, "STM95/stream_pos");
- m_machine.save().save_item(stream_data, "STM95/stream_data");
- m_machine.save().save_item(eeprom_addr, "STM95/eeprom_addr");
}
void stm95_eeprom_device::set_cs_line(int state)
diff --git a/src/devices/bus/megadrive/stm95.h b/src/devices/bus/megadrive/stm95.h
index c04651d742c..efb9e467492 100644
--- a/src/devices/bus/megadrive/stm95.h
+++ b/src/devices/bus/megadrive/stm95.h
@@ -29,6 +29,17 @@ public:
void set_sck_line(int state);
int get_so_line(void);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(latch))
+ .reg(NAME(reset_line))
+ .reg(NAME(sck_line))
+ .reg(NAME(WEL))
+ .reg(NAME(stream_pos))
+ .reg(NAME(stream_data))
+ .reg(NAME(eeprom_addr));
+ }
+
protected:
enum STMSTATE
{
@@ -73,6 +84,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override { save.reg(NAME(m_stm95)); }
virtual void device_reset() override;
private:
diff --git a/src/devices/bus/snes/bsx.cpp b/src/devices/bus/snes/bsx.cpp
index 6aacaa3ed2c..b61ff480a32 100644
--- a/src/devices/bus/snes/bsx.cpp
+++ b/src/devices/bus/snes/bsx.cpp
@@ -70,15 +70,21 @@ void sns_rom_bsx_device::device_start()
m_cart_regs[7] = 0x80;
m_cart_regs[8] = 0x80;
access_update();
+}
+
+void sns_rom_bsx_device::device_register_save(save_registrar &save)
+{
+ sns_rom_device::device_register_save(save);
- save_item(NAME(m_cart_regs));
- save_item(NAME(access_00_1f));
- save_item(NAME(access_80_9f));
- save_item(NAME(access_40_4f));
- save_item(NAME(access_50_5f));
- save_item(NAME(access_60_6f));
- save_item(NAME(rom_access));
- save_item(NAME(m_pram));
+ save.reg(NAME(m_base_unit))
+ .reg(NAME(m_cart_regs))
+ .reg(NAME(access_00_1f))
+ .reg(NAME(access_80_9f))
+ .reg(NAME(access_40_4f))
+ .reg(NAME(access_50_5f))
+ .reg(NAME(access_60_6f))
+ .reg(NAME(rom_access))
+ .reg(NAME(m_pram));
}
void sns_rom_bsx_device::device_reset()
@@ -96,12 +102,18 @@ void sns_rom_bsxhi_device::device_start()
void sns_rom_bsmempak_device::device_start()
{
- save_item(NAME(m_command));
- save_item(NAME(m_write_old));
- save_item(NAME(m_write_new));
- save_item(NAME(m_flash_enable));
- save_item(NAME(m_read_enable));
- save_item(NAME(m_write_enable));
+}
+
+void sns_rom_bsmempak_device::device_register_save(save_registrar &save)
+{
+ sns_rom_device::device_register_save(save);
+
+ save.reg(NAME(m_command))
+ .reg(NAME(m_write_old))
+ .reg(NAME(m_write_new))
+ .reg(NAME(m_flash_enable))
+ .reg(NAME(m_read_enable))
+ .reg(NAME(m_write_enable));
}
void sns_rom_bsmempak_device::device_reset()
@@ -122,10 +134,6 @@ void sns_rom_bsmempak_device::device_reset()
sns_rom_bsx_device::bsx_base::bsx_base(running_machine &machine)
: r2192_minute(0), m_machine(machine)
{
- m_machine.save().save_item(regs, "SNES_BSX/regs");
- m_machine.save().save_item(r2192_counter, "SNES_BSX/r2192_counter");
- m_machine.save().save_item(r2192_hour, "SNES_BSX/r2192_hour");
- m_machine.save().save_item(r2192_second, "SNES_BSX/r2192_second");
}
void sns_rom_bsx_device::bsx_base::init()
diff --git a/src/devices/bus/snes/bsx.h b/src/devices/bus/snes/bsx.h
index e144ff118ff..881cd1e1a64 100644
--- a/src/devices/bus/snes/bsx.h
+++ b/src/devices/bus/snes/bsx.h
@@ -36,6 +36,14 @@ protected:
uint8_t read(uint32_t offset);
void write(uint32_t offset, uint8_t data);
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(regs))
+ .reg(NAME(r2192_counter))
+ .reg(NAME(r2192_hour))
+ .reg(NAME(r2192_second));
+ }
+
private:
// regs
uint8_t regs[0x18]; // 0x2188-0x219f
@@ -51,6 +59,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_add_mconfig(machine_config &config) override;
@@ -139,6 +148,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;
// flash regs
diff --git a/src/devices/bus/snes/spc7110.cpp b/src/devices/bus/snes/spc7110.cpp
index 20d59dc681a..8ac928788d5 100644
--- a/src/devices/bus/snes/spc7110.cpp
+++ b/src/devices/bus/snes/spc7110.cpp
@@ -127,57 +127,63 @@ void sns_rom_spc7110_device::spc7110_start()
m_r4840 = 0x00;
m_r4841 = 0x00;
m_r4842 = 0x00;
+}
- save_item(NAME(m_r4801));
- save_item(NAME(m_r4802));
- save_item(NAME(m_r4803));
- save_item(NAME(m_r4804));
- save_item(NAME(m_r4805));
- save_item(NAME(m_r4806));
- save_item(NAME(m_r4807));
- save_item(NAME(m_r4808));
- save_item(NAME(m_r4809));
- save_item(NAME(m_r480a));
- save_item(NAME(m_r480b));
- save_item(NAME(m_r480c));
- save_item(NAME(m_r4811));
- save_item(NAME(m_r4812));
- save_item(NAME(m_r4813));
- save_item(NAME(m_r4814));
- save_item(NAME(m_r4815));
- save_item(NAME(m_r4816));
- save_item(NAME(m_r4817));
- save_item(NAME(m_r4818));
- save_item(NAME(m_r481x));
- save_item(NAME(m_r4814_latch));
- save_item(NAME(m_r4815_latch));
- save_item(NAME(m_r4820));
- save_item(NAME(m_r4821));
- save_item(NAME(m_r4822));
- save_item(NAME(m_r4823));
- save_item(NAME(m_r4824));
- save_item(NAME(m_r4825));
- save_item(NAME(m_r4826));
- save_item(NAME(m_r4827));
- save_item(NAME(m_r4828));
- save_item(NAME(m_r4829));
- save_item(NAME(m_r482a));
- save_item(NAME(m_r482b));
- save_item(NAME(m_r482c));
- save_item(NAME(m_r482d));
- save_item(NAME(m_r482e));
- save_item(NAME(m_r482f));
- save_item(NAME(m_r4830));
- save_item(NAME(m_r4831));
- save_item(NAME(m_r4832));
- save_item(NAME(m_r4833));
- save_item(NAME(m_r4834));
- save_item(NAME(m_r4840));
- save_item(NAME(m_r4841));
- save_item(NAME(m_r4842));
- save_item(NAME(m_dx_offset));
- save_item(NAME(m_ex_offset));
- save_item(NAME(m_fx_offset));
+void sns_rom_spc7110_device::device_register_save(save_registrar &save)
+{
+ sns_rom21_device::device_register_save(save);
+
+ save.reg(NAME(m_r4801))
+ .reg(NAME(m_r4802))
+ .reg(NAME(m_r4803))
+ .reg(NAME(m_r4804))
+ .reg(NAME(m_r4805))
+ .reg(NAME(m_r4806))
+ .reg(NAME(m_r4807))
+ .reg(NAME(m_r4808))
+ .reg(NAME(m_r4809))
+ .reg(NAME(m_r480a))
+ .reg(NAME(m_r480b))
+ .reg(NAME(m_r480c))
+ .reg(NAME(m_decomp))
+ .reg(NAME(m_r4811))
+ .reg(NAME(m_r4812))
+ .reg(NAME(m_r4813))
+ .reg(NAME(m_r4814))
+ .reg(NAME(m_r4815))
+ .reg(NAME(m_r4816))
+ .reg(NAME(m_r4817))
+ .reg(NAME(m_r4818))
+ .reg(NAME(m_r481x))
+ .reg(NAME(m_r4814_latch))
+ .reg(NAME(m_r4815_latch))
+ .reg(NAME(m_r4820))
+ .reg(NAME(m_r4821))
+ .reg(NAME(m_r4822))
+ .reg(NAME(m_r4823))
+ .reg(NAME(m_r4824))
+ .reg(NAME(m_r4825))
+ .reg(NAME(m_r4826))
+ .reg(NAME(m_r4827))
+ .reg(NAME(m_r4828))
+ .reg(NAME(m_r4829))
+ .reg(NAME(m_r482a))
+ .reg(NAME(m_r482b))
+ .reg(NAME(m_r482c))
+ .reg(NAME(m_r482d))
+ .reg(NAME(m_r482e))
+ .reg(NAME(m_r482f))
+ .reg(NAME(m_r4830))
+ .reg(NAME(m_r4831))
+ .reg(NAME(m_r4832))
+ .reg(NAME(m_r4833))
+ .reg(NAME(m_r4834))
+ .reg(NAME(m_r4840))
+ .reg(NAME(m_r4841))
+ .reg(NAME(m_r4842))
+ .reg(NAME(m_dx_offset))
+ .reg(NAME(m_ex_offset))
+ .reg(NAME(m_fx_offset));
}
void sns_rom_spc7110_device::device_start()
@@ -212,8 +218,6 @@ void sns_rom_spc7110rtc_device::device_start()
mapper specific handlers
-------------------------------------------------*/
-#define SPC7110_DECOMP_BUFFER_SIZE 64
-
static const uint8_t spc7110_evolution_table[53][4] =
{
{ 0x5a, 1, 1, 1 },
@@ -331,50 +335,6 @@ sns_rom_spc7110_device::SPC7110_Decomp::SPC7110_Decomp(running_machine &machine)
m_morton32[2][i] = m_morton32[0][i] << 4;
m_morton32[3][i] = m_morton32[0][i] << 6;
}
-
- m_machine.save().save_item(m_decomp_mode, "SNES_SPC7110/m_decomp_mode");
- m_machine.save().save_item(m_decomp_offset, "SNES_SPC7110/m_decomp_offset");
- m_machine.save().save_pointer(m_decomp_buffer.get(), "SNES_SPC7110/m_decomp_buffer", SPC7110_DECOMP_BUFFER_SIZE);
- m_machine.save().save_item(m_decomp_buffer_rdoffset, "SNES_SPC7110/m_decomp_buffer_rdoffset");
- m_machine.save().save_item(m_decomp_buffer_wroffset, "SNES_SPC7110/m_decomp_buffer_wroffset");
- m_machine.save().save_item(m_decomp_buffer_length, "SNES_SPC7110/m_decomp_buffer_length");
-
- for (int i = 0; i < 32; i++)
- {
- m_machine.save().save_item(m_context[i].index, "SNES_SPC7110/m_context[i].index", i);
- m_machine.save().save_item(m_context[i].invert, "SNES_SPC7110/m_context[i].invert", i);
- }
-
- m_machine.save().save_item(m_m0_val, "SNES_SPC7110/m_m0_val");
- m_machine.save().save_item(m_m0_in, "SNES_SPC7110/m_m0_in");
- m_machine.save().save_item(m_m0_span, "SNES_SPC7110/m_m0_span");
- m_machine.save().save_item(m_m0_out, "SNES_SPC7110/m_m0_out");
- m_machine.save().save_item(m_m0_inverts, "SNES_SPC7110/m_m0_inverts");
- m_machine.save().save_item(m_m0_lps, "SNES_SPC7110/m_m0_lps");
- m_machine.save().save_item(m_m0_in_count, "SNES_SPC7110/m_m0_in_count");
-
- m_machine.save().save_item(m_m1_pixelorder, "SNES_SPC7110/m_m1_pixelorder");
- m_machine.save().save_item(m_m1_realorder, "SNES_SPC7110/m_m1_realorder");
- m_machine.save().save_item(m_m1_val, "SNES_SPC7110/m_m1_val");
- m_machine.save().save_item(m_m1_in, "SNES_SPC7110/m_m1_in");
- m_machine.save().save_item(m_m1_span, "SNES_SPC7110/m_m1_span");
- m_machine.save().save_item(m_m1_out, "SNES_SPC7110/m_m1_out");
- m_machine.save().save_item(m_m1_inverts, "SNES_SPC7110/m_m1_inverts");
- m_machine.save().save_item(m_m1_lps, "SNES_SPC7110/m_m1_lps");
- m_machine.save().save_item(m_m1_in_count, "SNES_SPC7110/m_m1_in_count");
-
- m_machine.save().save_item(m_m2_pixelorder, "SNES_SPC7110/m_m2_pixelorder");
- m_machine.save().save_item(m_m2_realorder, "SNES_SPC7110/m_m2_realorder");
- m_machine.save().save_item(m_m2_bitplanebuffer, "SNES_SPC7110/m_m2_bitplanebuffer");
- m_machine.save().save_item(m_m2_buffer_index, "SNES_SPC7110/m_m2_buffer_index");
- m_machine.save().save_item(m_m2_val, "SNES_SPC7110/m_m2_val");
- m_machine.save().save_item(m_m2_in, "SNES_SPC7110/m_m2_in");
- m_machine.save().save_item(m_m2_span, "SNES_SPC7110/m_m2_span");
- m_machine.save().save_item(m_m2_out0, "SNES_SPC7110/m_m2_out0");
- m_machine.save().save_item(m_m2_out1, "SNES_SPC7110/m_m2_out1");
- m_machine.save().save_item(m_m2_inverts, "SNES_SPC7110/m_m2_inverts");
- m_machine.save().save_item(m_m2_lps, "SNES_SPC7110/m_m2_lps");
- m_machine.save().save_item(m_m2_in_count, "SNES_SPC7110/m_m2_in_count");
}
void sns_rom_spc7110_device::SPC7110_Decomp::reset()
diff --git a/src/devices/bus/snes/spc7110.h b/src/devices/bus/snes/spc7110.h
index a7c798244c1..57104749bc2 100644
--- a/src/devices/bus/snes/spc7110.h
+++ b/src/devices/bus/snes/spc7110.h
@@ -31,6 +31,7 @@ protected:
// device-level overrides
virtual void device_start() override;
+ virtual void device_register_save(save_registrar &save) override;
class SPC7110_Decomp
{
@@ -48,6 +49,50 @@ protected:
void mode1(uint8_t init, uint8_t *ROM, uint32_t len);
void mode2(uint8_t init, uint8_t *ROM, uint32_t len);
+ static constexpr int SPC7110_DECOMP_BUFFER_SIZE = 64;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(m_decomp_mode))
+ .reg(NAME(m_decomp_offset))
+ .reg(NAME(m_decomp_buffer), SPC7110_DECOMP_BUFFER_SIZE)
+ .reg(NAME(m_decomp_buffer_rdoffset))
+ .reg(NAME(m_decomp_buffer_wroffset))
+ .reg(NAME(m_decomp_buffer_length))
+ .reg(NAME(m_context))
+
+ .reg(NAME(m_m0_val))
+ .reg(NAME(m_m0_in))
+ .reg(NAME(m_m0_span))
+ .reg(NAME(m_m0_out))
+ .reg(NAME(m_m0_inverts))
+ .reg(NAME(m_m0_lps))
+ .reg(NAME(m_m0_in_count))
+
+ .reg(NAME(m_m1_pixelorder))
+ .reg(NAME(m_m1_realorder))
+ .reg(NAME(m_m1_val))
+ .reg(NAME(m_m1_in))
+ .reg(NAME(m_m1_span))
+ .reg(NAME(m_m1_out))
+ .reg(NAME(m_m1_inverts))
+ .reg(NAME(m_m1_lps))
+ .reg(NAME(m_m1_in_count))
+
+ .reg(NAME(m_m2_pixelorder))
+ .reg(NAME(m_m2_realorder))
+ .reg(NAME(m_m2_bitplanebuffer))
+ .reg(NAME(m_m2_buffer_index))
+ .reg(NAME(m_m2_val))
+ .reg(NAME(m_m2_in))
+ .reg(NAME(m_m2_span))
+ .reg(NAME(m_m2_out0))
+ .reg(NAME(m_m2_out1))
+ .reg(NAME(m_m2_inverts))
+ .reg(NAME(m_m2_lps))
+ .reg(NAME(m_m2_in_count));
+ }
+
private:
uint8_t dataread(uint8_t *ROM, uint32_t len);
@@ -70,6 +115,8 @@ protected:
{
uint8_t index;
uint8_t invert;
+
+ void register_save(save_registrar &save) { save.reg(NAME(index)).reg(NAME(invert)); }
} m_context[32];
uint32_t m_morton16[2][256];