diff options
| author | 2021-04-14 00:53:58 -0700 | |
|---|---|---|
| committer | 2021-04-14 00:53:58 -0700 | |
| commit | 6bfb3d997605a4dd1ed4274dd076bc478d570985 (patch) | |
| tree | 88e5dea9bed7e7d6435b23c2d615589ef4fdc285 | |
| parent | 2843b3739446528ec3f3cca4b7156f3789e20be0 (diff) | |
Convert STRUCT_MEMBERs into proper struct saves for devices/machine/*
| -rw-r--r-- | src/devices/machine/am9517a.cpp | 45 | ||||
| -rw-r--r-- | src/devices/machine/am9517a.h | 3 | ||||
| -rw-r--r-- | src/devices/machine/gt64xxx.cpp | 34 | ||||
| -rw-r--r-- | src/devices/machine/gt64xxx.h | 3 | ||||
| -rw-r--r-- | src/devices/machine/hd63450.cpp | 30 | ||||
| -rw-r--r-- | src/devices/machine/hd63450.h | 22 | ||||
| -rw-r--r-- | src/devices/machine/i8257.cpp | 33 | ||||
| -rw-r--r-- | src/devices/machine/i8257.h | 3 | ||||
| -rw-r--r-- | src/devices/machine/ns32081.cpp | 23 | ||||
| -rw-r--r-- | src/devices/machine/ns32081.h | 3 | ||||
| -rw-r--r-- | src/devices/machine/pci.cpp | 15 | ||||
| -rw-r--r-- | src/devices/machine/pci.h | 3 | ||||
| -rw-r--r-- | src/devices/machine/sa1110.cpp | 152 | ||||
| -rw-r--r-- | src/devices/machine/sa1110.h | 163 | ||||
| -rw-r--r-- | src/devices/machine/scc68070.cpp | 94 | ||||
| -rw-r--r-- | src/devices/machine/scc68070.h | 59 | ||||
| -rw-r--r-- | src/devices/machine/spg290_ppu.cpp | 46 | ||||
| -rw-r--r-- | src/devices/machine/spg290_ppu.h | 12 |
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]; }; |
