summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2018-09-10 23:26:08 -0400
committer AJR <ajrhacker@users.noreply.github.com>2018-09-10 23:26:08 -0400
commitdf6ea71aebc38bec4d0d68ba391df9803022a907 (patch)
tree91604e5822c8bebb9f1b1385b7dacd5b38954853
parenta4dd8e6be05b69edc80acbe49fc6ce7160c291fb (diff)
pci9050, s3c44b0: Eliminate register_postload and machine().device; convert callbacks to devcb3 (nw)
-rw-r--r--src/devices/machine/pci9050.cpp4
-rw-r--r--src/devices/machine/pci9050.h3
-rw-r--r--src/devices/machine/s3c44b0.cpp14
-rw-r--r--src/devices/machine/s3c44b0.h42
-rw-r--r--src/mame/drivers/juicebox.cpp11
5 files changed, 26 insertions, 48 deletions
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<cpu_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 <class Object> devcb_base &set_gpio_port_r_callback(Object &&cb) { return m_port_r_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_gpio_port_w_callback(Object &&cb) { return m_port_w_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_i2c_scl_w_callback(Object &&cb) { return m_scl_w_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_i2c_sda_r_callback(Object &&cb) { return m_sda_r_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_i2c_sda_w_callback(Object &&cb) { return m_sda_w_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_adc_data_r_callback(Object &&cb) { return m_data_r_cb.set_callback(std::forward<Object>(cb)); }
- template <class Object> devcb_base &set_i2s_data_w_callback(Object &&cb) { return m_data_w_cb.set_callback(std::forward<Object>(cb)); }
+ template <class T> void set_cpu(T &&tag) { m_cpu.set_tag(std::forward<T>(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<cpu_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<s3c44b0_device &>(*device).set_gpio_port_r_callback(DEVCB_##cb);
-
-#define MCFG_S3C44B0_GPIO_PORT_W_CB(cb) \
- downcast<s3c44b0_device &>(*device).set_gpio_port_w_callback(DEVCB_##cb);
-
-#define MCFG_S3C44B0_I2C_SCL_W_CB(cb) \
- downcast<s3c44b0_device &>(*device).set_i2c_scl_w_callback(DEVCB_##cb);
-
-#define MCFG_S3C44B0_I2C_SDA_R_CB(cb) \
- downcast<s3c44b0_device &>(*device).set_i2c_sda_r_callback(DEVCB_##cb);
-
-#define MCFG_S3C44B0_I2C_SDA_W_CB(cb) \
- downcast<s3c44b0_device &>(*device).set_i2c_sda_w_callback(DEVCB_##cb);
-
-#define MCFG_S3C44B0_ADC_DATA_R_CB(cb) \
- downcast<s3c44b0_device &>(*device).set_adc_data_r_callback(DEVCB_##cb);
-
-#define MCFG_S3C44B0_I2S_DATA_W_CB(cb) \
- downcast<s3c44b0_device &>(*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)