summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2021-04-14 00:53:58 -0700
committer Aaron Giles <aaron@aarongiles.com>2021-04-14 00:53:58 -0700
commit6bfb3d997605a4dd1ed4274dd076bc478d570985 (patch)
tree88e5dea9bed7e7d6435b23c2d615589ef4fdc285
parent2843b3739446528ec3f3cca4b7156f3789e20be0 (diff)
Convert STRUCT_MEMBERs into proper struct saves for devices/machine/*
-rw-r--r--src/devices/machine/am9517a.cpp45
-rw-r--r--src/devices/machine/am9517a.h3
-rw-r--r--src/devices/machine/gt64xxx.cpp34
-rw-r--r--src/devices/machine/gt64xxx.h3
-rw-r--r--src/devices/machine/hd63450.cpp30
-rw-r--r--src/devices/machine/hd63450.h22
-rw-r--r--src/devices/machine/i8257.cpp33
-rw-r--r--src/devices/machine/i8257.h3
-rw-r--r--src/devices/machine/ns32081.cpp23
-rw-r--r--src/devices/machine/ns32081.h3
-rw-r--r--src/devices/machine/pci.cpp15
-rw-r--r--src/devices/machine/pci.h3
-rw-r--r--src/devices/machine/sa1110.cpp152
-rw-r--r--src/devices/machine/sa1110.h163
-rw-r--r--src/devices/machine/scc68070.cpp94
-rw-r--r--src/devices/machine/scc68070.h59
-rw-r--r--src/devices/machine/spg290_ppu.cpp46
-rw-r--r--src/devices/machine/spg290_ppu.h12
18 files changed, 434 insertions, 309 deletions
diff --git a/src/devices/machine/am9517a.cpp b/src/devices/machine/am9517a.cpp
index 4e99e678f20..0d58c0cf788 100644
--- a/src/devices/machine/am9517a.cpp
+++ b/src/devices/machine/am9517a.cpp
@@ -482,27 +482,6 @@ void am9517a_device::device_start()
elem.m_mode = 0;
}
- // state saving
- save_item(NAME(m_msb));
- save_item(NAME(m_hreq));
- save_item(NAME(m_hack));
- save_item(NAME(m_ready));
- save_item(NAME(m_eop));
- save_item(NAME(m_state));
- save_item(NAME(m_current_channel));
- save_item(NAME(m_last_channel));
- save_item(NAME(m_command));
- save_item(NAME(m_mask));
- save_item(NAME(m_status));
- save_item(NAME(m_temp));
- save_item(NAME(m_request));
-
- save_item(STRUCT_MEMBER(m_channel, m_address));
- save_item(STRUCT_MEMBER(m_channel, m_count));
- save_item(STRUCT_MEMBER(m_channel, m_base_address));
- save_item(STRUCT_MEMBER(m_channel, m_base_count));
- save_item(STRUCT_MEMBER(m_channel, m_mode));
-
m_address_mask = 0xffff;
// force clear upon initial reset
@@ -511,6 +490,30 @@ void am9517a_device::device_start()
//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void am9517a_device::device_register_save(save_registrar &save)
+{
+ // state saving
+ save.reg(NAME(m_channel))
+ .reg(NAME(m_msb))
+ .reg(NAME(m_hreq))
+ .reg(NAME(m_hack))
+ .reg(NAME(m_ready))
+ .reg(NAME(m_eop))
+ .reg(NAME(m_state))
+ .reg(NAME(m_current_channel))
+ .reg(NAME(m_last_channel))
+ .reg(NAME(m_command))
+ .reg(NAME(m_mask))
+ .reg(NAME(m_status))
+ .reg(NAME(m_temp))
+ .reg(NAME(m_request));
+}
+
+
+//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
diff --git a/src/devices/machine/am9517a.h b/src/devices/machine/am9517a.h
index 54afb057dae..96b007ede79 100644
--- a/src/devices/machine/am9517a.h
+++ b/src/devices/machine/am9517a.h
@@ -80,6 +80,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 execute_run() override;
virtual void end_of_process();
@@ -99,6 +100,8 @@ protected:
uint32_t m_base_address;
uint32_t m_base_count;
uint8_t m_mode;
+
+ void register_save(save_registrar &save) { save.reg(NAME(m_address)).reg(NAME(m_count)).reg(NAME(m_base_address)).reg(NAME(m_base_count)).reg(NAME(m_mode)); }
} m_channel[4];
int m_msb;
diff --git a/src/devices/machine/gt64xxx.cpp b/src/devices/machine/gt64xxx.cpp
index 54ea16d5e3d..0850a280e7b 100644
--- a/src/devices/machine/gt64xxx.cpp
+++ b/src/devices/machine/gt64xxx.cpp
@@ -232,26 +232,24 @@ void gt64xxx_device::device_start()
m_timer[1].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::timer_callback), this));
m_timer[2].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::timer_callback), this));
m_timer[3].timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(gt64xxx_device::timer_callback), this));
+}
+void gt64xxx_device::device_register_save(save_registrar &save)
+{
// Save states
- save_item(NAME(m_pci_stall_state));
- save_item(NAME(m_retry_count));
- save_item(NAME(m_pci_cpu_stalled));
- save_item(NAME(m_stall_windex));
- save_item(NAME(m_cpu_stalled_offset));
- save_item(NAME(m_cpu_stalled_data));
- save_item(NAME(m_cpu_stalled_mem_mask));
- save_item(NAME(m_prev_addr));
- save_item(NAME(m_reg));
- save_item(STRUCT_MEMBER(m_timer, active));
- save_item(STRUCT_MEMBER(m_timer, count));
- save_item(NAME(m_dma_active));
- // m_ram[4]
- save_pointer(NAME(m_ram[0].data()), m_simm_size[0] / 4);
- save_pointer(NAME(m_ram[1].data()), m_simm_size[1] / 4);
- save_pointer(NAME(m_ram[2].data()), m_simm_size[2] / 4);
- save_pointer(NAME(m_ram[3].data()), m_simm_size[3] / 4);
- save_item(NAME(m_last_dma));
+ save.reg(NAME(m_pci_stall_state))
+ .reg(NAME(m_retry_count))
+ .reg(NAME(m_pci_cpu_stalled))
+ .reg(NAME(m_stall_windex))
+ .reg(NAME(m_cpu_stalled_offset))
+ .reg(NAME(m_cpu_stalled_data))
+ .reg(NAME(m_cpu_stalled_mem_mask))
+ .reg(NAME(m_prev_addr))
+ .reg(NAME(m_reg))
+ .reg(NAME(m_timer))
+ .reg(NAME(m_dma_active))
+ .reg(NAME(m_ram))
+ .reg(NAME(m_last_dma));
}
void gt64xxx_device::device_post_load()
diff --git a/src/devices/machine/gt64xxx.h b/src/devices/machine/gt64xxx.h
index 8f5bd7db079..8a9dcab2604 100644
--- a/src/devices/machine/gt64xxx.h
+++ b/src/devices/machine/gt64xxx.h
@@ -75,6 +75,7 @@ protected:
virtual space_config_vector memory_space_config() const override;
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
private:
@@ -89,6 +90,8 @@ private:
emu_timer * timer;
uint32_t count;
uint8_t active;
+
+ void register_save(save_registrar &save) { save.reg(NAME(count)).reg(NAME(active)); }
};
struct galileo_addr_map
diff --git a/src/devices/machine/hd63450.cpp b/src/devices/machine/hd63450.cpp
index 86d8a9e101c..f11b2935c83 100644
--- a/src/devices/machine/hd63450.cpp
+++ b/src/devices/machine/hd63450.cpp
@@ -51,29 +51,15 @@ void hd63450_device::device_start()
// Initialise timers and registers
for (int x = 0; x < 4; x++)
m_timer[x] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(hd63450_device::dma_transfer_timer), this));
+}
- save_item(STRUCT_MEMBER(m_reg, csr));
- save_item(STRUCT_MEMBER(m_reg, cer));
- save_item(STRUCT_MEMBER(m_reg, dcr));
- save_item(STRUCT_MEMBER(m_reg, ocr));
- save_item(STRUCT_MEMBER(m_reg, scr));
- save_item(STRUCT_MEMBER(m_reg, ccr));
- save_item(STRUCT_MEMBER(m_reg, mtc));
- save_item(STRUCT_MEMBER(m_reg, mar));
- save_item(STRUCT_MEMBER(m_reg, dar));
- save_item(STRUCT_MEMBER(m_reg, btc));
- save_item(STRUCT_MEMBER(m_reg, niv));
- save_item(STRUCT_MEMBER(m_reg, eiv));
- save_item(STRUCT_MEMBER(m_reg, mfc));
- save_item(STRUCT_MEMBER(m_reg, cpr));
- save_item(STRUCT_MEMBER(m_reg, dfc));
- save_item(STRUCT_MEMBER(m_reg, bfc));
- save_item(STRUCT_MEMBER(m_reg, gcr));
-
- save_item(NAME(m_transfer_size));
- save_item(NAME(m_halted));
- save_item(NAME(m_drq_state));
- save_item(NAME(m_irq_channel));
+void hd63450_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_reg))
+ .reg(NAME(m_transfer_size))
+ .reg(NAME(m_halted))
+ .reg(NAME(m_drq_state))
+ .reg(NAME(m_irq_channel));
}
void hd63450_device::device_reset()
diff --git a/src/devices/machine/hd63450.h b/src/devices/machine/hd63450.h
index 5aa17321090..30752d0bd95 100644
--- a/src/devices/machine/hd63450.h
+++ b/src/devices/machine/hd63450.h
@@ -56,6 +56,7 @@ protected:
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
private:
struct hd63450_regs
@@ -78,6 +79,27 @@ private:
uint8_t dfc; // [31] Device Function Code (R/W)
uint8_t bfc; // [39] Base Function Code (R/W)
uint8_t gcr; // [3f] General Control Register (R/W)
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(csr))
+ .reg(NAME(cer))
+ .reg(NAME(dcr))
+ .reg(NAME(ocr))
+ .reg(NAME(scr))
+ .reg(NAME(ccr))
+ .reg(NAME(mtc))
+ .reg(NAME(mar))
+ .reg(NAME(dar))
+ .reg(NAME(btc))
+ .reg(NAME(niv))
+ .reg(NAME(eiv))
+ .reg(NAME(mfc))
+ .reg(NAME(cpr))
+ .reg(NAME(dfc))
+ .reg(NAME(bfc))
+ .reg(NAME(gcr));
+ }
};
devcb_write_line m_irq_callback;
diff --git a/src/devices/machine/i8257.cpp b/src/devices/machine/i8257.cpp
index 663c5851abf..5882e75cabe 100644
--- a/src/devices/machine/i8257.cpp
+++ b/src/devices/machine/i8257.cpp
@@ -297,22 +297,27 @@ void i8257_device::device_start()
m_in_ior_cb.resolve_all_safe(0);
m_out_iow_cb.resolve_all_safe();
m_out_dack_cb.resolve_all_safe();
+}
+
+
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+void i8257_device::device_register_save(save_registrar &save)
+{
// state saving
- save_item(NAME(m_msb));
- save_item(NAME(m_hreq));
- save_item(NAME(m_hack));
- save_item(NAME(m_ready));
- save_item(NAME(m_state));
- save_item(NAME(m_current_channel));
- save_item(NAME(m_last_channel));
- save_item(NAME(m_transfer_mode));
- save_item(NAME(m_status));
- save_item(NAME(m_request));
-
- save_item(STRUCT_MEMBER(m_channel, m_address));
- save_item(STRUCT_MEMBER(m_channel, m_count));
- save_item(STRUCT_MEMBER(m_channel, m_mode));
+ save.reg(NAME(m_msb))
+ .reg(NAME(m_hreq))
+ .reg(NAME(m_hack))
+ .reg(NAME(m_ready))
+ .reg(NAME(m_state))
+ .reg(NAME(m_current_channel))
+ .reg(NAME(m_last_channel))
+ .reg(NAME(m_transfer_mode))
+ .reg(NAME(m_status))
+ .reg(NAME(m_request))
+ .reg(NAME(m_channel));
}
diff --git a/src/devices/machine/i8257.h b/src/devices/machine/i8257.h
index df1f74a4858..b73703e6e23 100644
--- a/src/devices/machine/i8257.h
+++ b/src/devices/machine/i8257.h
@@ -66,6 +66,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 execute_run() override;
int m_icount;
@@ -112,6 +113,8 @@ private:
uint16_t m_address;
uint16_t m_count;
uint8_t m_mode;
+
+ void register_save(save_registrar &save) { save.reg(NAME(m_address)).reg(NAME(m_count)).reg(NAME(m_mode)); }
} m_channel[4];
};
diff --git a/src/devices/machine/ns32081.cpp b/src/devices/machine/ns32081.cpp
index c27ffde6595..6eb3cb157f0 100644
--- a/src/devices/machine/ns32081.cpp
+++ b/src/devices/machine/ns32081.cpp
@@ -89,20 +89,21 @@ ns32081_device::ns32081_device(machine_config const &mconfig, char const *tag, d
void ns32081_device::device_start()
{
- save_item(NAME(m_fsr));
- save_item(NAME(m_f));
+ m_complete = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ns32081_device::complete), this));
+}
- save_item(NAME(m_idbyte));
- save_item(NAME(m_opword));
- save_item(STRUCT_MEMBER(m_op, expected));
- save_item(STRUCT_MEMBER(m_op, issued));
- save_item(STRUCT_MEMBER(m_op, value));
- save_item(NAME(m_status));
+void ns32081_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_fsr))
+ .reg(NAME(m_f))
- save_item(NAME(m_state));
- save_item(NAME(m_tcy));
+ .reg(NAME(m_idbyte))
+ .reg(NAME(m_opword))
+ .reg(NAME(m_op))
+ .reg(NAME(m_status))
- m_complete = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ns32081_device::complete), this));
+ .reg(NAME(m_state))
+ .reg(NAME(m_tcy));
}
void ns32081_device::device_reset()
diff --git a/src/devices/machine/ns32081.h b/src/devices/machine/ns32081.h
index 4097494c830..ed512f555b2 100644
--- a/src/devices/machine/ns32081.h
+++ b/src/devices/machine/ns32081.h
@@ -27,6 +27,7 @@ protected:
// device_t overrides
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
void execute();
void complete(void *buf, s32 param);
@@ -46,6 +47,8 @@ private:
unsigned expected;
unsigned issued;
u64 value;
+
+ void register_save(save_registrar &save) { save.reg(NAME(expected)).reg(NAME(issued)).reg(NAME(value)); }
}
m_op[3];
u16 m_status;
diff --git a/src/devices/machine/pci.cpp b/src/devices/machine/pci.cpp
index 2620f1fc642..74574ae5482 100644
--- a/src/devices/machine/pci.cpp
+++ b/src/devices/machine/pci.cpp
@@ -103,13 +103,16 @@ void pci_device::device_start()
bank_count = 0;
bank_reg_count = 0;
+}
- save_item(STRUCT_MEMBER(bank_infos, adr));
- save_item(NAME(command));
- save_item(NAME(command_mask));
- save_item(NAME(status));
- save_item(NAME(intr_line));
- save_item(NAME(intr_pin));
+void pci_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(bank_infos))
+ .reg(NAME(command))
+ .reg(NAME(command_mask))
+ .reg(NAME(status))
+ .reg(NAME(intr_line))
+ .reg(NAME(intr_pin));
}
void pci_device::device_reset()
diff --git a/src/devices/machine/pci.h b/src/devices/machine/pci.h
index 37ad677a476..f9469fd2237 100644
--- a/src/devices/machine/pci.h
+++ b/src/devices/machine/pci.h
@@ -92,6 +92,8 @@ protected:
uint64_t adr;
uint32_t size;
int flags;
+
+ void register_save(save_registrar &save) { save.reg(NAME(adr)); }
};
struct bank_reg_info {
@@ -114,6 +116,7 @@ protected:
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
void skip_map_regs(int count);
void add_map(uint64_t size, int flags, const address_map_constructor &map, device_t *relative_to = nullptr);
diff --git a/src/devices/machine/sa1110.cpp b/src/devices/machine/sa1110.cpp
index 11afedeef51..da5e4212db8 100644
--- a/src/devices/machine/sa1110.cpp
+++ b/src/devices/machine/sa1110.cpp
@@ -2297,160 +2297,44 @@ void sa1110_periphs_device::dma_w(offs_t offset, uint32_t data, uint32_t mem_mas
void sa1110_periphs_device::device_start()
{
- save_item(NAME(m_udc_regs.udccr));
- save_item(NAME(m_udc_regs.udcar));
- save_item(NAME(m_udc_regs.udcomp));
- save_item(NAME(m_udc_regs.udcimp));
- save_item(NAME(m_udc_regs.udccs0));
- save_item(NAME(m_udc_regs.udccs1));
- save_item(NAME(m_udc_regs.udccs2));
- save_item(NAME(m_udc_regs.udcwc));
- save_item(NAME(m_udc_regs.udcsr));
-
- save_item(NAME(m_icp_regs.uart.utcr));
- save_item(NAME(m_icp_regs.uart.utsr0));
- save_item(NAME(m_icp_regs.uart.utsr1));
- save_item(NAME(m_icp_regs.uart.rx_fifo));
- save_item(NAME(m_icp_regs.uart.rx_fifo_read_idx));
- save_item(NAME(m_icp_regs.uart.rx_fifo_write_idx));
- save_item(NAME(m_icp_regs.uart.rx_fifo_count));
m_icp_regs.uart_rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::icp_rx_callback), this));
- save_item(NAME(m_icp_regs.uart.tx_fifo));
- save_item(NAME(m_icp_regs.uart.tx_fifo_read_idx));
- save_item(NAME(m_icp_regs.uart.tx_fifo_write_idx));
- save_item(NAME(m_icp_regs.uart.tx_fifo_count));
m_icp_regs.uart_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::icp_tx_callback), this));
- save_item(NAME(m_icp_regs.uart.rx_break_interlock));
-
- save_item(NAME(m_icp_regs.utcr4));
- save_item(NAME(m_icp_regs.hssp.hscr0));
- save_item(NAME(m_icp_regs.hssp.hscr1));
- save_item(NAME(m_icp_regs.hssp.hssr0));
- save_item(NAME(m_icp_regs.hssp.hssr1));
- save_item(NAME(m_icp_regs.hssp.rx_fifo));
- save_item(NAME(m_icp_regs.hssp.rx_fifo_read_idx));
- save_item(NAME(m_icp_regs.hssp.rx_fifo_write_idx));
- save_item(NAME(m_icp_regs.hssp.rx_fifo_count));
m_icp_regs.hssp.rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::hssp_rx_callback), this));
- save_item(NAME(m_icp_regs.hssp.tx_fifo));
- save_item(NAME(m_icp_regs.hssp.tx_fifo_read_idx));
- save_item(NAME(m_icp_regs.hssp.tx_fifo_write_idx));
- save_item(NAME(m_icp_regs.hssp.tx_fifo_count));
m_icp_regs.hssp.tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::hssp_tx_callback), this));
-
- save_item(NAME(m_uart_regs.utcr));
- save_item(NAME(m_uart_regs.utsr0));
- save_item(NAME(m_uart_regs.utsr1));
- save_item(NAME(m_uart_regs.rx_fifo));
- save_item(NAME(m_uart_regs.rx_fifo_read_idx));
- save_item(NAME(m_uart_regs.rx_fifo_write_idx));
- save_item(NAME(m_uart_regs.rx_fifo_count));
- save_item(NAME(m_uart_regs.tx_fifo));
- save_item(NAME(m_uart_regs.tx_fifo_read_idx));
- save_item(NAME(m_uart_regs.tx_fifo_write_idx));
- save_item(NAME(m_uart_regs.tx_fifo_count));
- save_item(NAME(m_uart_regs.rx_break_interlock));
-
- save_item(NAME(m_mcp_regs.mccr0));
- save_item(NAME(m_mcp_regs.mccr1));
- save_item(NAME(m_mcp_regs.mcdr2));
- save_item(NAME(m_mcp_regs.mcsr));
- save_item(NAME(m_mcp_regs.audio_rx_fifo));
- save_item(NAME(m_mcp_regs.audio_rx_fifo_read_idx));
- save_item(NAME(m_mcp_regs.audio_rx_fifo_write_idx));
- save_item(NAME(m_mcp_regs.audio_rx_fifo_count));
- save_item(NAME(m_mcp_regs.audio_tx_fifo));
- save_item(NAME(m_mcp_regs.audio_tx_fifo_read_idx));
- save_item(NAME(m_mcp_regs.audio_tx_fifo_write_idx));
- save_item(NAME(m_mcp_regs.audio_tx_fifo_count));
m_mcp_regs.audio_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::mcp_audio_tx_callback), this));
- save_item(NAME(m_mcp_regs.telecom_rx_fifo));
- save_item(NAME(m_mcp_regs.telecom_rx_fifo_read_idx));
- save_item(NAME(m_mcp_regs.telecom_rx_fifo_write_idx));
- save_item(NAME(m_mcp_regs.telecom_rx_fifo_count));
- save_item(NAME(m_mcp_regs.telecom_tx_fifo));
- save_item(NAME(m_mcp_regs.telecom_tx_fifo_read_idx));
- save_item(NAME(m_mcp_regs.telecom_tx_fifo_write_idx));
- save_item(NAME(m_mcp_regs.telecom_tx_fifo_count));
m_mcp_regs.telecom_tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::mcp_telecom_tx_callback), this));
-
- save_item(NAME(m_ssp_regs.sscr0));
- save_item(NAME(m_ssp_regs.sscr1));
- save_item(NAME(m_ssp_regs.sssr));
- save_item(NAME(m_ssp_regs.rx_fifo));
- save_item(NAME(m_ssp_regs.rx_fifo_read_idx));
- save_item(NAME(m_ssp_regs.rx_fifo_write_idx));
- save_item(NAME(m_ssp_regs.rx_fifo_count));
m_ssp_regs.rx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::ssp_rx_callback), this));
- save_item(NAME(m_ssp_regs.tx_fifo));
- save_item(NAME(m_ssp_regs.tx_fifo_read_idx));
- save_item(NAME(m_ssp_regs.tx_fifo_write_idx));
- save_item(NAME(m_ssp_regs.tx_fifo_count));
m_ssp_regs.tx_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::ssp_tx_callback), this));
-
- save_item(NAME(m_ostmr_regs.osmr));
- save_item(NAME(m_ostmr_regs.oscr));
- save_item(NAME(m_ostmr_regs.ossr));
- save_item(NAME(m_ostmr_regs.ower));
- save_item(NAME(m_ostmr_regs.oier));
for (int i = 0; i < 4; i++)
{
m_ostmr_regs.timer[i] = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::ostimer_tick_cb), this));
}
- save_item(NAME(m_rtc_regs.rtar));
- save_item(NAME(m_rtc_regs.rcnr));
- save_item(NAME(m_rtc_regs.rttr));
- save_item(NAME(m_rtc_regs.rtsr));
m_rtc_regs.tick_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(sa1110_periphs_device::rtc_tick_cb), this));
- save_item(NAME(m_power_regs.pmcr));
- save_item(NAME(m_power_regs.pssr));
- save_item(NAME(m_power_regs.pspr));
- save_item(NAME(m_power_regs.pwer));
- save_item(NAME(m_power_regs.pcfr));
- save_item(NAME(m_power_regs.ppcr));
- save_item(NAME(m_power_regs.pgsr));
- save_item(NAME(m_power_regs.posr));
-
- save_item(NAME(m_rcsr));
-
- save_item(NAME(m_gpio_regs.gplr));
- save_item(NAME(m_gpio_regs.gpdr));
- save_item(NAME(m_gpio_regs.grer));
- save_item(NAME(m_gpio_regs.gfer));
- save_item(NAME(m_gpio_regs.gedr));
- save_item(NAME(m_gpio_regs.gafr));
- save_item(NAME(m_gpio_regs.any_edge_mask));
- save_item(NAME(m_gpio_regs.output_latch));
- save_item(NAME(m_gpio_regs.input_latch));
- save_item(NAME(m_gpio_regs.alt_output_latch));
- save_item(NAME(m_gpio_regs.alt_input_latch));
-
- save_item(NAME(m_intc_regs.icip));
- save_item(NAME(m_intc_regs.icmr));
- save_item(NAME(m_intc_regs.iclr));
- save_item(NAME(m_intc_regs.iccr));
- save_item(NAME(m_intc_regs.icfp));
- save_item(NAME(m_intc_regs.icpr));
-
- save_item(NAME(m_ppc_regs.ppdr));
- save_item(NAME(m_ppc_regs.ppsr));
- save_item(NAME(m_ppc_regs.ppar));
- save_item(NAME(m_ppc_regs.psdr));
- save_item(NAME(m_ppc_regs.ppfr));
-
- save_item(STRUCT_MEMBER(m_dma_regs, ddar));
- save_item(STRUCT_MEMBER(m_dma_regs, dsr));
- save_item(STRUCT_MEMBER(m_dma_regs, dbs));
- save_item(STRUCT_MEMBER(m_dma_regs, dbt));
- save_item(NAME(m_dma_active_mask));
-
m_gpio_out.resolve_all_safe();
m_ssp_out.resolve_safe();
m_uart3_tx_out.resolve_safe();
}
+void sa1110_periphs_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_udc_regs))
+ .reg(NAME(m_icp_regs))
+ .reg(NAME(m_uart_regs))
+ .reg(NAME(m_mcp_regs))
+ .reg(NAME(m_ssp_regs))
+ .reg(NAME(m_ostmr_regs))
+ .reg(NAME(m_rtc_regs))
+ .reg(NAME(m_power_regs))
+ .reg(NAME(m_rcsr))
+ .reg(NAME(m_gpio_regs))
+ .reg(NAME(m_intc_regs))
+ .reg(NAME(m_ppc_regs))
+ .reg(NAME(m_dma_regs))
+ .reg(NAME(m_dma_active_mask));
+}
+
void sa1110_periphs_device::device_reset()
{
m_udc_regs.udccr = (1 << UDCCR_SUSM_BIT) | (1 << UDCCR_UDD_BIT);
diff --git a/src/devices/machine/sa1110.h b/src/devices/machine/sa1110.h
index 3ef8e79042b..e2af3618553 100644
--- a/src/devices/machine/sa1110.h
+++ b/src/devices/machine/sa1110.h
@@ -77,6 +77,7 @@ protected:
virtual void device_add_mconfig(machine_config &config) override;
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
static constexpr uint32_t INTERNAL_OSC = 3686400;
@@ -535,6 +536,19 @@ protected:
uint32_t udccs2;
uint32_t udcwc;
uint32_t udcsr;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(udccr))
+ .reg(NAME(udcar))
+ .reg(NAME(udcomp))
+ .reg(NAME(udcimp))
+ .reg(NAME(udccs0))
+ .reg(NAME(udccs1))
+ .reg(NAME(udccs2))
+ .reg(NAME(udcwc))
+ .reg(NAME(udcsr));
+ }
};
struct uart_regs
@@ -554,6 +568,22 @@ protected:
int tx_fifo_count;
bool rx_break_interlock;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(utcr))
+ .reg(NAME(utsr0))
+ .reg(NAME(utsr1))
+ .reg(NAME(rx_fifo))
+ .reg(NAME(rx_fifo_read_idx))
+ .reg(NAME(rx_fifo_write_idx))
+ .reg(NAME(rx_fifo_count))
+ .reg(NAME(tx_fifo))
+ .reg(NAME(tx_fifo_read_idx))
+ .reg(NAME(tx_fifo_write_idx))
+ .reg(NAME(tx_fifo_count))
+ .reg(NAME(rx_break_interlock));
+ }
};
struct hssp_regs
@@ -574,6 +604,22 @@ protected:
int tx_fifo_write_idx;
int tx_fifo_count;
emu_timer *tx_timer;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(hscr0))
+ .reg(NAME(hscr1))
+ .reg(NAME(hssr0))
+ .reg(NAME(hssr1))
+ .reg(NAME(rx_fifo))
+ .reg(NAME(rx_fifo_read_idx))
+ .reg(NAME(rx_fifo_write_idx))
+ .reg(NAME(rx_fifo_count))
+ .reg(NAME(tx_fifo))
+ .reg(NAME(tx_fifo_read_idx))
+ .reg(NAME(tx_fifo_write_idx))
+ .reg(NAME(tx_fifo_count));
+ }
};
struct icp_regs
@@ -584,6 +630,13 @@ protected:
emu_timer *uart_tx_timer;
hssp_regs hssp;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(uart))
+ .reg(NAME(utcr4))
+ .reg(NAME(hssp));
+ }
};
struct mcp_regs
@@ -614,6 +667,30 @@ protected:
int telecom_tx_fifo_write_idx;
int telecom_tx_fifo_count;
emu_timer *telecom_tx_timer;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(mccr0))
+ .reg(NAME(mccr1))
+ .reg(NAME(mcdr2))
+ .reg(NAME(mcsr))
+ .reg(NAME(audio_rx_fifo))
+ .reg(NAME(audio_rx_fifo_read_idx))
+ .reg(NAME(audio_rx_fifo_write_idx))
+ .reg(NAME(audio_rx_fifo_count))
+ .reg(NAME(audio_tx_fifo))
+ .reg(NAME(audio_tx_fifo_read_idx))
+ .reg(NAME(audio_tx_fifo_write_idx))
+ .reg(NAME(audio_tx_fifo_count))
+ .reg(NAME(telecom_rx_fifo))
+ .reg(NAME(telecom_rx_fifo_read_idx))
+ .reg(NAME(telecom_rx_fifo_write_idx))
+ .reg(NAME(telecom_rx_fifo_count))
+ .reg(NAME(telecom_tx_fifo))
+ .reg(NAME(telecom_tx_fifo_read_idx))
+ .reg(NAME(telecom_tx_fifo_write_idx))
+ .reg(NAME(telecom_tx_fifo_count));
+ }
};
struct ssp_regs
@@ -633,6 +710,21 @@ protected:
int tx_fifo_write_idx;
int tx_fifo_count;
emu_timer *tx_timer;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(sscr0))
+ .reg(NAME(sscr1))
+ .reg(NAME(sssr))
+ .reg(NAME(rx_fifo))
+ .reg(NAME(rx_fifo_read_idx))
+ .reg(NAME(rx_fifo_write_idx))
+ .reg(NAME(rx_fifo_count))
+ .reg(NAME(tx_fifo))
+ .reg(NAME(tx_fifo_read_idx))
+ .reg(NAME(tx_fifo_write_idx))
+ .reg(NAME(tx_fifo_count));
+ }
};
struct ostimer_regs
@@ -645,6 +737,15 @@ protected:
emu_timer *timer[4];
attotime last_count_sync;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(osmr))
+ .reg(NAME(oscr))
+ .reg(NAME(ossr))
+ .reg(NAME(ower))
+ .reg(NAME(oier));
+ }
};
struct rtc_regs
@@ -655,6 +756,14 @@ protected:
uint32_t rtsr;
emu_timer *tick_timer;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(rtar))
+ .reg(NAME(rcnr))
+ .reg(NAME(rttr))
+ .reg(NAME(rtsr));
+ }
};
struct power_regs
@@ -667,6 +776,18 @@ protected:
uint32_t ppcr;
uint32_t pgsr;
uint32_t posr;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(pmcr))
+ .reg(NAME(pssr))
+ .reg(NAME(pspr))
+ .reg(NAME(pwer))
+ .reg(NAME(pcfr))
+ .reg(NAME(ppcr))
+ .reg(NAME(pgsr))
+ .reg(NAME(posr));
+ }
};
struct gpio_regs
@@ -684,6 +805,21 @@ protected:
uint32_t input_latch;
uint32_t alt_output_latch;
uint32_t alt_input_latch;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(gplr))
+ .reg(NAME(gpdr))
+ .reg(NAME(grer))
+ .reg(NAME(gfer))
+ .reg(NAME(gedr))
+ .reg(NAME(gafr))
+ .reg(NAME(any_edge_mask))
+ .reg(NAME(output_latch))
+ .reg(NAME(input_latch))
+ .reg(NAME(alt_output_latch))
+ .reg(NAME(alt_input_latch));
+ }
};
struct intc_regs
@@ -694,6 +830,16 @@ protected:
uint32_t iccr;
uint32_t icfp;
uint32_t icpr;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(icip))
+ .reg(NAME(icmr))
+ .reg(NAME(iclr))
+ .reg(NAME(iccr))
+ .reg(NAME(icfp))
+ .reg(NAME(icpr));
+ }
};
struct ppc_regs
@@ -705,6 +851,15 @@ protected:
uint32_t ppar;
uint32_t psdr;
uint32_t ppfr;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(ppdr))
+ .reg(NAME(ppsr))
+ .reg(NAME(ppar))
+ .reg(NAME(psdr))
+ .reg(NAME(ppfr));
+ }
};
struct dma_regs
@@ -713,6 +868,14 @@ protected:
uint32_t dsr;
uint32_t dbs[2];
uint32_t dbt[2];
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(ddar))
+ .reg(NAME(dsr))
+ .reg(NAME(dbs))
+ .reg(NAME(dbt));
+ }
};
udc_regs m_udc_regs;
diff --git a/src/devices/machine/scc68070.cpp b/src/devices/machine/scc68070.cpp
index 84debddc48d..729b3957300 100644
--- a/src/devices/machine/scc68070.cpp
+++ b/src/devices/machine/scc68070.cpp
@@ -123,66 +123,6 @@ void scc68070_device::device_start()
{
scc68070_base_device::device_start();
- save_item(NAME(m_ipl));
-
- save_item(NAME(m_in2_line));
- save_item(NAME(m_in4_line));
- save_item(NAME(m_in5_line));
- save_item(NAME(m_nmi_line));
-
- save_item(NAME(m_int1_line));
- save_item(NAME(m_int2_line));
- save_item(NAME(m_lir));
-
- save_item(NAME(m_picr1));
- save_item(NAME(m_picr2));
- save_item(NAME(m_timer_int));
- save_item(NAME(m_i2c_int));
- save_item(NAME(m_uart_rx_int));
- save_item(NAME(m_uart_tx_int));
-
- save_item(NAME(m_i2c.data_register));
- save_item(NAME(m_i2c.address_register));
- save_item(NAME(m_i2c.status_register));
- save_item(NAME(m_i2c.control_register));
- save_item(NAME(m_i2c.clock_control_register));
-
- save_item(NAME(m_uart.mode_register));
- save_item(NAME(m_uart.status_register));
- save_item(NAME(m_uart.clock_select));
- save_item(NAME(m_uart.command_register));
- save_item(NAME(m_uart.receive_holding_register));
- save_item(NAME(m_uart.receive_pointer));
- save_item(NAME(m_uart.receive_buffer));
- save_item(NAME(m_uart.transmit_holding_register));
- save_item(NAME(m_uart.transmit_pointer));
- save_item(NAME(m_uart.transmit_buffer));
- save_item(NAME(m_uart.transmit_ctsn));
-
- save_item(NAME(m_timers.timer_status_register));
- save_item(NAME(m_timers.timer_control_register));
- save_item(NAME(m_timers.reload_register));
- save_item(NAME(m_timers.timer0));
- save_item(NAME(m_timers.timer1));
- save_item(NAME(m_timers.timer2));
-
- save_item(STRUCT_MEMBER(m_dma.channel, channel_status));
- save_item(STRUCT_MEMBER(m_dma.channel, channel_error));
- save_item(STRUCT_MEMBER(m_dma.channel, device_control));
- save_item(STRUCT_MEMBER(m_dma.channel, operation_control));
- save_item(STRUCT_MEMBER(m_dma.channel, sequence_control));
- save_item(STRUCT_MEMBER(m_dma.channel, channel_control));
- save_item(STRUCT_MEMBER(m_dma.channel, transfer_counter));
- save_item(STRUCT_MEMBER(m_dma.channel, memory_address_counter));
- save_item(STRUCT_MEMBER(m_dma.channel, device_address_counter));
-
- save_item(NAME(m_mmu.status));
- save_item(NAME(m_mmu.control));
- save_item(STRUCT_MEMBER(m_mmu.desc, attr));
- save_item(STRUCT_MEMBER(m_mmu.desc, length));
- save_item(STRUCT_MEMBER(m_mmu.desc, segment));
- save_item(STRUCT_MEMBER(m_mmu.desc, base));
-
m_timers.timer0_timer = timer_alloc(TIMER_TMR0);
m_timers.timer0_timer->adjust(attotime::never);
@@ -194,6 +134,40 @@ void scc68070_device::device_start()
}
//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void scc68070_device::device_register_save(save_registrar &save)
+{
+ scc68070_base_device::device_register_save(save);
+
+ save.reg(NAME(m_ipl))
+
+ .reg(NAME(m_in2_line))
+ .reg(NAME(m_in4_line))
+ .reg(NAME(m_in5_line))
+ .reg(NAME(m_nmi_line))
+
+ .reg(NAME(m_int1_line))
+ .reg(NAME(m_int2_line))
+ .reg(NAME(m_lir))
+
+ .reg(NAME(m_picr1))
+ .reg(NAME(m_picr2))
+ .reg(NAME(m_timer_int))
+ .reg(NAME(m_i2c_int))
+ .reg(NAME(m_uart_rx_int))
+ .reg(NAME(m_uart_tx_int))
+
+ .reg(NAME(m_i2c))
+ .reg(NAME(m_uart))
+ .reg(NAME(m_timers))
+ .reg(NAME(m_dma))
+ .reg(NAME(m_mmu));
+}
+
+
+//-------------------------------------------------
// device_reset - device-specific reset
//-------------------------------------------------
diff --git a/src/devices/machine/scc68070.h b/src/devices/machine/scc68070.h
index 2bae392ab63..4e0797379c7 100644
--- a/src/devices/machine/scc68070.h
+++ b/src/devices/machine/scc68070.h
@@ -170,6 +170,15 @@ public:
uint8_t control_register;
uint8_t reserved;
uint8_t clock_control_register;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(data_register))
+ .reg(NAME(address_register))
+ .reg(NAME(status_register))
+ .reg(NAME(control_register))
+ .reg(NAME(clock_control_register));
+ }
};
struct uart_regs_t
@@ -195,6 +204,21 @@ public:
uint8_t transmit_buffer[32768];
emu_timer* tx_timer;
bool transmit_ctsn;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(mode_register))
+ .reg(NAME(status_register))
+ .reg(NAME(clock_select))
+ .reg(NAME(command_register))
+ .reg(NAME(receive_holding_register))
+ .reg(NAME(receive_pointer))
+ .reg(NAME(receive_buffer))
+ .reg(NAME(transmit_holding_register))
+ .reg(NAME(transmit_pointer))
+ .reg(NAME(transmit_buffer))
+ .reg(NAME(transmit_ctsn));
+ }
};
struct timer_regs_t
@@ -206,6 +230,16 @@ public:
uint16_t timer1;
uint16_t timer2;
emu_timer* timer0_timer;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(timer_status_register))
+ .reg(NAME(timer_control_register))
+ .reg(NAME(reload_register))
+ .reg(NAME(timer0))
+ .reg(NAME(timer1))
+ .reg(NAME(timer2));
+ }
};
struct dma_channel_t
@@ -231,11 +265,25 @@ public:
uint32_t device_address_counter;
uint8_t reserved3[40];
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(channel_status))
+ .reg(NAME(channel_error))
+ .reg(NAME(device_control))
+ .reg(NAME(operation_control))
+ .reg(NAME(sequence_control))
+ .reg(NAME(channel_control))
+ .reg(NAME(transfer_counter))
+ .reg(NAME(memory_address_counter))
+ .reg(NAME(device_address_counter));
+ }
};
struct dma_regs_t
{
dma_channel_t channel[2];
+ void register_save(save_registrar &save) { save.reg(NAME(channel)); }
};
struct mmu_desc_t
@@ -245,6 +293,14 @@ public:
uint8_t undefined;
uint8_t segment;
uint16_t base;
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(attr))
+ .reg(NAME(length))
+ .reg(NAME(segment))
+ .reg(NAME(base));
+ }
};
struct mmu_regs_t
@@ -255,6 +311,8 @@ public:
uint8_t reserved[0x3e];
mmu_desc_t desc[8];
+
+ void register_save(save_registrar &save) { save.reg(NAME(status)).reg(NAME(control)).reg(NAME(desc)); }
};
dma_regs_t& dma() { return m_dma; }
@@ -264,6 +322,7 @@ protected:
virtual void device_resolve_objects() override;
virtual void device_start() override;
virtual void device_reset() 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;
// device_execute_interface overrides
diff --git a/src/devices/machine/spg290_ppu.cpp b/src/devices/machine/spg290_ppu.cpp
index 19ff7ccb1d2..afc28d4ca50 100644
--- a/src/devices/machine/spg290_ppu.cpp
+++ b/src/devices/machine/spg290_ppu.cpp
@@ -51,30 +51,30 @@ void spg290_ppu_device::device_start()
{
m_vblank_irq_cb.resolve_safe();
m_space_read_cb.resolve_safe(0);
+}
- save_item(NAME(m_control));
- save_item(NAME(m_sprite_control));
- save_item(NAME(m_irq_control));
- save_item(NAME(m_irq_status));
- save_item(NAME(m_sprite_max));
- save_item(NAME(m_sprite_buf_start));
- save_item(NAME(m_blend_mode));
- save_item(NAME(m_frame_buff));
- save_item(NAME(m_transrgb));
- save_item(NAME(m_vcomp_value));
- save_item(NAME(m_vcomp_offset));
- save_item(NAME(m_vcomp_step));
- save_item(NAME(m_irq_timing_v));
- save_item(NAME(m_irq_timing_h));
- save_item(NAME(m_vblank_lines));
-
- save_item(STRUCT_MEMBER(m_txs, control));
- save_item(STRUCT_MEMBER(m_txs, attribute));
- save_item(STRUCT_MEMBER(m_txs, posx));
- save_item(STRUCT_MEMBER(m_txs, posy));
- save_item(STRUCT_MEMBER(m_txs, nptr));
- save_item(STRUCT_MEMBER(m_txs, blend));
- save_item(STRUCT_MEMBER(m_txs, buf_start));
+//-------------------------------------------------
+// device_register_save - register for save states
+//-------------------------------------------------
+
+void spg290_ppu_device::device_register_save(save_registrar &save)
+{
+ save.reg(NAME(m_control))
+ .reg(NAME(m_sprite_control))
+ .reg(NAME(m_irq_control))
+ .reg(NAME(m_irq_status))
+ .reg(NAME(m_sprite_max))
+ .reg(NAME(m_sprite_buf_start))
+ .reg(NAME(m_blend_mode))
+ .reg(NAME(m_frame_buff))
+ .reg(NAME(m_transrgb))
+ .reg(NAME(m_vcomp_value))
+ .reg(NAME(m_vcomp_offset))
+ .reg(NAME(m_vcomp_step))
+ .reg(NAME(m_irq_timing_v))
+ .reg(NAME(m_irq_timing_h))
+ .reg(NAME(m_vblank_lines))
+ .reg(NAME(m_txs));
}
//-------------------------------------------------
diff --git a/src/devices/machine/spg290_ppu.h b/src/devices/machine/spg290_ppu.h
index 83960abe6d6..cdac361f900 100644
--- a/src/devices/machine/spg290_ppu.h
+++ b/src/devices/machine/spg290_ppu.h
@@ -31,6 +31,7 @@ public:
protected:
virtual void device_start() override;
virtual void device_reset() override;
+ virtual void device_register_save(save_registrar &save) override;
uint32_t regs_r(offs_t offset, uint32_t mem_mask);
void regs_w(offs_t offset, uint32_t data, uint32_t mem_mask);
@@ -77,6 +78,17 @@ private:
uint32_t nptr;
uint32_t blend;
uint32_t buf_start[3];
+
+ void register_save(save_registrar &save)
+ {
+ save.reg(NAME(control))
+ .reg(NAME(attribute))
+ .reg(NAME(posx))
+ .reg(NAME(posy))
+ .reg(NAME(nptr))
+ .reg(NAME(blend))
+ .reg(NAME(buf_start));
+ }
} m_txs[3];
};