diff --git a/src/devices/machine/pci9050.cpp b/src/devices/machine/pci9050.cpp index 0238d699ece..e65434d3f5a 100644 --- a/src/devices/machine/pci9050.cpp +++ b/src/devices/machine/pci9050.cpp @@ -81,11 +81,9 @@ void pci9050_device::device_start() save_item(NAME(m_erombrd)); save_item(NAME(m_intcsr)); save_item(NAME(m_cntrl)); - machine().save().register_postload(save_prepost_delegate(FUNC(pci9050_device::postload), this)); - } -void pci9050_device::postload(void) +void pci9050_device::device_post_load() { remap_rom(); for (int id = 0; id < 4; id++) diff --git a/src/devices/machine/pci9050.h b/src/devices/machine/pci9050.h index e1a6da148fd..03bbde058ab 100644 --- a/src/devices/machine/pci9050.h +++ b/src/devices/machine/pci9050.h @@ -27,10 +27,9 @@ public: protected: virtual void device_start() override; + virtual void device_post_load() override; virtual void device_reset() override; - void postload(void); - private: void map(address_map &map); diff --git a/src/devices/machine/s3c44b0.cpp b/src/devices/machine/s3c44b0.cpp index 00d8ac91513..0c56bb51a17 100644 --- a/src/devices/machine/s3c44b0.cpp +++ b/src/devices/machine/s3c44b0.cpp @@ -225,7 +225,7 @@ DEFINE_DEVICE_TYPE(S3C44B0, s3c44b0_device, "s3c44b0", "Samsung S3C44B0 SoC") s3c44b0_device::s3c44b0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) : device_t(mconfig, S3C44B0, tag, owner, clock) , device_video_interface(mconfig, *this) - , m_cpu(nullptr) + , m_cpu(*this, finder_base::DUMMY_TAG) , m_port_r_cb(*this) , m_port_w_cb(*this) , m_scl_w_cb(*this) @@ -256,8 +256,6 @@ s3c44b0_device::s3c44b0_device(const machine_config &mconfig, const char *tag, d void s3c44b0_device::device_start() { - m_cpu = machine().device("maincpu"); - m_port_r_cb.resolve(); m_port_w_cb.resolve(); m_scl_w_cb.resolve(); @@ -332,8 +330,6 @@ void s3c44b0_device::device_start() save_item(NAME(m_lcd.vpos_end)); save_item(NAME(m_lcd.frame_time)); - machine().save().register_postload(save_prepost_delegate(FUNC(s3c44b0_device::s3c44b0_postload), this)); - for (int i = 0; i < 2; i++) { save_item(NAME(m_zdma[i].regs.dcon), i); @@ -446,7 +442,13 @@ void s3c44b0_device::device_start() } -void s3c44b0_device::s3c44b0_postload() +//------------------------------------------------- +// device_post_load - called after the loading a +// saved state, so that registered variables can +// be expaneded as necessary +//------------------------------------------------- + +void s3c44b0_device::device_post_load() { m_lcd.frame_period = HZ_TO_ATTOSECONDS(m_lcd.framerate); m_lcd.scantime = m_lcd.frame_period / m_lcd.vpos_end; diff --git a/src/devices/machine/s3c44b0.h b/src/devices/machine/s3c44b0.h index 21d6d7e0082..f4f194ce3c8 100644 --- a/src/devices/machine/s3c44b0.h +++ b/src/devices/machine/s3c44b0.h @@ -116,13 +116,14 @@ class s3c44b0_device : public device_t, public device_video_interface public: s3c44b0_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - template devcb_base &set_gpio_port_r_callback(Object &&cb) { return m_port_r_cb.set_callback(std::forward(cb)); } - template devcb_base &set_gpio_port_w_callback(Object &&cb) { return m_port_w_cb.set_callback(std::forward(cb)); } - template devcb_base &set_i2c_scl_w_callback(Object &&cb) { return m_scl_w_cb.set_callback(std::forward(cb)); } - template devcb_base &set_i2c_sda_r_callback(Object &&cb) { return m_sda_r_cb.set_callback(std::forward(cb)); } - template devcb_base &set_i2c_sda_w_callback(Object &&cb) { return m_sda_w_cb.set_callback(std::forward(cb)); } - template devcb_base &set_adc_data_r_callback(Object &&cb) { return m_data_r_cb.set_callback(std::forward(cb)); } - template devcb_base &set_i2s_data_w_callback(Object &&cb) { return m_data_w_cb.set_callback(std::forward(cb)); } + template void set_cpu(T &&tag) { m_cpu.set_tag(std::forward(tag)); } + auto gpio_port_r_cb() { return m_port_r_cb.bind(); } + auto gpio_port_w_cb() { return m_port_w_cb.bind(); } + auto i2c_scl_w_cb() { return m_scl_w_cb.bind(); } + auto i2c_sda_r_cb() { return m_sda_r_cb.bind(); } + auto i2c_sda_w_cb() { return m_sda_w_cb.bind(); } + auto adc_data_r_cb() { return m_data_r_cb.bind(); } + auto i2s_data_w_cb() { return m_data_w_cb.bind(); } DECLARE_READ32_MEMBER(lcd_r); DECLARE_READ32_MEMBER(clkpow_r); @@ -166,6 +167,7 @@ public: protected: // device-level overrides virtual void device_start() override; + virtual void device_post_load() override; virtual void device_reset() override; private: @@ -572,7 +574,7 @@ private: void bdma_w(int ch, uint32_t offset, uint32_t data, uint32_t mem_mask); TIMER_CALLBACK_MEMBER(bdma_timer_exp); - cpu_device *m_cpu; + required_device m_cpu; //s3c44b0_memcon_t m_memcon; s3c44b0_irq_t m_irq; s3c44b0_dma_t m_zdma[2]; @@ -597,33 +599,9 @@ private: devcb_write_line m_sda_w_cb; devcb_read32 m_data_r_cb; devcb_write16 m_data_w_cb; - - void s3c44b0_postload(); }; DECLARE_DEVICE_TYPE(S3C44B0, s3c44b0_device) -#define MCFG_S3C44B0_GPIO_PORT_R_CB(cb) \ - downcast(*device).set_gpio_port_r_callback(DEVCB_##cb); - -#define MCFG_S3C44B0_GPIO_PORT_W_CB(cb) \ - downcast(*device).set_gpio_port_w_callback(DEVCB_##cb); - -#define MCFG_S3C44B0_I2C_SCL_W_CB(cb) \ - downcast(*device).set_i2c_scl_w_callback(DEVCB_##cb); - -#define MCFG_S3C44B0_I2C_SDA_R_CB(cb) \ - downcast(*device).set_i2c_sda_r_callback(DEVCB_##cb); - -#define MCFG_S3C44B0_I2C_SDA_W_CB(cb) \ - downcast(*device).set_i2c_sda_w_callback(DEVCB_##cb); - -#define MCFG_S3C44B0_ADC_DATA_R_CB(cb) \ - downcast(*device).set_adc_data_r_callback(DEVCB_##cb); - -#define MCFG_S3C44B0_I2S_DATA_W_CB(cb) \ - downcast(*device).set_i2s_data_w_callback(DEVCB_##cb); - - #endif // MAME_MACHINE_S3C44B0_H diff --git a/src/mame/drivers/juicebox.cpp b/src/mame/drivers/juicebox.cpp index 04fc84667df..4d7392c8a84 100644 --- a/src/mame/drivers/juicebox.cpp +++ b/src/mame/drivers/juicebox.cpp @@ -69,7 +69,7 @@ private: void smc_write(uint8_t data); DECLARE_READ32_MEMBER(s3c44b0_gpio_port_r); DECLARE_WRITE32_MEMBER(s3c44b0_gpio_port_w); - DECLARE_WRITE16_MEMBER(s3c44b0_i2s_data_w); + //DECLARE_WRITE16_MEMBER(s3c44b0_i2s_data_w); void juicebox_map(address_map &map); }; @@ -327,10 +327,11 @@ MACHINE_CONFIG_START(juicebox_state::juicebox) MCFG_DEVICE_ADD("vref", VOLTAGE_REGULATOR, 0) MCFG_VOLTAGE_REGULATOR_OUTPUT(5.0) MCFG_SOUND_ROUTE(0, "dac", 1.0, DAC_VREF_POS_INPUT) MCFG_SOUND_ROUTE(0, "dac", -1.0, DAC_VREF_NEG_INPUT) - MCFG_DEVICE_ADD("s3c44b0", S3C44B0, 10000000) - MCFG_S3C44B0_GPIO_PORT_R_CB(READ32(*this, juicebox_state, s3c44b0_gpio_port_r)) - MCFG_S3C44B0_GPIO_PORT_W_CB(WRITE32(*this, juicebox_state, s3c44b0_gpio_port_w)) - MCFG_S3C44B0_I2S_DATA_W_CB(WRITE16("dac", dac_word_interface, data_w)) + S3C44B0(config, m_s3c44b0, 10000000); + m_s3c44b0->set_cpu("maincpu"); + m_s3c44b0->gpio_port_r_cb().set(FUNC(juicebox_state::s3c44b0_gpio_port_r)); + m_s3c44b0->gpio_port_w_cb().set(FUNC(juicebox_state::s3c44b0_gpio_port_w)); + m_s3c44b0->i2s_data_w_cb().set("dac", FUNC(dac_word_interface::data_w)); MCFG_DEVICE_ADD("smartmedia", SMARTMEDIA, 0)