summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/machine')
-rw-r--r--src/emu/machine/6522via.c104
-rw-r--r--src/emu/machine/6522via.h58
-rw-r--r--src/emu/machine/6526cia.c131
-rw-r--r--src/emu/machine/6526cia.h66
-rw-r--r--src/emu/machine/6532riot.c118
-rw-r--r--src/emu/machine/6532riot.h44
-rw-r--r--src/emu/machine/6821pia.c96
-rw-r--r--src/emu/machine/6821pia.h59
-rw-r--r--src/emu/machine/6840ptm.c44
-rw-r--r--src/emu/machine/6840ptm.h42
-rw-r--r--src/emu/machine/6850acia.c56
-rw-r--r--src/emu/machine/6850acia.h50
-rw-r--r--src/emu/machine/68681.c2
-rw-r--r--src/emu/machine/74123.c77
-rw-r--r--src/emu/machine/74123.h38
-rw-r--r--src/emu/machine/74148.c2
-rw-r--r--src/emu/machine/74153.c2
-rw-r--r--src/emu/machine/7474.c91
-rw-r--r--src/emu/machine/7474.h54
-rw-r--r--src/emu/machine/8237dma.c79
-rw-r--r--src/emu/machine/8237dma.h49
-rw-r--r--src/emu/machine/8255ppi.c49
-rw-r--r--src/emu/machine/8255ppi.h34
-rw-r--r--src/emu/machine/8257dma.c92
-rw-r--r--src/emu/machine/8257dma.h49
-rw-r--r--src/emu/machine/adc0808.c59
-rw-r--r--src/emu/machine/adc0808.h35
-rw-r--r--src/emu/machine/adc083x.c2
-rw-r--r--src/emu/machine/adc1038.c2
-rw-r--r--src/emu/machine/adc1213x.c2
-rw-r--r--src/emu/machine/at28c16.c69
-rw-r--r--src/emu/machine/at28c16.h53
-rw-r--r--src/emu/machine/cdp1852.c80
-rw-r--r--src/emu/machine/cdp1852.h41
-rw-r--r--src/emu/machine/cdp1871.c92
-rw-r--r--src/emu/machine/cdp1871.h67
-rw-r--r--src/emu/machine/com8116.c53
-rw-r--r--src/emu/machine/com8116.h40
-rw-r--r--src/emu/machine/devhelpr.h31
-rw-r--r--src/emu/machine/ds1302.c43
-rw-r--r--src/emu/machine/ds1302.h26
-rw-r--r--src/emu/machine/ds2401.c29
-rw-r--r--src/emu/machine/ds2401.h21
-rw-r--r--src/emu/machine/ds2404.c76
-rw-r--r--src/emu/machine/ds2404.h54
-rw-r--r--src/emu/machine/e0516.c55
-rw-r--r--src/emu/machine/e0516.h27
-rw-r--r--src/emu/machine/eeprom.c212
-rw-r--r--src/emu/machine/eeprom.h97
-rw-r--r--src/emu/machine/er2055.c74
-rw-r--r--src/emu/machine/er2055.h39
-rw-r--r--src/emu/machine/f3853.c57
-rw-r--r--src/emu/machine/f3853.h34
-rw-r--r--src/emu/machine/generic.c6
-rw-r--r--src/emu/machine/i2cmem.c133
-rw-r--r--src/emu/machine/i2cmem.h60
-rw-r--r--src/emu/machine/i8155.c143
-rw-r--r--src/emu/machine/i8155.h57
-rw-r--r--src/emu/machine/i8212.c53
-rw-r--r--src/emu/machine/i8212.h39
-rw-r--r--src/emu/machine/i8214.c74
-rw-r--r--src/emu/machine/i8214.h37
-rw-r--r--src/emu/machine/i8243.c62
-rw-r--r--src/emu/machine/i8243.h43
-rw-r--r--src/emu/machine/i8255.c81
-rw-r--r--src/emu/machine/i8255.h45
-rw-r--r--src/emu/machine/i8355.c130
-rw-r--r--src/emu/machine/i8355.h52
-rw-r--r--src/emu/machine/idectrl.c10
-rw-r--r--src/emu/machine/ins8154.c59
-rw-r--r--src/emu/machine/ins8154.h45
-rw-r--r--src/emu/machine/ins8250.c2
-rw-r--r--src/emu/machine/intelfsh.c209
-rw-r--r--src/emu/machine/intelfsh.h188
-rw-r--r--src/emu/machine/k033906.c37
-rw-r--r--src/emu/machine/k033906.h35
-rw-r--r--src/emu/machine/k056230.c46
-rw-r--r--src/emu/machine/k056230.h45
-rw-r--r--src/emu/machine/latch8.c2
-rw-r--r--src/emu/machine/ldcore.c16
-rw-r--r--src/emu/machine/mb3773.c62
-rw-r--r--src/emu/machine/mb3773.h31
-rw-r--r--src/emu/machine/mb87078.c2
-rw-r--r--src/emu/machine/mc146818.c90
-rw-r--r--src/emu/machine/mc146818.h45
-rw-r--r--src/emu/machine/mc6852.c95
-rw-r--r--src/emu/machine/mc6852.h49
-rw-r--r--src/emu/machine/mc68901.c98
-rw-r--r--src/emu/machine/mc68901.h63
-rw-r--r--src/emu/machine/mm74c922.c109
-rw-r--r--src/emu/machine/mm74c922.h58
-rw-r--r--src/emu/machine/mos6529.c46
-rw-r--r--src/emu/machine/mos6529.h37
-rw-r--r--src/emu/machine/msm5832.c57
-rw-r--r--src/emu/machine/msm5832.h26
-rw-r--r--src/emu/machine/msm58321.c99
-rw-r--r--src/emu/machine/msm58321.h37
-rw-r--r--src/emu/machine/nmc9306.c57
-rw-r--r--src/emu/machine/nmc9306.h28
-rw-r--r--src/emu/machine/nvram.c93
-rw-r--r--src/emu/machine/nvram.h64
-rw-r--r--src/emu/machine/pci.c8
-rw-r--r--src/emu/machine/pci.h2
-rw-r--r--src/emu/machine/pic8259.c2
-rw-r--r--src/emu/machine/pit8253.c2
-rw-r--r--src/emu/machine/ram.c4
-rw-r--r--src/emu/machine/rp5c01.c105
-rw-r--r--src/emu/machine/rp5c01.h38
-rw-r--r--src/emu/machine/rp5c15.c96
-rw-r--r--src/emu/machine/rp5c15.h39
-rw-r--r--src/emu/machine/rp5h01.c2
-rw-r--r--src/emu/machine/rtc65271.c2
-rw-r--r--src/emu/machine/s3c24xx.c2
-rw-r--r--src/emu/machine/secflash.c13
-rw-r--r--src/emu/machine/secflash.h9
-rw-r--r--src/emu/machine/smc91c9x.c6
-rw-r--r--src/emu/machine/timekpr.c208
-rw-r--r--src/emu/machine/timekpr.h72
-rw-r--r--src/emu/machine/tms6100.c2
-rw-r--r--src/emu/machine/upd1990a.c102
-rw-r--r--src/emu/machine/upd1990a.h39
-rw-r--r--src/emu/machine/upd7201.c69
-rw-r--r--src/emu/machine/upd7201.h56
-rw-r--r--src/emu/machine/x2212.c88
-rw-r--r--src/emu/machine/x2212.h55
-rw-r--r--src/emu/machine/x76f041.c25
-rw-r--r--src/emu/machine/x76f041.h20
-rw-r--r--src/emu/machine/x76f100.c29
-rw-r--r--src/emu/machine/x76f100.h20
-rw-r--r--src/emu/machine/z80ctc.c77
-rw-r--r--src/emu/machine/z80ctc.h42
-rw-r--r--src/emu/machine/z80dart.c121
-rw-r--r--src/emu/machine/z80dart.h63
-rw-r--r--src/emu/machine/z80dma.c87
-rw-r--r--src/emu/machine/z80dma.h49
-rw-r--r--src/emu/machine/z80pio.c79
-rw-r--r--src/emu/machine/z80pio.h50
-rw-r--r--src/emu/machine/z80sio.c89
-rw-r--r--src/emu/machine/z80sio.h34
-rw-r--r--src/emu/machine/z80sti.c105
-rw-r--r--src/emu/machine/z80sti.h54
-rw-r--r--src/emu/machine/z8536.c92
-rw-r--r--src/emu/machine/z8536.h47
143 files changed, 2481 insertions, 5534 deletions
diff --git a/src/emu/machine/6522via.c b/src/emu/machine/6522via.c
index fd40ae03caf..c753fb1e551 100644
--- a/src/emu/machine/6522via.c
+++ b/src/emu/machine/6522via.c
@@ -105,44 +105,6 @@
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(via6522, "6522 VIA")
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void via6522_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const via6522_interface *intf = reinterpret_cast<const via6522_interface *>(static_config());
- if (intf != NULL)
- *static_cast<via6522_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_in_a_func, 0, sizeof(m_in_a_func));
- memset(&m_in_b_func, 0, sizeof(m_in_b_func));
- memset(&m_in_ca1_func, 0, sizeof(m_in_ca1_func));
- memset(&m_in_cb1_func, 0, sizeof(m_in_cb1_func));
- memset(&m_in_ca2_func, 0, sizeof(m_in_ca2_func));
- memset(&m_in_cb2_func, 0, sizeof(m_in_cb2_func));
- memset(&m_out_a_func, 0, sizeof(m_out_a_func));
- memset(&m_out_b_func, 0, sizeof(m_out_b_func));
- memset(&m_out_ca2_func, 0, sizeof(m_out_ca2_func));
- memset(&m_out_cb2_func, 0, sizeof(m_out_cb2_func));
- memset(&m_irq_func, 0, sizeof(m_irq_func));
- }
-}
-
-
-
/***************************************************************************
INLINE FUNCTIONS
***************************************************************************/
@@ -180,38 +142,70 @@ UINT16 via6522_device::get_counter1_value()
// LIVE DEVICE
//**************************************************************************
-const device_type VIA6522 = via6522_device_config::static_alloc_device_config;
+// device type definition
+const device_type VIA6522 = &device_creator<via6522_device>;
//-------------------------------------------------
// via6522_device - constructor
//-------------------------------------------------
-via6522_device::via6522_device(running_machine &_machine, const via6522_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+via6522_device::via6522_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, VIA6522, "6522 VIA", tag, owner, clock)
+{
+
+}
+
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void via6522_device::device_config_complete()
{
+ // inherit a copy of the static data
+ const via6522_interface *intf = reinterpret_cast<const via6522_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<via6522_interface *>(this) = *intf;
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_in_a_cb, 0, sizeof(m_in_a_cb));
+ memset(&m_in_b_cb, 0, sizeof(m_in_b_cb));
+ memset(&m_in_ca1_cb, 0, sizeof(m_in_ca1_cb));
+ memset(&m_in_cb1_cb, 0, sizeof(m_in_cb1_cb));
+ memset(&m_in_ca2_cb, 0, sizeof(m_in_ca2_cb));
+ memset(&m_in_cb2_cb, 0, sizeof(m_in_cb2_cb));
+ memset(&m_out_a_cb, 0, sizeof(m_out_a_cb));
+ memset(&m_out_b_cb, 0, sizeof(m_out_b_cb));
+ memset(&m_out_ca2_cb, 0, sizeof(m_out_ca2_cb));
+ memset(&m_out_cb2_cb, 0, sizeof(m_out_cb2_cb));
+ memset(&m_irq_cb, 0, sizeof(m_irq_cb));
+ }
}
+
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void via6522_device::device_start()
{
- devcb_resolve_read8(&m_in_a_func, &m_config.m_in_a_func, this);
- devcb_resolve_read8(&m_in_b_func, &m_config.m_in_b_func, this);
- devcb_resolve_read_line(&m_in_ca1_func, &m_config.m_in_ca1_func, this);
- devcb_resolve_read_line(&m_in_cb1_func, &m_config.m_in_cb1_func, this);
- devcb_resolve_read_line(&m_in_ca2_func, &m_config.m_in_ca2_func, this);
- devcb_resolve_read_line(&m_in_cb2_func, &m_config.m_in_cb2_func, this);
- devcb_resolve_write8(&m_out_a_func, &m_config.m_out_a_func, this);
- devcb_resolve_write8(&m_out_b_func, &m_config.m_out_b_func, this);
- devcb_resolve_write_line(&m_out_ca1_func, &m_config.m_out_ca1_func, this);
- devcb_resolve_write_line(&m_out_cb1_func, &m_config.m_out_cb1_func, this);
- devcb_resolve_write_line(&m_out_ca2_func, &m_config.m_out_ca2_func, this);
- devcb_resolve_write_line(&m_out_cb2_func, &m_config.m_out_cb2_func, this);
- devcb_resolve_write_line(&m_irq_func, &m_config.m_irq_func, this);
+ devcb_resolve_read8(&m_in_a_func, &m_in_a_cb, this);
+ devcb_resolve_read8(&m_in_b_func, &m_in_b_cb, this);
+ devcb_resolve_read_line(&m_in_ca1_func, &m_in_ca1_cb, this);
+ devcb_resolve_read_line(&m_in_cb1_func, &m_in_cb1_cb, this);
+ devcb_resolve_read_line(&m_in_ca2_func, &m_in_ca2_cb, this);
+ devcb_resolve_read_line(&m_in_cb2_func, &m_in_cb2_cb, this);
+ devcb_resolve_write8(&m_out_a_func, &m_out_a_cb, this);
+ devcb_resolve_write8(&m_out_b_func, &m_out_b_cb, this);
+ devcb_resolve_write_line(&m_out_ca1_func, &m_out_ca1_cb, this);
+ devcb_resolve_write_line(&m_out_cb1_func, &m_out_cb1_cb, this);
+ devcb_resolve_write_line(&m_out_ca2_func, &m_out_ca2_cb, this);
+ devcb_resolve_write_line(&m_out_cb2_func, &m_out_cb2_cb, this);
+ devcb_resolve_write_line(&m_irq_func, &m_irq_cb, this);
m_t1ll = 0xf3; /* via at 0x9110 in vic20 show these values */
m_t1lh = 0xb5; /* ports are not written by kernel! */
diff --git a/src/emu/machine/6522via.h b/src/emu/machine/6522via.h
index deb02af94f1..ba3373a133e 100644
--- a/src/emu/machine/6522via.h
+++ b/src/emu/machine/6522via.h
@@ -61,54 +61,33 @@
struct via6522_interface
{
- devcb_read8 m_in_a_func;
- devcb_read8 m_in_b_func;
- devcb_read_line m_in_ca1_func;
- devcb_read_line m_in_cb1_func;
- devcb_read_line m_in_ca2_func;
- devcb_read_line m_in_cb2_func;
- devcb_write8 m_out_a_func;
- devcb_write8 m_out_b_func;
- devcb_write_line m_out_ca1_func;
- devcb_write_line m_out_cb1_func;
- devcb_write_line m_out_ca2_func;
- devcb_write_line m_out_cb2_func;
- devcb_write_line m_irq_func;
-};
-
-
-// ======================> via6522_device_config
-
-class via6522_device_config : public device_config,
- public via6522_interface
-{
- friend class via6522_device;
-
- // construction/destruction
- via6522_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_a_cb;
+ devcb_read8 m_in_b_cb;
+ devcb_read_line m_in_ca1_cb;
+ devcb_read_line m_in_cb1_cb;
+ devcb_read_line m_in_ca2_cb;
+ devcb_read_line m_in_cb2_cb;
+ devcb_write8 m_out_a_cb;
+ devcb_write8 m_out_b_cb;
+ devcb_write_line m_out_ca1_cb;
+ devcb_write_line m_out_cb1_cb;
+ devcb_write_line m_out_ca2_cb;
+ devcb_write_line m_out_cb2_cb;
+ devcb_write_line m_irq_cb;
};
// ======================> via6522_device
-class via6522_device : public device_t
+class via6522_device : public device_t,
+ public via6522_interface
{
- friend class via6522_device_config;
friend class dart_channel;
+public:
// construction/destruction
- via6522_device(running_machine &_machine, const via6522_device_config &_config);
+ via6522_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -131,6 +110,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -200,8 +180,6 @@ private:
emu_timer *m_shift_timer;
UINT8 m_shift_counter;
-
- const via6522_device_config &m_config;
};
diff --git a/src/emu/machine/6526cia.c b/src/emu/machine/6526cia.c
index e8c6796e03f..3b0066d5f53 100644
--- a/src/emu/machine/6526cia.c
+++ b/src/emu/machine/6526cia.c
@@ -45,86 +45,34 @@
// DEVICE CONFIGURATION
//**************************************************************************
-//-------------------------------------------------
-// mos6526_device_config - constructor
-//-------------------------------------------------
-
-mos6526_device_config::mos6526_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "MOS6526", tag, owner, clock)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *mos6526_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(mos6526_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *mos6526_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, mos6526_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void mos6526_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const mos6526_interface *intf = reinterpret_cast<const mos6526_interface *>(static_config());
- if (intf != NULL)
- *static_cast<mos6526_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- m_tod_clock = 0;
- memset(&m_out_irq_func, 0, sizeof(m_out_irq_func));
- memset(&m_out_pc_func, 0, sizeof(m_out_pc_func));
- memset(&m_out_cnt_func, 0, sizeof(m_out_cnt_func));
- memset(&m_out_sp_func, 0, sizeof(m_out_sp_func));
- memset(&m_in_pa_func, 0, sizeof(m_in_pa_func));
- memset(&m_out_pa_func, 0, sizeof(m_out_pa_func));
- memset(&m_in_pb_func, 0, sizeof(m_in_pb_func));
- memset(&m_out_pb_func, 0, sizeof(m_out_pb_func));
- }
-}
-
-
//**************************************************************************
// LIVE DEVICE
//**************************************************************************
-const device_type MOS6526R1 = mos6526_device_config::static_alloc_device_config;
-const device_type MOS6526R2 = mos6526_device_config::static_alloc_device_config;
-const device_type MOS8520 = mos6526_device_config::static_alloc_device_config;
+// device type definition
+const device_type MOS6526R1 = &device_creator<mos6526r1_device>;
+const device_type MOS6526R2 = &device_creator<mos6526r2_device>;
+const device_type MOS8520 = &device_creator<mos8520_device>;
//-------------------------------------------------
// mos6526_device - constructor
//-------------------------------------------------
-mos6526_device::mos6526_device(running_machine &_machine, const mos6526_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+mos6526_device::mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, type, name, tag, owner, clock)
{
-
}
+mos6526r1_device::mos6526r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : mos6526_device(mconfig, MOS6526R1, "MOS6526r1", tag, owner, clock) { }
+
+mos6526r2_device::mos6526r2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : mos6526_device(mconfig, MOS6526R2, "MOS6526r2", tag, owner, clock) { }
+
+mos8520_device::mos8520_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : mos6526_device(mconfig, MOS8520, "MOS8520", tag, owner, clock) { }
+
//-------------------------------------------------
// device_reset - device-specific reset
@@ -173,23 +121,52 @@ void mos6526_device::device_reset()
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void mos6526_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const mos6526_interface *intf = reinterpret_cast<const mos6526_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<mos6526_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ m_tod_clock = 0;
+ memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
+ memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
+ memset(&m_out_cnt_cb, 0, sizeof(m_out_cnt_cb));
+ memset(&m_out_sp_cb, 0, sizeof(m_out_sp_cb));
+ memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
+ memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
+ memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
+ memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void mos6526_device::device_start()
{
/* clear out CIA structure, and copy the interface */
- devcb_resolve_write_line(&m_out_irq_func, &m_config.m_out_irq_func, this);
- devcb_resolve_write_line(&m_out_pc_func, &m_config.m_out_pc_func, this);
- devcb_resolve_write_line(&m_out_cnt_func, &m_config.m_out_cnt_func, this);
- devcb_resolve_write_line(&m_out_sp_func, &m_config.m_out_sp_func, this);
+ devcb_resolve_write_line(&m_out_irq_func, &m_out_irq_cb, this);
+ devcb_resolve_write_line(&m_out_pc_func, &m_out_pc_cb, this);
+ devcb_resolve_write_line(&m_out_cnt_func, &m_out_cnt_cb, this);
+ devcb_resolve_write_line(&m_out_sp_func, &m_out_sp_cb, this);
m_flag = 1;
/* setup ports */
- devcb_resolve_read8(&m_port[0].m_read, &m_config.m_in_pa_func, this);
- devcb_resolve_write8(&m_port[0].m_write, &m_config.m_out_pa_func, this);
- devcb_resolve_read8(&m_port[1].m_read, &m_config.m_in_pb_func, this);
- devcb_resolve_write8(&m_port[1].m_write, &m_config.m_out_pb_func, this);
+ devcb_resolve_read8(&m_port[0].m_read, &m_in_pa_cb, this);
+ devcb_resolve_write8(&m_port[0].m_write, &m_out_pa_cb, this);
+ devcb_resolve_read8(&m_port[1].m_read, &m_in_pb_cb, this);
+ devcb_resolve_write8(&m_port[1].m_write, &m_out_pb_cb, this);
for (int p = 0; p < (sizeof(m_port) / sizeof(m_port[0])); p++)
{
@@ -206,9 +183,9 @@ void mos6526_device::device_start()
}
/* setup TOD timer, if appropriate */
- if (m_config.m_tod_clock != 0)
+ if (m_tod_clock != 0)
{
- machine().scheduler().timer_pulse(attotime::from_hz(m_config.m_tod_clock), FUNC(clock_tod_callback), 0, (void *)this);
+ machine().scheduler().timer_pulse(attotime::from_hz(m_tod_clock), FUNC(clock_tod_callback), 0, (void *)this);
}
/* state save support */
diff --git a/src/emu/machine/6526cia.h b/src/emu/machine/6526cia.h
index 970d9ab91c1..ab17474524c 100644
--- a/src/emu/machine/6526cia.h
+++ b/src/emu/machine/6526cia.h
@@ -39,7 +39,7 @@
- //**************************************************************************
+//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
@@ -72,51 +72,30 @@ struct mos6526_interface
{
int m_tod_clock;
- devcb_write_line m_out_irq_func;
- devcb_write_line m_out_pc_func;
- devcb_write_line m_out_cnt_func;
- devcb_write_line m_out_sp_func;
-
- devcb_read8 m_in_pa_func;
- devcb_write8 m_out_pa_func;
-
- devcb_read8 m_in_pb_func;
- devcb_write8 m_out_pb_func;
-};
-
-
-
-// ======================> mos6526_device_config
+ devcb_write_line m_out_irq_cb;
+ devcb_write_line m_out_pc_cb;
+ devcb_write_line m_out_cnt_cb;
+ devcb_write_line m_out_sp_cb;
-class mos6526_device_config : public device_config,
- public mos6526_interface
-{
- friend class mos6526_device;
-
- // construction/destruction
- mos6526_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
+ devcb_read8 m_in_pa_cb;
+ devcb_write8 m_out_pa_cb;
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_pb_cb;
+ devcb_write8 m_out_pb_cb;
};
// ======================> mos6526_device
-class mos6526_device : public device_t
+class mos6526_device : public device_t,
+ public mos6526_interface
{
- friend class mos6526_device_config;
friend class dart_channel;
+protected:
// construction/destruction
- mos6526_device(running_machine &_machine, const mos6526_device_config &_config);
+ mos6526_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
public:
UINT8 reg_r(UINT8 offset);
@@ -148,6 +127,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -221,8 +201,24 @@ private:
UINT8 m_cnt;
UINT8 m_shift;
UINT8 m_serial;
+};
+
+class mos6526r1_device : public mos6526_device
+{
+public:
+ mos6526r1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
- const mos6526_device_config &m_config;
+class mos6526r2_device : public mos6526_device
+{
+public:
+ mos6526r2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class mos8520_device : public mos6526_device
+{
+public:
+ mos8520_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
};
diff --git a/src/emu/machine/6532riot.c b/src/emu/machine/6532riot.c
index 521516e2a7c..a5e239599cd 100644
--- a/src/emu/machine/6532riot.c
+++ b/src/emu/machine/6532riot.c
@@ -16,17 +16,12 @@ The timer seems to follow these rules:
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type RIOT6532 = riot6532_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
+// device type definition
+const device_type RIOT6532 = &device_creator<riot6532_device>;
+
enum
{
TIMER_IDLE,
@@ -39,68 +34,6 @@ enum
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// riot6532_device_config - constructor
-//-------------------------------------------------
-
-riot6532_device_config::riot6532_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "6532 (RIOT)", tag, owner, clock)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *riot6532_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(riot6532_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *riot6532_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, riot6532_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void riot6532_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const riot6532_interface *intf = reinterpret_cast<const riot6532_interface *>(static_config());
- if (intf != NULL)
- {
- *static_cast<riot6532_interface *>(this) = *intf;
- }
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_in_a_func, 0, sizeof(m_in_a_func));
- memset(&m_in_b_func, 0, sizeof(m_in_b_func));
- memset(&m_out_a_func, 0, sizeof(m_out_a_func));
- memset(&m_out_b_func, 0, sizeof(m_out_b_func));
- memset(&m_irq_func, 0, sizeof(m_irq_func));
- }
-}
-
-
/***************************************************************************
INTERNAL FUNCTIONS
@@ -506,12 +439,39 @@ UINT8 riot6532_device::portb_out_get()
// riot6532_device - constructor
//-------------------------------------------------
-riot6532_device::riot6532_device(running_machine &_machine, const riot6532_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+riot6532_device::riot6532_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, RIOT6532, "6532 (RIOT)", tag, owner, clock)
{
}
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void riot6532_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const riot6532_interface *intf = reinterpret_cast<const riot6532_interface *>(static_config());
+ if (intf != NULL)
+ {
+ *static_cast<riot6532_interface *>(this) = *intf;
+ }
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_in_a_cb, 0, sizeof(m_in_a_cb));
+ memset(&m_in_b_cb, 0, sizeof(m_in_b_cb));
+ memset(&m_out_a_cb, 0, sizeof(m_out_a_cb));
+ memset(&m_out_b_cb, 0, sizeof(m_out_b_cb));
+ memset(&m_irq_cb, 0, sizeof(m_irq_cb));
+ }
+}
+
+
/*-------------------------------------------------
device_start - device-specific startup
-------------------------------------------------*/
@@ -522,16 +482,16 @@ void riot6532_device::device_start()
assert(this != NULL);
/* set static values */
- m_index = machine().m_devicelist.indexof(RIOT6532, tag());
+ m_index = machine().devicelist().indexof(RIOT6532, tag());
/* configure the ports */
- devcb_resolve_read8(&m_port[0].m_in_func, &m_config.m_in_a_func, this);
- devcb_resolve_write8(&m_port[0].m_out_func, &m_config.m_out_a_func, this);
- devcb_resolve_read8(&m_port[1].m_in_func, &m_config.m_in_b_func, this);
- devcb_resolve_write8(&m_port[1].m_out_func, &m_config.m_out_b_func, this);
+ devcb_resolve_read8(&m_port[0].m_in_func, &m_in_a_cb, this);
+ devcb_resolve_write8(&m_port[0].m_out_func, &m_out_a_cb, this);
+ devcb_resolve_read8(&m_port[1].m_in_func, &m_in_b_cb, this);
+ devcb_resolve_write8(&m_port[1].m_out_func, &m_out_b_cb, this);
/* resolve irq func */
- devcb_resolve_write_line(&m_irq_func, &m_config.m_irq_func, this);
+ devcb_resolve_write_line(&m_irq_func, &m_irq_cb, this);
/* allocate timers */
m_timer = machine().scheduler().timer_alloc(FUNC(timer_end_callback), (void *)this);
diff --git a/src/emu/machine/6532riot.h b/src/emu/machine/6532riot.h
index adbdb9c1670..50ed7a39d44 100644
--- a/src/emu/machine/6532riot.h
+++ b/src/emu/machine/6532riot.h
@@ -32,47 +32,24 @@
struct riot6532_interface
{
- devcb_read8 m_in_a_func;
- devcb_read8 m_in_b_func;
- devcb_write8 m_out_a_func;
- devcb_write8 m_out_b_func;
- devcb_write_line m_irq_func;
-};
-
-
-
-// ======================> riot6532_device_config
-
-class riot6532_device_config : public device_config,
- public riot6532_interface
-{
- friend class riot6532_device;
-
- // construction/destruction
- riot6532_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_a_cb;
+ devcb_read8 m_in_b_cb;
+ devcb_write8 m_out_a_cb;
+ devcb_write8 m_out_b_cb;
+ devcb_write_line m_irq_cb;
};
// ======================> riot6532_device
-class riot6532_device : public device_t
+class riot6532_device : public device_t,
+ public riot6532_interface
{
- friend class riot6532_device_config;
-
+public:
// construction/destruction
- riot6532_device(running_machine &_machine, const riot6532_device_config &_config);
+ riot6532_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
UINT8 reg_r(UINT8 offset);
void reg_w(UINT8 offset, UINT8 data);
@@ -99,6 +76,7 @@ protected:
};
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -127,8 +105,6 @@ private:
UINT8 m_timershift;
UINT8 m_timerstate;
emu_timer * m_timer;
-
- const riot6532_device_config &m_config;
};
diff --git a/src/emu/machine/6821pia.c b/src/emu/machine/6821pia.c
index 94181f76459..b03b28ddddc 100644
--- a/src/emu/machine/6821pia.c
+++ b/src/emu/machine/6821pia.c
@@ -36,37 +36,21 @@
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// pia6821_device_config - constructor
-//-------------------------------------------------
-
-pia6821_device_config::pia6821_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "6822 PIA", tag, owner, clock)
-{
-}
+// device type definition
+const device_type PIA6821 = &device_creator<pia6821_device>;
//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
+// pia6821_device - constructor
//-------------------------------------------------
-device_config *pia6821_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
+pia6821_device::pia6821_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, PIA6821, "6822 PIA", tag, owner, clock)
{
- return global_alloc(pia6821_device_config(mconfig, tag, owner, clock));
-}
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *pia6821_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, pia6821_device(machine, *this));
}
@@ -76,7 +60,7 @@ device_t *pia6821_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void pia6821_device_config::device_config_complete()
+void pia6821_device::device_config_complete()
{
// inherit a copy of the static data
const pia6821_interface *intf = reinterpret_cast<const pia6821_interface *>(static_config());
@@ -88,40 +72,22 @@ void pia6821_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_in_a_func, 0, sizeof(m_in_a_func));
- memset(&m_in_b_func, 0, sizeof(m_in_b_func));
- memset(&m_in_ca1_func, 0, sizeof(m_in_ca1_func));
- memset(&m_in_cb1_func, 0, sizeof(m_in_cb1_func));
- memset(&m_in_ca2_func, 0, sizeof(m_in_ca2_func));
- memset(&m_in_cb2_func, 0, sizeof(m_in_cb2_func));
- memset(&m_out_a_func, 0, sizeof(m_out_a_func));
- memset(&m_out_b_func, 0, sizeof(m_out_b_func));
- memset(&m_out_ca2_func, 0, sizeof(m_out_ca2_func));
- memset(&m_out_cb2_func, 0, sizeof(m_out_cb2_func));
- memset(&m_irq_a_func, 0, sizeof(m_irq_a_func));
- memset(&m_irq_b_func, 0, sizeof(m_irq_b_func));
+ memset(&m_in_a_cb, 0, sizeof(m_in_a_cb));
+ memset(&m_in_b_cb, 0, sizeof(m_in_b_cb));
+ memset(&m_in_ca1_cb, 0, sizeof(m_in_ca1_cb));
+ memset(&m_in_cb1_cb, 0, sizeof(m_in_cb1_cb));
+ memset(&m_in_ca2_cb, 0, sizeof(m_in_ca2_cb));
+ memset(&m_in_cb2_cb, 0, sizeof(m_in_cb2_cb));
+ memset(&m_out_a_cb, 0, sizeof(m_out_a_cb));
+ memset(&m_out_b_cb, 0, sizeof(m_out_b_cb));
+ memset(&m_out_ca2_cb, 0, sizeof(m_out_ca2_cb));
+ memset(&m_out_cb2_cb, 0, sizeof(m_out_cb2_cb));
+ memset(&m_irq_a_cb, 0, sizeof(m_irq_a_cb));
+ memset(&m_irq_b_cb, 0, sizeof(m_irq_b_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type PIA6821 = pia6821_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// pia6821_device - constructor
-//-------------------------------------------------
-
-pia6821_device::pia6821_device(running_machine &_machine, const pia6821_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -129,18 +95,18 @@ pia6821_device::pia6821_device(running_machine &_machine, const pia6821_device_c
void pia6821_device::device_start()
{
/* resolve callbacks */
- devcb_resolve_read8(&m_in_a_func, &m_config.m_in_a_func, this);
- devcb_resolve_read8(&m_in_b_func, &m_config.m_in_b_func, this);
- devcb_resolve_read_line(&m_in_ca1_func, &m_config.m_in_ca1_func, this);
- devcb_resolve_read_line(&m_in_cb1_func, &m_config.m_in_cb1_func, this);
- devcb_resolve_read_line(&m_in_ca2_func, &m_config.m_in_ca2_func, this);
- devcb_resolve_read_line(&m_in_cb2_func, &m_config.m_in_cb2_func, this);
- devcb_resolve_write8(&m_out_a_func, &m_config.m_out_a_func, this);
- devcb_resolve_write8(&m_out_b_func, &m_config.m_out_b_func, this);
- devcb_resolve_write_line(&m_out_ca2_func, &m_config.m_out_ca2_func, this);
- devcb_resolve_write_line(&m_out_cb2_func, &m_config.m_out_cb2_func, this);
- devcb_resolve_write_line(&m_irq_a_func, &m_config.m_irq_a_func, this);
- devcb_resolve_write_line(&m_irq_b_func, &m_config.m_irq_b_func, this);
+ devcb_resolve_read8(&m_in_a_func, &m_in_a_cb, this);
+ devcb_resolve_read8(&m_in_b_func, &m_in_b_cb, this);
+ devcb_resolve_read_line(&m_in_ca1_func, &m_in_ca1_cb, this);
+ devcb_resolve_read_line(&m_in_cb1_func, &m_in_cb1_cb, this);
+ devcb_resolve_read_line(&m_in_ca2_func, &m_in_ca2_cb, this);
+ devcb_resolve_read_line(&m_in_cb2_func, &m_in_cb2_cb, this);
+ devcb_resolve_write8(&m_out_a_func, &m_out_a_cb, this);
+ devcb_resolve_write8(&m_out_b_func, &m_out_b_cb, this);
+ devcb_resolve_write_line(&m_out_ca2_func, &m_out_ca2_cb, this);
+ devcb_resolve_write_line(&m_out_cb2_func, &m_out_cb2_cb, this);
+ devcb_resolve_write_line(&m_irq_a_func, &m_irq_a_cb, this);
+ devcb_resolve_write_line(&m_irq_b_func, &m_irq_b_cb, this);
save_item(NAME(m_in_a));
save_item(NAME(m_in_ca1));
diff --git a/src/emu/machine/6821pia.h b/src/emu/machine/6821pia.h
index 394ba5aec1c..3b86bac895e 100644
--- a/src/emu/machine/6821pia.h
+++ b/src/emu/machine/6821pia.h
@@ -57,54 +57,30 @@
struct pia6821_interface
{
- devcb_read8 m_in_a_func;
- devcb_read8 m_in_b_func;
- devcb_read_line m_in_ca1_func;
- devcb_read_line m_in_cb1_func;
- devcb_read_line m_in_ca2_func;
- devcb_read_line m_in_cb2_func;
- devcb_write8 m_out_a_func;
- devcb_write8 m_out_b_func;
- devcb_write_line m_out_ca2_func;
- devcb_write_line m_out_cb2_func;
- devcb_write_line m_irq_a_func;
- devcb_write_line m_irq_b_func;
-};
-
-
-
-// ======================> pia6821_device_config
-
-class pia6821_device_config : public device_config,
- public pia6821_interface
-{
- friend class pia6821_device;
-
- // construction/destruction
- pia6821_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_a_cb;
+ devcb_read8 m_in_b_cb;
+ devcb_read_line m_in_ca1_cb;
+ devcb_read_line m_in_cb1_cb;
+ devcb_read_line m_in_ca2_cb;
+ devcb_read_line m_in_cb2_cb;
+ devcb_write8 m_out_a_cb;
+ devcb_write8 m_out_b_cb;
+ devcb_write_line m_out_ca2_cb;
+ devcb_write_line m_out_cb2_cb;
+ devcb_write_line m_irq_a_cb;
+ devcb_write_line m_irq_b_cb;
};
// ======================> pia6821_device
-class pia6821_device : public device_t
+class pia6821_device : public device_t,
+ public pia6821_interface
{
- friend class pia6821_device_config;
-
- // construction/destruction
- pia6821_device(running_machine &_machine, const pia6821_device_config &_config);
-
public:
+ // construction/destruction
+ pia6821_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
UINT8 reg_r(UINT8 offset);
void reg_w(UINT8 offset, UINT8 data);
@@ -145,6 +121,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -238,8 +215,6 @@ private:
UINT8 m_logged_ca2_not_connected;
UINT8 m_logged_cb1_not_connected;
UINT8 m_logged_cb2_not_connected;
-
- const pia6821_device_config &m_config;
};
diff --git a/src/emu/machine/6840ptm.c b/src/emu/machine/6840ptm.c
index 26b0f52a501..41547ca1e13 100644
--- a/src/emu/machine/6840ptm.c
+++ b/src/emu/machine/6840ptm.c
@@ -61,9 +61,18 @@ const char *const ptm6840_device::opmode[] =
IMPLEMENTATION
***************************************************************************/
-GENERIC_DEVICE_CONFIG_SETUP(ptm6840, "6840 PTM")
+// device type definition
+const device_type PTM6840 = &device_creator<ptm6840_device>;
+
+//-------------------------------------------------
+// ptm6840_device - constructor
+//-------------------------------------------------
+
+ptm6840_device::ptm6840_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, PTM6840, "6840 PTM", tag, owner, clock)
+{
+}
-const device_type PTM6840 = ptm6840_device_config::static_alloc_device_config;
//-------------------------------------------------
// device_config_complete - perform any
@@ -71,7 +80,7 @@ const device_type PTM6840 = ptm6840_device_config::static_alloc_device_config;
// complete
//-------------------------------------------------
-void ptm6840_device_config::device_config_complete()
+void ptm6840_device::device_config_complete()
{
// inherit a copy of the static data
const ptm6840_interface *intf = reinterpret_cast<const ptm6840_interface *>(static_config());
@@ -87,43 +96,32 @@ void ptm6840_device_config::device_config_complete()
m_external_clock[0] = 0.0;
m_external_clock[1] = 0.0;
m_external_clock[2] = 0.0;
- memset(&m_irq_func, 0, sizeof(m_irq_func));
- memset(&m_out_func[0], 0, sizeof(m_out_func[0]));
- memset(&m_out_func[1], 0, sizeof(m_out_func[1]));
- memset(&m_out_func[2], 0, sizeof(m_out_func[2]));
+ memset(&m_irq_cb, 0, sizeof(m_irq_cb));
+ memset(&m_out_cb[0], 0, sizeof(m_out_cb[0]));
+ memset(&m_out_cb[1], 0, sizeof(m_out_cb[1]));
+ memset(&m_out_cb[2], 0, sizeof(m_out_cb[2]));
}
}
//-------------------------------------------------
-// ptm6840_device - constructor
-//-------------------------------------------------
-
-ptm6840_device::ptm6840_device(running_machine &_machine, const ptm6840_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-}
-
-
-//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void ptm6840_device::device_start()
{
- m_internal_clock = m_config.m_internal_clock;
+ m_internal_clock = m_internal_clock;
/* resolve callbacks */
for (int i = 0; i < 3; i++)
{
- devcb_resolve_write8(&m_out_func[i], &m_config.m_out_func[i], this);
+ devcb_resolve_write8(&m_out_func[i], &m_out_cb[i], this);
}
for (int i = 0; i < 3; i++)
{
- if ( m_config.m_external_clock[i] )
+ if ( m_external_clock[i] )
{
- m_external_clock[i] = m_config.m_external_clock[i];
+ m_external_clock[i] = m_external_clock[i];
}
else
{
@@ -141,7 +139,7 @@ void ptm6840_device::device_start()
m_timer[i]->enable(false);
}
- devcb_resolve_write_line(&m_irq_func, &m_config.m_irq_func, this);
+ devcb_resolve_write_line(&m_irq_func, &m_irq_cb, this);
/* register for state saving */
save_item(NAME(m_lsb_buffer));
diff --git a/src/emu/machine/6840ptm.h b/src/emu/machine/6840ptm.h
index d6c337fca4f..b27adcf1ee0 100644
--- a/src/emu/machine/6840ptm.h
+++ b/src/emu/machine/6840ptm.h
@@ -35,44 +35,20 @@ struct ptm6840_interface
double m_internal_clock;
double m_external_clock[3];
- devcb_write8 m_out_func[3]; // function to call when output[idx] changes
- devcb_write_line m_irq_func; // function called if IRQ line changes
-};
-
-
-
-// ======================> ptm6840_device_config
-
-class ptm6840_device_config : public device_config,
- public ptm6840_interface
-{
- friend class ptm6840_device;
-
- // construction/destruction
- ptm6840_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write8 m_out_cb[3]; // function to call when output[idx] changes
+ devcb_write_line m_irq_cb; // function called if IRQ line changes
};
// ======================> ptm6840_device
-class ptm6840_device : public device_t
+class ptm6840_device : public device_t,
+ public ptm6840_interface
{
- friend class ptm6840_device_config;
-
- // construction/destruction
- ptm6840_device(running_machine &_machine, const ptm6840_device_config &_config);
-
public:
+ // construction/destruction
+ ptm6840_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
int ptm6840_get_status(int clock); // get whether timer is enabled
int ptm6840_get_irq(); // get IRQ state
@@ -97,6 +73,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -129,9 +106,6 @@ private:
PTM_6840_LSB3 = 7,
};
- double m_internal_clock;
- double m_external_clock[3];
-
devcb_resolved_write8 m_out_func[3]; // function to call when output[idx] changes
devcb_resolved_write_line m_irq_func; // function called if IRQ line changes
@@ -156,8 +130,6 @@ private:
UINT16 m_latch[3];
UINT16 m_counter[3];
- const ptm6840_device_config &m_config;
-
static const char *const opmode[];
};
diff --git a/src/emu/machine/6850acia.c b/src/emu/machine/6850acia.c
index 17192e99e3a..7b51907a3a6 100644
--- a/src/emu/machine/6850acia.c
+++ b/src/emu/machine/6850acia.c
@@ -52,9 +52,19 @@ const int acia6850_device::ACIA6850_WORD[8][3] =
LIVE DEVICE
***************************************************************************/
-const device_type ACIA6850 = acia6850_device_config::static_alloc_device_config;
+// device type definition
+const device_type ACIA6850 = &device_creator<acia6850_device>;
+
+//-------------------------------------------------
+// acia6850_device - constructor
+//-------------------------------------------------
+
+acia6850_device::acia6850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ACIA6850, "6850 ACIA", tag, owner, clock)
+{
+
+}
-GENERIC_DEVICE_CONFIG_SETUP(acia6850, "6850 ACIA")
//-------------------------------------------------
// device_config_complete - perform any
@@ -62,7 +72,7 @@ GENERIC_DEVICE_CONFIG_SETUP(acia6850, "6850 ACIA")
// complete
//-------------------------------------------------
-void acia6850_device_config::device_config_complete()
+void acia6850_device::device_config_complete()
{
// inherit a copy of the static data
const acia6850_interface *intf = reinterpret_cast<const acia6850_interface *>(static_config());
@@ -76,44 +86,30 @@ void acia6850_device_config::device_config_complete()
{
m_tx_clock = 0;
m_rx_clock = 0;
- memset(&m_in_rx_func, 0, sizeof(m_in_rx_func));
- memset(&m_out_tx_func, 0, sizeof(m_out_tx_func));
- memset(&m_in_cts_func, 0, sizeof(m_in_cts_func));
- memset(&m_out_rts_func, 0, sizeof(m_out_rts_func));
- memset(&m_in_dcd_func, 0, sizeof(m_in_dcd_func));
- memset(&m_out_irq_func, 0, sizeof(m_out_irq_func));
+ memset(&m_in_rx_cb, 0, sizeof(m_in_rx_cb));
+ memset(&m_out_tx_cb, 0, sizeof(m_out_tx_cb));
+ memset(&m_in_cts_cb, 0, sizeof(m_in_cts_cb));
+ memset(&m_out_rts_cb, 0, sizeof(m_out_rts_cb));
+ memset(&m_in_dcd_cb, 0, sizeof(m_in_dcd_cb));
+ memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
}
}
//-------------------------------------------------
-// acia6850_device - constructor
-//-------------------------------------------------
-
-acia6850_device::acia6850_device(running_machine &_machine, const acia6850_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
-
-//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void acia6850_device::device_start()
{
/* resolve callbacks */
- devcb_resolve_read_line(&m_in_rx_func, &m_config.m_in_rx_func, this);
- devcb_resolve_write_line(&m_out_tx_func, &m_config.m_out_tx_func, this);
- devcb_resolve_read_line(&m_in_cts_func, &m_config.m_in_cts_func, this);
- devcb_resolve_write_line(&m_out_rts_func, &m_config.m_out_rts_func, this);
- devcb_resolve_read_line(&m_in_dcd_func, &m_config.m_in_dcd_func, this);
- devcb_resolve_write_line(&m_out_irq_func, &m_config.m_out_irq_func, this);
-
- m_rx_clock = m_config.m_rx_clock;
- m_tx_clock = m_config.m_tx_clock;
+ devcb_resolve_read_line(&m_in_rx_func, &m_in_rx_cb, this);
+ devcb_resolve_write_line(&m_out_tx_func, &m_out_tx_cb, this);
+ devcb_resolve_read_line(&m_in_cts_func, &m_in_cts_cb, this);
+ devcb_resolve_write_line(&m_out_rts_func, &m_out_rts_cb, this);
+ devcb_resolve_read_line(&m_in_dcd_func, &m_in_dcd_cb, this);
+ devcb_resolve_write_line(&m_out_irq_func, &m_out_irq_cb, this);
+
m_tx_counter = 0;
m_rx_counter = 0;
m_rx_timer = machine().scheduler().timer_alloc(FUNC(receive_event_callback), (void *)this);
diff --git a/src/emu/machine/6850acia.h b/src/emu/machine/6850acia.h
index 76422482420..4e5b64702d8 100644
--- a/src/emu/machine/6850acia.h
+++ b/src/emu/machine/6850acia.h
@@ -54,50 +54,26 @@ struct acia6850_interface
int m_tx_clock;
int m_rx_clock;
- devcb_read_line m_in_rx_func;
- devcb_write_line m_out_tx_func;
+ devcb_read_line m_in_rx_cb;
+ devcb_write_line m_out_tx_cb;
- devcb_read_line m_in_cts_func;
- devcb_write_line m_out_rts_func;
- devcb_read_line m_in_dcd_func;
+ devcb_read_line m_in_cts_cb;
+ devcb_write_line m_out_rts_cb;
+ devcb_read_line m_in_dcd_cb;
- devcb_write_line m_out_irq_func;
-};
-
-
-
-// ======================> acia6850_device_config
-
-class acia6850_device_config : public device_config,
- public acia6850_interface
-{
- friend class acia6850_device;
-
- // construction/destruction
- acia6850_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_out_irq_cb;
};
// ======================> acia6850_device
-class acia6850_device : public device_t
+class acia6850_device : public device_t,
+ public acia6850_interface
{
- friend class acia6850_device_config;
-
- // construction/destruction
- acia6850_device(running_machine &_machine, const acia6850_device_config &_config);
-
public:
+ // construction/destruction
+ acia6850_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
void acia6850_tx_clock_in();
void acia6850_rx_clock_in();
@@ -120,6 +96,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -172,9 +149,6 @@ private:
UINT8 m_rx_counter;
UINT8 m_tx_counter;
- int m_rx_clock;
- int m_tx_clock;
-
int m_divide;
/* Counters */
@@ -203,8 +177,6 @@ private:
emu_timer *m_rx_timer;
emu_timer *m_tx_timer;
- const acia6850_device_config &m_config;
-
static const int ACIA6850_DIVIDE[3];
static const int ACIA6850_WORD[8][3];
};
diff --git a/src/emu/machine/68681.c b/src/emu/machine/68681.c
index a053f1e432c..eaf8265458d 100644
--- a/src/emu/machine/68681.c
+++ b/src/emu/machine/68681.c
@@ -707,7 +707,7 @@ static DEVICE_START(duart68681)
/* validate arguments */
assert(device != NULL);
- duart68681->duart_config = (const duart68681_config *)device->baseconfig().static_config();
+ duart68681->duart_config = (const duart68681_config *)device->static_config();
duart68681->device = device;
duart68681->channel[0].tx_timer = device->machine().scheduler().timer_alloc(FUNC(tx_timer_callback), (void*)device);
diff --git a/src/emu/machine/74123.c b/src/emu/machine/74123.c
index 5dd9bb6a657..eac124eeae4 100644
--- a/src/emu/machine/74123.c
+++ b/src/emu/machine/74123.c
@@ -14,45 +14,22 @@
#define LOG (0)
-//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type TTL74123 = ttl74123_device_config::static_alloc_device_config;
-
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// ttl74123_device_config - constructor
-//-------------------------------------------------
-
-ttl74123_device_config::ttl74123_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "TTL74123", tag, owner, clock)
-{
-}
-
+// device type definition
+const device_type TTL74123 = &device_creator<ttl74123_device>;
//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
+// ttl74123_device - constructor
//-------------------------------------------------
-device_config *ttl74123_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
+ttl74123_device::ttl74123_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, TTL74123, "TTL74123", tag, owner, clock)
{
- return global_alloc(ttl74123_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-device_t *ttl74123_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, ttl74123_device(machine, *this));
}
@@ -62,7 +39,7 @@ device_t *ttl74123_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void ttl74123_device_config::device_config_complete()
+void ttl74123_device::device_config_complete()
{
// inherit a copy of the static data
const ttl74123_interface *intf = reinterpret_cast<const ttl74123_interface *>(static_config());
@@ -83,23 +60,6 @@ void ttl74123_device_config::device_config_complete()
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// ttl74123_device - constructor
-//-------------------------------------------------
-
-ttl74123_device::ttl74123_device(running_machine &_machine, const ttl74123_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -108,11 +68,6 @@ void ttl74123_device::device_start()
{
m_timer = machine().scheduler().timer_alloc(FUNC(clear_callback), (void *)this);
- /* start with the defaults */
- m_a = m_config.m_a;
- m_b = m_config.m_b;
- m_clear = m_config.m_clear;
-
/* register for state saving */
save_item(NAME(m_a));
save_item(NAME(m_b));
@@ -139,26 +94,26 @@ attotime ttl74123_device::compute_duration()
{
double duration;
- switch (m_config.m_connection_type)
+ switch (m_connection_type)
{
case TTL74123_NOT_GROUNDED_NO_DIODE:
- duration = 0.28 * m_config.m_res * m_config.m_cap * (1.0 + (700.0 / m_config.m_res));
+ duration = 0.28 * m_res * m_cap * (1.0 + (700.0 / m_res));
break;
case TTL74123_NOT_GROUNDED_DIODE:
- duration = 0.25 * m_config.m_res * m_config.m_cap * (1.0 + (700.0 / m_config.m_res));
+ duration = 0.25 * m_res * m_cap * (1.0 + (700.0 / m_res));
break;
case TTL74123_GROUNDED:
default:
- if (m_config.m_cap < CAP_U(0.1))
+ if (m_cap < CAP_U(0.1))
{
/* this is really a curve - a very flat one in the 0.1uF-.01uF range */
- duration = 0.32 * m_config.m_res * m_config.m_cap;
+ duration = 0.32 * m_res * m_cap;
}
else
{
- duration = 0.33 * m_config.m_res * m_config.m_cap;
+ duration = 0.33 * m_res * m_cap;
}
break;
}
@@ -190,7 +145,7 @@ TIMER_CALLBACK( ttl74123_device::output_callback )
void ttl74123_device::output(INT32 param)
{
- m_config.m_output_changed_cb(this, 0, param);
+ m_output_changed_cb(this, 0, param);
}
@@ -222,7 +177,7 @@ void ttl74123_device::clear()
{
int output = timer_running();
- m_config.m_output_changed_cb(this, 0, output);
+ m_output_changed_cb(this, 0, output);
}
@@ -237,7 +192,7 @@ void ttl74123_device::start_pulse()
if(timer_running())
{
/* retriggering, but not if we are called to quickly */
- attotime delay_time = attotime(0, ATTOSECONDS_PER_SECOND * m_config.m_cap * 220);
+ attotime delay_time = attotime(0, ATTOSECONDS_PER_SECOND * m_cap * 220);
if(m_timer->elapsed() >= delay_time)
{
diff --git a/src/emu/machine/74123.h b/src/emu/machine/74123.h
index 005231a646d..1338c4e825d 100644
--- a/src/emu/machine/74123.h
+++ b/src/emu/machine/74123.h
@@ -87,38 +87,14 @@ struct ttl74123_interface
-// ======================> ttl74123_device_config
-
-class ttl74123_device_config : public device_config,
- public ttl74123_interface
-{
- friend class ttl74123_device;
-
- // construction/destruction
- ttl74123_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
-
// ======================> ttl74123_device
-class ttl74123_device : public device_t
+class ttl74123_device : public device_t,
+ public ttl74123_interface
{
- friend class ttl74123_device_config;
-
- // construction/destruction
- ttl74123_device(running_machine &_machine, const ttl74123_device_config &_config);
-
public:
+ // construction/destruction
+ ttl74123_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
void a_w(UINT8 data);
void b_w(UINT8 data);
@@ -127,6 +103,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -144,12 +121,7 @@ private:
attotime compute_duration();
void clear();
- UINT8 m_a; /* pin 1/9 */
- UINT8 m_b; /* pin 2/10 */
- UINT8 m_clear; /* pin 3/11 */
emu_timer *m_timer;
-
- const ttl74123_device_config &m_config;
};
diff --git a/src/emu/machine/74148.c b/src/emu/machine/74148.c
index 9a3a8df9556..accc2af5915 100644
--- a/src/emu/machine/74148.c
+++ b/src/emu/machine/74148.c
@@ -180,7 +180,7 @@ int ttl74148_enable_output_r(device_t *device)
static DEVICE_START( ttl74148 )
{
- ttl74148_config *config = (ttl74148_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ ttl74148_config *config = (ttl74148_config *)downcast<const legacy_device_base *>(device)->inline_config();
ttl74148_state *state = get_safe_token(device);
state->output_cb = config->output_cb;
diff --git a/src/emu/machine/74153.c b/src/emu/machine/74153.c
index 3d286195eed..cbb44d251ff 100644
--- a/src/emu/machine/74153.c
+++ b/src/emu/machine/74153.c
@@ -136,7 +136,7 @@ int ttl74153_output_r(device_t *device, int section)
static DEVICE_START( ttl74153 )
{
- ttl74153_config *config = (ttl74153_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ ttl74153_config *config = (ttl74153_config *)downcast<const legacy_device_base *>(device)->inline_config();
ttl74153_state *state = get_safe_token(device);
state->output_cb = config->output_cb;
diff --git a/src/emu/machine/7474.c b/src/emu/machine/7474.c
index 3b92dab2463..2bcacf7bce5 100644
--- a/src/emu/machine/7474.c
+++ b/src/emu/machine/7474.c
@@ -41,59 +41,34 @@
#include "7474.h"
-//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type MACHINE_TTL7474 = ttl7474_device_config::static_alloc_device_config;
-
-
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// ttl7474_device_config - constructor
-//-------------------------------------------------
-
-ttl7474_device_config::ttl7474_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "7474", tag, owner, clock)
-{
-}
-
+// device type definition
+const device_type MACHINE_TTL7474 = &device_creator<ttl7474_device>;
//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *ttl7474_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(ttl7474_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
+// ttl7474_device - constructor
//-------------------------------------------------
-device_t *ttl7474_device_config::alloc_device(running_machine &machine) const
+ttl7474_device::ttl7474_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MACHINE_TTL7474, "7474", tag, owner, clock)
{
- return auto_alloc(machine, ttl7474_device(machine, *this));
+ init();
}
-
//-------------------------------------------------
// static_set_target_tag - configuration helper
// to set the target tag
//-------------------------------------------------
-void ttl7474_device_config::static_set_target_tag(device_config *device, const char *tag)
+void ttl7474_device::static_set_target_tag(device_t &device, const char *tag)
{
- ttl7474_device_config *ttl7474 = downcast<ttl7474_device_config *>(device);
- ttl7474->m_output_cb.tag = tag;
- ttl7474->m_comp_output_cb.tag = tag;
+ ttl7474_device &ttl7474 = downcast<ttl7474_device &>(device);
+ ttl7474.m_output_cb.tag = tag;
+ ttl7474.m_comp_output_cb.tag = tag;
}
@@ -102,16 +77,16 @@ void ttl7474_device_config::static_set_target_tag(device_config *device, const c
// to set the output callback
//-------------------------------------------------
-void ttl7474_device_config::static_set_output_cb(device_config *device, write_line_device_func callback)
+void ttl7474_device::static_set_output_cb(device_t &device, write_line_device_func callback)
{
- ttl7474_device_config *ttl7474 = downcast<ttl7474_device_config *>(device);
+ ttl7474_device &ttl7474 = downcast<ttl7474_device &>(device);
if (callback != NULL)
{
- ttl7474->m_output_cb.type = DEVCB_TYPE_DEVICE;
- ttl7474->m_output_cb.writeline = callback;
+ ttl7474.m_output_cb.type = DEVCB_TYPE_DEVICE;
+ ttl7474.m_output_cb.writeline = callback;
}
else
- ttl7474->m_output_cb.type = DEVCB_TYPE_NULL;
+ ttl7474.m_output_cb.type = DEVCB_TYPE_NULL;
}
@@ -120,35 +95,19 @@ void ttl7474_device_config::static_set_output_cb(device_config *device, write_li
// helper to set the comp. output callback
//-------------------------------------------------
-void ttl7474_device_config::static_set_comp_output_cb(device_config *device, write_line_device_func callback)
+void ttl7474_device::static_set_comp_output_cb(device_t &device, write_line_device_func callback)
{
- ttl7474_device_config *ttl7474 = downcast<ttl7474_device_config *>(device);
+ ttl7474_device &ttl7474 = downcast<ttl7474_device &>(device);
if (callback != NULL)
{
- ttl7474->m_comp_output_cb.type = DEVCB_TYPE_DEVICE;
- ttl7474->m_comp_output_cb.writeline = callback;
+ ttl7474.m_comp_output_cb.type = DEVCB_TYPE_DEVICE;
+ ttl7474.m_comp_output_cb.writeline = callback;
}
else
- ttl7474->m_comp_output_cb.type = DEVCB_TYPE_NULL;
+ ttl7474.m_comp_output_cb.type = DEVCB_TYPE_NULL;
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// ttl7474_device - constructor
-//-------------------------------------------------
-
-ttl7474_device::ttl7474_device(running_machine &_machine, const ttl7474_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
- init();
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -165,8 +124,8 @@ void ttl7474_device::device_start()
save_item(NAME(m_last_output));
save_item(NAME(m_last_output_comp));
- devcb_resolve_write_line(&m_output_cb, &m_config.m_output_cb, this);
- devcb_resolve_write_line(&m_comp_output_cb, &m_config.m_comp_output_cb, this);
+ devcb_resolve_write_line(&m_output_func, &m_output_cb, this);
+ devcb_resolve_write_line(&m_comp_output_func, &m_comp_output_cb, this);
}
//-------------------------------------------------
@@ -213,13 +172,13 @@ void ttl7474_device::update()
if (m_output != m_last_output)
{
m_last_output = m_output;
- devcb_call_write_line(&m_output_cb, m_output);
+ devcb_call_write_line(&m_output_func, m_output);
}
/* call callback if any of the outputs changed */
if (m_output_comp != m_last_output_comp)
{
m_last_output_comp = m_output_comp;
- devcb_call_write_line(&m_comp_output_cb, m_output_comp);
+ devcb_call_write_line(&m_comp_output_func, m_output_comp);
}
}
diff --git a/src/emu/machine/7474.h b/src/emu/machine/7474.h
index 0f04969b9ce..2fd595ef326 100644
--- a/src/emu/machine/7474.h
+++ b/src/emu/machine/7474.h
@@ -63,13 +63,13 @@
MCFG_7474_COMP_OUTPUT_CB(_comp_output_cb)
#define MCFG_7474_TARGET_TAG(_target_tag) \
- ttl7474_device_config::static_set_target_tag(device, _target_tag); \
+ ttl7474_device::static_set_target_tag(*device, _target_tag); \
#define MCFG_7474_OUTPUT_CB(_cb) \
- ttl7474_device_config::static_set_output_cb(device, _cb); \
+ ttl7474_device::static_set_output_cb(*device, _cb); \
#define MCFG_7474_COMP_OUTPUT_CB(_cb) \
- ttl7474_device_config::static_set_comp_output_cb(device, _cb); \
+ ttl7474_device::static_set_comp_output_cb(*device, _cb); \
@@ -77,43 +77,20 @@
// TYPE DEFINITIONS
//**************************************************************************
-// ======================> ttl7474_device_config
-
-class ttl7474_device_config : public device_config
-{
- friend class ttl7474_device;
-
- // construction/destruction
- ttl7474_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
- // inline configuration helpers
- static void static_set_target_tag(device_config *device, const char *tag);
- static void static_set_output_cb(device_config *device, write_line_device_func callback);
- static void static_set_comp_output_cb(device_config *device, write_line_device_func callback);
-
-protected:
- // internal state goes here
- devcb_write_line m_output_cb;
- devcb_write_line m_comp_output_cb;
-};
-
-
-
// ======================> ttl7474_device
class ttl7474_device : public device_t
{
- friend class ttl7474_device_config;
-
+public:
// construction/destruction
- ttl7474_device(running_machine &_machine, const ttl7474_device_config &config);
+ ttl7474_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
+ // inline configuration helpers
+ static void static_set_target_tag(device_t &device, const char *tag);
+ static void static_set_output_cb(device_t &device, write_line_device_func callback);
+ static void static_set_comp_output_cb(device_t &device, write_line_device_func callback);
+
+ // public interfaces
void clear_w(UINT8 state);
void preset_w(UINT8 state);
void clock_w(UINT8 state);
@@ -128,13 +105,14 @@ protected:
virtual void device_post_load() { }
virtual void device_clock_changed() { }
- // internal state
- const ttl7474_device_config &m_config;
+ // configuration state
+ devcb_write_line m_output_cb;
+ devcb_write_line m_comp_output_cb;
private:
/* callbacks */
- devcb_resolved_write_line m_output_cb;
- devcb_resolved_write_line m_comp_output_cb;
+ devcb_resolved_write_line m_output_func;
+ devcb_resolved_write_line m_comp_output_func;
/* inputs */
UINT8 m_clear; /* pin 1/13 */
diff --git a/src/emu/machine/8237dma.c b/src/emu/machine/8237dma.c
index 0648e2925ff..3537fd832ec 100644
--- a/src/emu/machine/8237dma.c
+++ b/src/emu/machine/8237dma.c
@@ -45,10 +45,20 @@
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(i8237, "Intel 8237")
+// device type definition
+const device_type I8237 = &device_creator<i8237_device>;
+
+//-------------------------------------------------
+// i8237_device - constructor
+//-------------------------------------------------
+
+i8237_device::i8237_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8237, "Intel 8237", tag, owner, clock)
+{
+}
//-------------------------------------------------
// device_config_complete - perform any
@@ -56,7 +66,7 @@ GENERIC_DEVICE_CONFIG_SETUP(i8237, "Intel 8237")
// complete
//-------------------------------------------------
-void i8237_device_config::device_config_complete()
+void i8237_device::device_config_complete()
{
// inherit a copy of the static data
const i8237_interface *intf = reinterpret_cast<const i8237_interface *>(static_config());
@@ -68,43 +78,26 @@ void i8237_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_out_hrq_func, 0, sizeof(m_out_hrq_func));
- memset(&m_out_eop_func, 0, sizeof(m_out_eop_func));
- memset(&m_in_memr_func, 0, sizeof(m_in_memr_func));
- memset(&m_out_memw_func, 0, sizeof(m_out_memw_func));
- memset(&m_in_ior_func[0], 0, sizeof(m_in_ior_func[0]));
- memset(&m_in_ior_func[1], 0, sizeof(m_in_ior_func[1]));
- memset(&m_in_ior_func[2], 0, sizeof(m_in_ior_func[2]));
- memset(&m_in_ior_func[3], 0, sizeof(m_in_ior_func[3]));
- memset(&m_out_iow_func[0], 0, sizeof(m_out_iow_func[0]));
- memset(&m_out_iow_func[1], 0, sizeof(m_out_iow_func[1]));
- memset(&m_out_iow_func[2], 0, sizeof(m_out_iow_func[2]));
- memset(&m_out_iow_func[3], 0, sizeof(m_out_iow_func[3]));
- memset(&m_out_dack_func[0], 0, sizeof(m_out_dack_func[0]));
- memset(&m_out_dack_func[1], 0, sizeof(m_out_dack_func[1]));
- memset(&m_out_dack_func[2], 0, sizeof(m_out_dack_func[2]));
- memset(&m_out_dack_func[3], 0, sizeof(m_out_dack_func[3]));
+ memset(&m_out_hrq_cb, 0, sizeof(m_out_hrq_cb));
+ memset(&m_out_eop_cb, 0, sizeof(m_out_eop_cb));
+ memset(&m_in_memr_cb, 0, sizeof(m_in_memr_cb));
+ memset(&m_out_memw_cb, 0, sizeof(m_out_memw_cb));
+ memset(&m_in_ior_cb[0], 0, sizeof(m_in_ior_cb[0]));
+ memset(&m_in_ior_cb[1], 0, sizeof(m_in_ior_cb[1]));
+ memset(&m_in_ior_cb[2], 0, sizeof(m_in_ior_cb[2]));
+ memset(&m_in_ior_cb[3], 0, sizeof(m_in_ior_cb[3]));
+ memset(&m_out_iow_cb[0], 0, sizeof(m_out_iow_cb[0]));
+ memset(&m_out_iow_cb[1], 0, sizeof(m_out_iow_cb[1]));
+ memset(&m_out_iow_cb[2], 0, sizeof(m_out_iow_cb[2]));
+ memset(&m_out_iow_cb[3], 0, sizeof(m_out_iow_cb[3]));
+ memset(&m_out_dack_cb[0], 0, sizeof(m_out_dack_cb[0]));
+ memset(&m_out_dack_cb[1], 0, sizeof(m_out_dack_cb[1]));
+ memset(&m_out_dack_cb[2], 0, sizeof(m_out_dack_cb[2]));
+ memset(&m_out_dack_cb[3], 0, sizeof(m_out_dack_cb[3]));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type I8237 = i8237_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// i8237_device - constructor
-//-------------------------------------------------
-
-i8237_device::i8237_device(running_machine &_machine, const i8237_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -112,16 +105,16 @@ i8237_device::i8237_device(running_machine &_machine, const i8237_device_config
void i8237_device::device_start()
{
/* resolve callbacks */
- devcb_resolve_write_line(&m_out_hrq_func, &m_config.m_out_hrq_func, this);
- devcb_resolve_write_line(&m_out_eop_func, &m_config.m_out_eop_func, this);
- devcb_resolve_read8(&m_in_memr_func, &m_config.m_in_memr_func, this);
- devcb_resolve_write8(&m_out_memw_func, &m_config.m_out_memw_func, this);
+ devcb_resolve_write_line(&m_out_hrq_func, &m_out_hrq_cb, this);
+ devcb_resolve_write_line(&m_out_eop_func, &m_out_eop_cb, this);
+ devcb_resolve_read8(&m_in_memr_func, &m_in_memr_cb, this);
+ devcb_resolve_write8(&m_out_memw_func, &m_out_memw_cb, this);
for (int i = 0; i < 4; i++)
{
- devcb_resolve_read8(&m_chan[i].m_in_ior_func, &m_config.m_in_ior_func[i], this);
- devcb_resolve_write8(&m_chan[i].m_out_iow_func, &m_config.m_out_iow_func[i], this);
- devcb_resolve_write_line(&m_chan[i].m_out_dack_func, &m_config.m_out_dack_func[i], this);
+ devcb_resolve_read8(&m_chan[i].m_in_ior_func, &m_in_ior_cb[i], this);
+ devcb_resolve_write8(&m_chan[i].m_out_iow_func, &m_out_iow_cb[i], this);
+ devcb_resolve_write_line(&m_chan[i].m_out_dack_func, &m_out_dack_cb[i], this);
}
m_timer = machine().scheduler().timer_alloc(FUNC(i8237_timerproc_callback), (void *)this);
diff --git a/src/emu/machine/8237dma.h b/src/emu/machine/8237dma.h
index dd8f9829cd9..864aba746ad 100644
--- a/src/emu/machine/8237dma.h
+++ b/src/emu/machine/8237dma.h
@@ -60,53 +60,29 @@
struct i8237_interface
{
- devcb_write_line m_out_hrq_func;
- devcb_write_line m_out_eop_func;
+ devcb_write_line m_out_hrq_cb;
+ devcb_write_line m_out_eop_cb;
/* accessors to main memory */
- devcb_read8 m_in_memr_func;
- devcb_write8 m_out_memw_func;
+ devcb_read8 m_in_memr_cb;
+ devcb_write8 m_out_memw_cb;
/* channel accessors */
- devcb_read8 m_in_ior_func[4];
- devcb_write8 m_out_iow_func[4];
- devcb_write_line m_out_dack_func[4];
-};
-
-
-
-// ======================> i8237_device_config
-
-class i8237_device_config : public device_config,
- public i8237_interface
-{
- friend class i8237_device;
-
- // construction/destruction
- i8237_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_ior_cb[4];
+ devcb_write8 m_out_iow_cb[4];
+ devcb_write_line m_out_dack_cb[4];
};
// ======================> i8237_device
-class i8237_device : public device_t
+class i8237_device : public device_t,
+ public i8237_interface
{
- friend class i8237_device_config;
-
- // construction/destruction
- i8237_device(running_machine &_machine, const i8237_device_config &_config);
-
public:
+ // construction/destruction
+ i8237_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
/* register access */
UINT8 i8237_r(UINT32 offset);
@@ -122,6 +98,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -199,8 +176,6 @@ private:
dma8237_state m_state; /* State the device is currently in */
int m_service_channel; /* Channel we will be servicing */
int m_last_service_channel; /* Previous channel we serviced; used to determine channel priority. */
-
- const i8237_device_config &m_config;
};
diff --git a/src/emu/machine/8255ppi.c b/src/emu/machine/8255ppi.c
index 5ed908be7bb..9b98b24a5b2 100644
--- a/src/emu/machine/8255ppi.c
+++ b/src/emu/machine/8255ppi.c
@@ -94,11 +94,24 @@
#include "8255ppi.h"
#include "devhelpr.h"
+
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(ppi8255, "Intel PPI8255")
+// device type definition
+const device_type PPI8255 = &device_creator<ppi8255_device>;
+
+//-------------------------------------------------
+// ppi8255_device - constructor
+//-------------------------------------------------
+
+ppi8255_device::ppi8255_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, PPI8255, "Intel PPI8255", tag, owner, clock)
+{
+
+}
+
//-------------------------------------------------
// device_config_complete - perform any
@@ -106,7 +119,7 @@ GENERIC_DEVICE_CONFIG_SETUP(ppi8255, "Intel PPI8255")
// complete
//-------------------------------------------------
-void ppi8255_device_config::device_config_complete()
+void ppi8255_device::device_config_complete()
{
// inherit a copy of the static data
const ppi8255_interface *intf = reinterpret_cast<const ppi8255_interface *>(static_config());
@@ -128,37 +141,19 @@ void ppi8255_device_config::device_config_complete()
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type PPI8255 = ppi8255_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// ppi8255_device - constructor
-//-------------------------------------------------
-
-ppi8255_device::ppi8255_device(running_machine &_machine, const ppi8255_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void ppi8255_device::device_start()
{
- devcb_resolve_read8(&m_port_read[0], &m_config.m_port_a_read, this);
- devcb_resolve_read8(&m_port_read[1], &m_config.m_port_b_read, this);
- devcb_resolve_read8(&m_port_read[2], &m_config.m_port_c_read, this);
+ devcb_resolve_read8(&m_port_read[0], &m_port_a_read, this);
+ devcb_resolve_read8(&m_port_read[1], &m_port_b_read, this);
+ devcb_resolve_read8(&m_port_read[2], &m_port_c_read, this);
- devcb_resolve_write8(&m_port_write[0], &m_config.m_port_a_write, this);
- devcb_resolve_write8(&m_port_write[1], &m_config.m_port_b_write, this);
- devcb_resolve_write8(&m_port_write[2], &m_config.m_port_c_write, this);
+ devcb_resolve_write8(&m_port_write[0], &m_port_a_write, this);
+ devcb_resolve_write8(&m_port_write[1], &m_port_b_write, this);
+ devcb_resolve_write8(&m_port_write[2], &m_port_c_write, this);
/* register for state saving */
save_item(NAME(m_group_a_mode));
diff --git a/src/emu/machine/8255ppi.h b/src/emu/machine/8255ppi.h
index ecd7ebe6339..229dc8265cf 100644
--- a/src/emu/machine/8255ppi.h
+++ b/src/emu/machine/8255ppi.h
@@ -46,37 +46,14 @@ struct ppi8255_interface
};
-// ======================> ppi8255_device_config
-
-class ppi8255_device_config : public device_config,
- public ppi8255_interface
-{
- friend class ppi8255_device;
-
- // construction/destruction
- ppi8255_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
// ======================> ppi8255_device
-class ppi8255_device : public device_t
+class ppi8255_device : public device_t,
+ public ppi8255_interface
{
- friend class ppi8255_device_config;
-
- // construction/destruction
- ppi8255_device(running_machine &_machine, const ppi8255_device_config &_config);
-
public:
+ // construction/destruction
+ ppi8255_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
UINT8 ppi8255_r(UINT32 offset);
void ppi8255_w(UINT32 offset, UINT8 data);
@@ -97,6 +74,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -141,8 +119,6 @@ private:
UINT8 m_latch[3]; /* data written to ports */
UINT8 m_output[3]; /* actual output data */
UINT8 m_control; /* mode control word */
-
- const ppi8255_device_config &m_config;
};
diff --git a/src/emu/machine/8257dma.c b/src/emu/machine/8257dma.c
index 55a20384e44..ba9ff0bfd5a 100644
--- a/src/emu/machine/8257dma.c
+++ b/src/emu/machine/8257dma.c
@@ -48,10 +48,30 @@
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(i8257, "DMA8257")
+// device type definition
+const device_type I8257 = &device_creator<i8257_device>;
+
+//-------------------------------------------------
+// i8257_device - constructor
+//-------------------------------------------------
+
+i8257_device::i8257_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8257, "DMA8257", tag, owner, clock),
+ m_mode(0),
+ m_rr(0),
+ m_msb(0),
+ m_drq(0),
+ m_status(0x0f)
+{
+ memset(m_registers, 0, sizeof(m_registers));
+ memset(m_address, 0, sizeof(m_address));
+ memset(m_count, 0, sizeof(m_count));
+ memset(m_rwmode, 0, sizeof(m_rwmode));
+}
+
//-------------------------------------------------
// device_config_complete - perform any
@@ -59,7 +79,7 @@ GENERIC_DEVICE_CONFIG_SETUP(i8257, "DMA8257")
// complete
//-------------------------------------------------
-void i8257_device_config::device_config_complete()
+void i8257_device::device_config_complete()
{
// inherit a copy of the static data
const i8257_interface *intf = reinterpret_cast<const i8257_interface *>(static_config());
@@ -71,49 +91,23 @@ void i8257_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_out_hrq_func, 0, sizeof(m_out_hrq_func));
- memset(&m_out_tc_func, 0, sizeof(m_out_tc_func));
- memset(&m_out_mark_func, 0, sizeof(m_out_mark_func));
- memset(&m_in_memr_func, 0, sizeof(m_in_memr_func));
- memset(&m_out_memw_func, 0, sizeof(m_out_memw_func));
- memset(&m_in_ior_func[0], 0, sizeof(m_in_ior_func[0]));
- memset(&m_in_ior_func[1], 0, sizeof(m_in_ior_func[1]));
- memset(&m_in_ior_func[2], 0, sizeof(m_in_ior_func[2]));
- memset(&m_in_ior_func[3], 0, sizeof(m_in_ior_func[3]));
- memset(&m_out_iow_func[0], 0, sizeof(m_out_iow_func[0]));
- memset(&m_out_iow_func[1], 0, sizeof(m_out_iow_func[1]));
- memset(&m_out_iow_func[2], 0, sizeof(m_out_iow_func[2]));
- memset(&m_out_iow_func[3], 0, sizeof(m_out_iow_func[3]));
+ memset(&m_out_hrq_cb, 0, sizeof(m_out_hrq_cb));
+ memset(&m_out_tc_cb, 0, sizeof(m_out_tc_cb));
+ memset(&m_out_mark_cb, 0, sizeof(m_out_mark_cb));
+ memset(&m_in_memr_cb, 0, sizeof(m_in_memr_cb));
+ memset(&m_out_memw_cb, 0, sizeof(m_out_memw_cb));
+ memset(&m_in_ior_cb[0], 0, sizeof(m_in_ior_cb[0]));
+ memset(&m_in_ior_cb[1], 0, sizeof(m_in_ior_cb[1]));
+ memset(&m_in_ior_cb[2], 0, sizeof(m_in_ior_cb[2]));
+ memset(&m_in_ior_cb[3], 0, sizeof(m_in_ior_cb[3]));
+ memset(&m_out_iow_cb[0], 0, sizeof(m_out_iow_cb[0]));
+ memset(&m_out_iow_cb[1], 0, sizeof(m_out_iow_cb[1]));
+ memset(&m_out_iow_cb[2], 0, sizeof(m_out_iow_cb[2]));
+ memset(&m_out_iow_cb[3], 0, sizeof(m_out_iow_cb[3]));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type I8257 = i8257_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// i8257_device - constructor
-//-------------------------------------------------
-
-i8257_device::i8257_device(running_machine &_machine, const i8257_device_config &config)
- : device_t(_machine, config),
- m_mode(0),
- m_rr(0),
- m_msb(0),
- m_drq(0),
- m_status(0x0f),
- m_config(config)
-{
- memset(m_registers, 0, sizeof(m_registers));
- memset(m_address, 0, sizeof(m_address));
- memset(m_count, 0, sizeof(m_count));
- memset(m_rwmode, 0, sizeof(m_rwmode));
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -124,16 +118,16 @@ void i8257_device::device_start()
assert(this != NULL);
/* resolve callbacks */
- devcb_resolve_write_line(&m_out_hrq_func, &m_config.m_out_hrq_func, this);
- devcb_resolve_write_line(&m_out_tc_func, &m_config.m_out_tc_func, this);
- devcb_resolve_write_line(&m_out_mark_func, &m_config.m_out_mark_func, this);
- devcb_resolve_read8(&m_in_memr_func, &m_config.m_in_memr_func, this);
- devcb_resolve_write8(&m_out_memw_func, &m_config.m_out_memw_func, this);
+ devcb_resolve_write_line(&m_out_hrq_func, &m_out_hrq_cb, this);
+ devcb_resolve_write_line(&m_out_tc_func, &m_out_tc_cb, this);
+ devcb_resolve_write_line(&m_out_mark_func, &m_out_mark_cb, this);
+ devcb_resolve_read8(&m_in_memr_func, &m_in_memr_cb, this);
+ devcb_resolve_write8(&m_out_memw_func, &m_out_memw_cb, this);
for (int i = 0; i < I8257_NUM_CHANNELS; i++)
{
- devcb_resolve_read8(&m_in_ior_func[i], &m_config.m_in_ior_func[i], this);
- devcb_resolve_write8(&m_out_iow_func[i], &m_config.m_out_iow_func[i], this);
+ devcb_resolve_read8(&m_in_ior_func[i], &m_in_ior_cb[i], this);
+ devcb_resolve_write8(&m_out_iow_func[i], &m_out_iow_cb[i], this);
}
/* set initial values */
diff --git a/src/emu/machine/8257dma.h b/src/emu/machine/8257dma.h
index e4cf1593f75..0c96150dfa7 100644
--- a/src/emu/machine/8257dma.h
+++ b/src/emu/machine/8257dma.h
@@ -62,53 +62,29 @@
struct i8257_interface
{
- devcb_write_line m_out_hrq_func;
- devcb_write_line m_out_tc_func;
- devcb_write_line m_out_mark_func;
+ devcb_write_line m_out_hrq_cb;
+ devcb_write_line m_out_tc_cb;
+ devcb_write_line m_out_mark_cb;
/* accessors to main memory */
- devcb_read8 m_in_memr_func; // TODO m_in_memr_func[I8257_NUM_CHANNELS];
- devcb_write8 m_out_memw_func; // TODO m_out_memw_func[I8257_NUM_CHANNELS];
+ devcb_read8 m_in_memr_cb; // TODO m_in_memr_cb[I8257_NUM_CHANNELS];
+ devcb_write8 m_out_memw_cb; // TODO m_out_memw_cb[I8257_NUM_CHANNELS];
/* channel accesors */
- devcb_read8 m_in_ior_func[I8257_NUM_CHANNELS];
- devcb_write8 m_out_iow_func[I8257_NUM_CHANNELS];
-};
-
-
-
-// ======================> i8257_device_config
-
-class i8257_device_config : public device_config,
- public i8257_interface
-{
- friend class i8257_device;
-
- // construction/destruction
- i8257_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_ior_cb[I8257_NUM_CHANNELS];
+ devcb_write8 m_out_iow_cb[I8257_NUM_CHANNELS];
};
// ======================> i8257_device
-class i8257_device : public device_t
+class i8257_device : public device_t,
+ public i8257_interface
{
- friend class i8257_device_config;
-
- // construction/destruction
- i8257_device(running_machine &_machine, const i8257_device_config &_config);
-
public:
+ // construction/destruction
+ i8257_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
/* register access */
UINT8 i8257_r(UINT32 offset);
@@ -119,6 +95,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -157,8 +134,6 @@ private:
/* bits 0- 3 : Terminal count for channels 0-3 */
UINT8 m_status;
-
- const i8257_device_config &m_config;
};
diff --git a/src/emu/machine/adc0808.c b/src/emu/machine/adc0808.c
index 35465093925..2dd30a21092 100644
--- a/src/emu/machine/adc0808.c
+++ b/src/emu/machine/adc0808.c
@@ -13,25 +13,26 @@
-//**************************************************************************
-// MACROS / CONSTANTS
-//**************************************************************************
-
-
//**************************************************************************
-// DEVICE DEFINITIONS
+// LIVE DEVICE
//**************************************************************************
-const device_type ADC0808 = adc0808_device_config::static_alloc_device_config;
+// device type definition
+const device_type ADC0808 = &device_creator<adc0808_device>;
+//-------------------------------------------------
+// adc0808_device - constructor
+//-------------------------------------------------
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(adc0808, "ADC0808")
+adc0808_device::adc0808_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ADC0808, "ADC0808", tag, owner, clock),
+ m_address(0),
+ m_start(0),
+ m_next_eoc(0),
+ m_cycle(0)
+{
+}
//-------------------------------------------------
@@ -40,7 +41,7 @@ GENERIC_DEVICE_CONFIG_SETUP(adc0808, "ADC0808")
// complete
//-------------------------------------------------
-void adc0808_device_config::device_config_complete()
+void adc0808_device::device_config_complete()
{
// inherit a copy of the static data
const adc0808_interface *intf = reinterpret_cast<const adc0808_interface *>(static_config());
@@ -50,31 +51,11 @@ void adc0808_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_out_eoc_func, 0, sizeof(m_out_eoc_func));
+ memset(&m_out_eoc_cb, 0, sizeof(m_out_eoc_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// adc0808_device - constructor
-//-------------------------------------------------
-
-adc0808_device::adc0808_device(running_machine &_machine, const adc0808_device_config &config)
- : device_t(_machine, config),
- m_address(0),
- m_start(0),
- m_next_eoc(0),
- m_cycle(0),
- m_config(config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -82,7 +63,7 @@ adc0808_device::adc0808_device(running_machine &_machine, const adc0808_device_c
void adc0808_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_eoc_func, &m_config.m_out_eoc_func, this);
+ devcb_resolve_write_line(&m_out_eoc_func, &m_out_eoc_cb, this);
// allocate timers
m_cycle_timer = timer_alloc();
@@ -114,10 +95,10 @@ void adc0808_device::device_timer(emu_timer &timer, device_timer_id id, int para
if (m_bit == 8)
{
/* sample input */
- double vref_pos = m_config.m_in_vref_pos_func(this);
- double vref_neg = m_config.m_in_vref_neg_func(this);
+ double vref_pos = m_in_vref_pos_func(this);
+ double vref_neg = m_in_vref_neg_func(this);
- double input = m_config.m_in_in_func[m_address](this);
+ double input = m_in_in_func[m_address](this);
m_sar = (255 * (input - vref_neg)) / (vref_pos - vref_neg);
diff --git a/src/emu/machine/adc0808.h b/src/emu/machine/adc0808.h
index 071572d52b7..68c132bdf9f 100644
--- a/src/emu/machine/adc0808.h
+++ b/src/emu/machine/adc0808.h
@@ -61,7 +61,7 @@ typedef double (*adc0808_analog_read) (device_t *device);
struct adc0808_interface
{
- devcb_write_line m_out_eoc_func;
+ devcb_write_line m_out_eoc_cb;
adc0808_analog_read m_in_vref_pos_func;
adc0808_analog_read m_in_vref_neg_func;
@@ -70,37 +70,15 @@ struct adc0808_interface
};
-// ======================> adc0808_device_config
-
-class adc0808_device_config : public device_config,
- public adc0808_interface
-{
- friend class adc0808_device;
-
- // construction/destruction
- adc0808_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
// ======================> adc0808_device
-class adc0808_device : public device_t
+class adc0808_device : public device_t,
+ public adc0808_interface
{
- friend class adc0808_device_config;
-
+public:
// construction/destruction
- adc0808_device(running_machine &_machine, const adc0808_device_config &_config);
+ adc0808_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( data_r );
DECLARE_WRITE8_MEMBER( ale_w );
@@ -108,6 +86,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -126,8 +105,6 @@ private:
// timers
emu_timer *m_cycle_timer;
-
- const adc0808_device_config &m_config;
};
diff --git a/src/emu/machine/adc083x.c b/src/emu/machine/adc083x.c
index 6e14a262e32..aab3d868600 100644
--- a/src/emu/machine/adc083x.c
+++ b/src/emu/machine/adc083x.c
@@ -82,7 +82,7 @@ INLINE const adc083x_interface *get_interface( device_t *device )
{
assert( device != NULL );
assert( ( device->type() == ADC0831 ) || ( device->type() == ADC0832 ) || ( device->type() == ADC0834 ) || ( device->type() == ADC0838 ) );
- return (const adc083x_interface *) device->baseconfig().static_config();
+ return (const adc083x_interface *) device->static_config();
}
diff --git a/src/emu/machine/adc1038.c b/src/emu/machine/adc1038.c
index f0f9036a99c..acf2ee32274 100644
--- a/src/emu/machine/adc1038.c
+++ b/src/emu/machine/adc1038.c
@@ -45,7 +45,7 @@ INLINE const adc1038_interface *adc1038_get_interface( device_t *device )
{
assert(device != NULL);
assert((device->type() == ADC1038));
- return (const adc1038_interface *) device->baseconfig().static_config();
+ return (const adc1038_interface *) device->static_config();
}
/*****************************************************************************
diff --git a/src/emu/machine/adc1213x.c b/src/emu/machine/adc1213x.c
index 14a3fc1a48f..38a589c122d 100644
--- a/src/emu/machine/adc1213x.c
+++ b/src/emu/machine/adc1213x.c
@@ -65,7 +65,7 @@ INLINE const adc12138_interface *get_interface(device_t *device)
{
assert(device != NULL);
assert((device->type() == ADC12130) || (device->type() == ADC12132) || (device->type() == ADC12138));
- return (const adc12138_interface *) device->baseconfig().static_config();
+ return (const adc12138_interface *) device->static_config();
}
diff --git a/src/emu/machine/at28c16.c b/src/emu/machine/at28c16.c
index f7090fa3671..1101b3ee8e4 100644
--- a/src/emu/machine/at28c16.c
+++ b/src/emu/machine/at28c16.c
@@ -20,8 +20,6 @@
// GLOBAL VARIABLES
//**************************************************************************
-const device_type AT28C16 = at28c16_device_config::static_alloc_device_config;
-
static ADDRESS_MAP_START( at28c16_map8, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x081f) AM_RAM
ADDRESS_MAP_END
@@ -29,41 +27,24 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// at28c16_device_config - constructor
-//-------------------------------------------------
-
-at28c16_device_config::at28c16_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock )
- : device_config(mconfig, static_alloc_device_config, "AT28C16", tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this)
-{
-}
-
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *at28c16_device_config::static_alloc_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock )
-{
- return global_alloc( at28c16_device_config( mconfig, tag, owner, clock ) );
-}
-
-
+// device type definition
+const device_type AT28C16 = &device_creator<at28c16_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// at28c16_device - constructor
//-------------------------------------------------
-device_t *at28c16_device_config::alloc_device( running_machine &machine ) const
+at28c16_device::at28c16_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock )
+ : device_t(mconfig, AT28C16, "AT28C16", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
+ m_a9_12v( 0 ),
+ m_oe_12v( 0 ),
+ m_last_write( -1 )
{
- return auto_alloc( machine, at28c16_device( machine, *this ) );
}
@@ -73,7 +54,7 @@ device_t *at28c16_device_config::alloc_device( running_machine &machine ) const
// complete
//-------------------------------------------------
-void at28c16_device_config::device_config_complete()
+void at28c16_device::device_config_complete()
{
m_space_config = address_space_config( "at28c16", ENDIANNESS_BIG, 8, 12, 0, *ADDRESS_MAP_NAME( at28c16_map8 ) );
}
@@ -84,7 +65,7 @@ void at28c16_device_config::device_config_complete()
// on this device
//-------------------------------------------------
-bool at28c16_device_config::device_validity_check( emu_options &options, const game_driver &driver ) const
+bool at28c16_device::device_validity_check( emu_options &options, const game_driver &driver ) const
{
return false;
}
@@ -95,34 +76,12 @@ bool at28c16_device_config::device_validity_check( emu_options &options, const g
// any address spaces owned by this device
//-------------------------------------------------
-const address_space_config *at28c16_device_config::memory_space_config( address_spacenum spacenum ) const
+const address_space_config *at28c16_device::memory_space_config( address_spacenum spacenum ) const
{
return ( spacenum == 0 ) ? &m_space_config : NULL;
}
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// at28c16_device - constructor
-//-------------------------------------------------
-
-at28c16_device::at28c16_device( running_machine &_machine, const at28c16_device_config &config ) :
- device_t( _machine, config ),
- device_memory_interface( _machine, config, *this ),
- device_nvram_interface( _machine, config, *this ),
- m_config( config ),
- m_a9_12v( 0 ),
- m_oe_12v( 0 ),
- m_last_write( -1 )
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
diff --git a/src/emu/machine/at28c16.h b/src/emu/machine/at28c16.h
index 040a821b592..a891d51881b 100644
--- a/src/emu/machine/at28c16.h
+++ b/src/emu/machine/at28c16.h
@@ -31,56 +31,18 @@ struct at28c16_interface
};
-// ======================> at28c16_device_config
-
-class at28c16_device_config :
- public device_config,
- public device_config_memory_interface,
- public device_config_nvram_interface,
- public at28c16_interface
-{
- friend class at28c16_device;
-
- // construction/destruction
- at28c16_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock );
-
-public:
- // allocators
- static device_config *static_alloc_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock );
- virtual device_t *alloc_device( running_machine &machine ) const;
-
- // inline configuration indexes
- enum
- {
- INLINE_INTERFACE
- };
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
- virtual bool device_validity_check( emu_options &options, const game_driver &driver ) const;
-
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config( address_spacenum spacenum = AS_0 ) const;
-
- // device-specific configuration
- address_space_config m_space_config;
-};
-
-
// ======================> at28c16_device
class at28c16_device :
public device_t,
public device_memory_interface,
- public device_nvram_interface
+ public device_nvram_interface,
+ public at28c16_interface
{
- friend class at28c16_device_config;
-
+public:
// construction/destruction
- at28c16_device( running_machine &_machine, const at28c16_device_config &config );
+ at28c16_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock );
-public:
// I/O operations
void write( offs_t offset, UINT8 data );
UINT8 read( offs_t offset );
@@ -89,9 +51,14 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
+ virtual bool device_validity_check( emu_options &options, const game_driver &driver ) const;
virtual void device_start();
virtual void device_reset();
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config( address_spacenum spacenum = AS_0 ) const;
+
// device_nvram_interface overrides
virtual void nvram_default();
virtual void nvram_read( emu_file &file );
@@ -101,7 +68,7 @@ protected:
static TIMER_CALLBACK( write_finished );
// internal state
- const at28c16_device_config &m_config;
+ address_space_config m_space_config;
emu_timer *m_write_timer;
int m_a9_12v;
int m_oe_12v;
diff --git a/src/emu/machine/cdp1852.c b/src/emu/machine/cdp1852.c
index cffeb25d374..a57253c8e24 100644
--- a/src/emu/machine/cdp1852.c
+++ b/src/emu/machine/cdp1852.c
@@ -11,6 +11,9 @@
#include "machine/devhelpr.h"
+// device type definition
+const device_type CDP1852 = &device_creator<cdp1852_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -25,46 +28,6 @@ enum
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type CDP1852 = cdp1852_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(cdp1852, "CDP1852")
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void cdp1852_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const cdp1852_interface *intf = reinterpret_cast<const cdp1852_interface *>(static_config());
- if (intf != NULL)
- *static_cast<cdp1852_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_in_mode_func, 0, sizeof(m_in_mode_func));
- memset(&m_out_sr_func, 0, sizeof(m_out_sr_func));
- memset(&m_in_data_func, 0, sizeof(m_in_data_func));
- memset(&m_out_data_func, 0, sizeof(m_out_data_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -102,24 +65,47 @@ void cdp1852_device::set_sr_line(int state)
// cdp1852_device - constructor
//-------------------------------------------------
-cdp1852_device::cdp1852_device(running_machine &_machine, const cdp1852_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+cdp1852_device::cdp1852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, CDP1852, "CDP1852", tag, owner, clock)
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void cdp1852_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const cdp1852_interface *intf = reinterpret_cast<const cdp1852_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<cdp1852_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_in_mode_cb, 0, sizeof(m_in_mode_cb));
+ memset(&m_out_sr_cb, 0, sizeof(m_out_sr_cb));
+ memset(&m_in_data_cb, 0, sizeof(m_in_data_cb));
+ memset(&m_out_data_cb, 0, sizeof(m_out_data_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void cdp1852_device::device_start()
{
// resolve callbacks
- devcb_resolve_read_line(&m_in_mode_func, &m_config.m_in_mode_func, this);
- devcb_resolve_write_line(&m_out_sr_func, &m_config.m_out_sr_func, this);
- devcb_resolve_read8(&m_in_data_func, &m_config.m_in_data_func, this);
- devcb_resolve_write8(&m_out_data_func, &m_config.m_out_data_func, this);
+ devcb_resolve_read_line(&m_in_mode_func, &m_in_mode_cb, this);
+ devcb_resolve_write_line(&m_out_sr_func, &m_out_sr_cb, this);
+ devcb_resolve_read8(&m_in_data_func, &m_in_data_cb, this);
+ devcb_resolve_write8(&m_out_data_func, &m_out_data_cb, this);
// allocate timers
if (clock() > 0)
diff --git a/src/emu/machine/cdp1852.h b/src/emu/machine/cdp1852.h
index f72ffc5ab06..6ddf7eaf8aa 100644
--- a/src/emu/machine/cdp1852.h
+++ b/src/emu/machine/cdp1852.h
@@ -67,51 +67,30 @@
struct cdp1852_interface
{
- devcb_read_line m_in_mode_func;
+ devcb_read_line m_in_mode_cb;
- devcb_read8 m_in_data_func;
- devcb_write8 m_out_data_func;
+ devcb_read8 m_in_data_cb;
+ devcb_write8 m_out_data_cb;
- devcb_write_line m_out_sr_func;
-};
-
-
-// ======================> cdp1852_device_config
-
-class cdp1852_device_config : public device_config,
- public cdp1852_interface
-{
- friend class cdp1852_device;
-
- // construction/destruction
- cdp1852_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_out_sr_cb;
};
// ======================> cdp1852_device
-class cdp1852_device : public device_t
+class cdp1852_device : public device_t,
+ public cdp1852_interface
{
- friend class cdp1852_device_config;
-
+public:
// construction/destruction
- cdp1852_device(running_machine &_machine, const cdp1852_device_config &_config);
+ cdp1852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -134,8 +113,6 @@ private:
// timers
emu_timer *m_scan_timer;
-
- const cdp1852_device_config &m_config;
};
diff --git a/src/emu/machine/cdp1871.c b/src/emu/machine/cdp1871.c
index 1acacdf25da..e7e55b537e4 100644
--- a/src/emu/machine/cdp1871.c
+++ b/src/emu/machine/cdp1871.c
@@ -13,6 +13,9 @@
#include "machine/devhelpr.h"
+// device type definition
+const device_type CDP1871 = &device_creator<cdp1871_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -84,18 +87,23 @@ static const UINT8 CDP1871_KEY_CODES[4][11][8] =
//**************************************************************************
-// DEVICE DEFINITIONS
+// LIVE DEVICE
//**************************************************************************
-const device_type CDP1871 = cdp1871_device_config::static_alloc_device_config;
-
-
+//-------------------------------------------------
+// cdp1871_device - constructor
+//-------------------------------------------------
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
+cdp1871_device::cdp1871_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, CDP1871, "RCA CDP1871", tag, owner, clock),
+ m_inhibit(false),
+ m_sense(0),
+ m_drive(0),
+ m_next_da(CLEAR_LINE),
+ m_next_rpt(CLEAR_LINE)
+{
-GENERIC_DEVICE_CONFIG_SETUP(cdp1871, "RCA CDP1871")
+}
//-------------------------------------------------
@@ -104,7 +112,7 @@ GENERIC_DEVICE_CONFIG_SETUP(cdp1871, "RCA CDP1871")
// complete
//-------------------------------------------------
-void cdp1871_device_config::device_config_complete()
+void cdp1871_device::device_config_complete()
{
// inherit a copy of the static data
const cdp1871_interface *intf = reinterpret_cast<const cdp1871_interface *>(static_config());
@@ -114,38 +122,16 @@ void cdp1871_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&out_da_func, 0, sizeof(out_da_func));
- memset(&out_rpt_func, 0, sizeof(out_rpt_func));
- // m_in_d_func[]
- memset(&in_shift_func, 0, sizeof(in_shift_func));
- memset(&in_control_func, 0, sizeof(in_control_func));
- memset(&in_alpha_func, 0, sizeof(in_alpha_func));
+ memset(&out_da_cb, 0, sizeof(out_da_cb));
+ memset(&out_rpt_cb, 0, sizeof(out_rpt_cb));
+ // m_in_d_cb[]
+ memset(&in_shift_cb, 0, sizeof(in_shift_cb));
+ memset(&in_control_cb, 0, sizeof(in_control_cb));
+ memset(&in_alpha_cb, 0, sizeof(in_alpha_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// cdp1871_device - constructor
-//-------------------------------------------------
-
-cdp1871_device::cdp1871_device(running_machine &_machine, const cdp1871_device_config &config)
- : device_t(_machine, config),
- m_inhibit(false),
- m_sense(0),
- m_drive(0),
- m_next_da(CLEAR_LINE),
- m_next_rpt(CLEAR_LINE),
- m_config(config)
-{
-
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -153,22 +139,22 @@ cdp1871_device::cdp1871_device(running_machine &_machine, const cdp1871_device_c
void cdp1871_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_da_func, &m_config.out_da_func, this);
- devcb_resolve_write_line(&m_out_rpt_func, &m_config.out_rpt_func, this);
- devcb_resolve_read8(&m_in_d_func[0], &m_config.in_d1_func, this);
- devcb_resolve_read8(&m_in_d_func[1], &m_config.in_d2_func, this);
- devcb_resolve_read8(&m_in_d_func[2], &m_config.in_d3_func, this);
- devcb_resolve_read8(&m_in_d_func[3], &m_config.in_d4_func, this);
- devcb_resolve_read8(&m_in_d_func[4], &m_config.in_d5_func, this);
- devcb_resolve_read8(&m_in_d_func[5], &m_config.in_d6_func, this);
- devcb_resolve_read8(&m_in_d_func[6], &m_config.in_d7_func, this);
- devcb_resolve_read8(&m_in_d_func[7], &m_config.in_d8_func, this);
- devcb_resolve_read8(&m_in_d_func[8], &m_config.in_d9_func, this);
- devcb_resolve_read8(&m_in_d_func[9], &m_config.in_d10_func, this);
- devcb_resolve_read8(&m_in_d_func[10], &m_config.in_d11_func, this);
- devcb_resolve_read_line(&m_in_shift_func, &m_config.in_shift_func, this);
- devcb_resolve_read_line(&m_in_control_func, &m_config.in_control_func, this);
- devcb_resolve_read_line(&m_in_alpha_func, &m_config.in_alpha_func, this);
+ devcb_resolve_write_line(&m_out_da_func, &out_da_cb, this);
+ devcb_resolve_write_line(&m_out_rpt_func, &out_rpt_cb, this);
+ devcb_resolve_read8(&m_in_d_func[0], &in_d1_cb, this);
+ devcb_resolve_read8(&m_in_d_func[1], &in_d2_cb, this);
+ devcb_resolve_read8(&m_in_d_func[2], &in_d3_cb, this);
+ devcb_resolve_read8(&m_in_d_func[3], &in_d4_cb, this);
+ devcb_resolve_read8(&m_in_d_func[4], &in_d5_cb, this);
+ devcb_resolve_read8(&m_in_d_func[5], &in_d6_cb, this);
+ devcb_resolve_read8(&m_in_d_func[6], &in_d7_cb, this);
+ devcb_resolve_read8(&m_in_d_func[7], &in_d8_cb, this);
+ devcb_resolve_read8(&m_in_d_func[8], &in_d9_cb, this);
+ devcb_resolve_read8(&m_in_d_func[9], &in_d10_cb, this);
+ devcb_resolve_read8(&m_in_d_func[10], &in_d11_cb, this);
+ devcb_resolve_read_line(&m_in_shift_func, &in_shift_cb, this);
+ devcb_resolve_read_line(&m_in_control_func, &in_control_cb, this);
+ devcb_resolve_read_line(&m_in_alpha_func, &in_alpha_cb, this);
// set initial values
change_output_lines();
diff --git a/src/emu/machine/cdp1871.h b/src/emu/machine/cdp1871.h
index 6d3a7fffc6d..cc803c83821 100644
--- a/src/emu/machine/cdp1871.h
+++ b/src/emu/machine/cdp1871.h
@@ -67,61 +67,39 @@
struct cdp1871_interface
{
- devcb_read8 in_d1_func;
- devcb_read8 in_d2_func;
- devcb_read8 in_d3_func;
- devcb_read8 in_d4_func;
- devcb_read8 in_d5_func;
- devcb_read8 in_d6_func;
- devcb_read8 in_d7_func;
- devcb_read8 in_d8_func;
- devcb_read8 in_d9_func;
- devcb_read8 in_d10_func;
- devcb_read8 in_d11_func;
-
- devcb_read_line in_shift_func;
- devcb_read_line in_control_func;
- devcb_read_line in_alpha_func;
+ devcb_read8 in_d1_cb;
+ devcb_read8 in_d2_cb;
+ devcb_read8 in_d3_cb;
+ devcb_read8 in_d4_cb;
+ devcb_read8 in_d5_cb;
+ devcb_read8 in_d6_cb;
+ devcb_read8 in_d7_cb;
+ devcb_read8 in_d8_cb;
+ devcb_read8 in_d9_cb;
+ devcb_read8 in_d10_cb;
+ devcb_read8 in_d11_cb;
+
+ devcb_read_line in_shift_cb;
+ devcb_read_line in_control_cb;
+ devcb_read_line in_alpha_cb;
// this gets called for every change of the DA pin (pin 33)
- devcb_write_line out_da_func;
+ devcb_write_line out_da_cb;
// this gets called for every change of the RPT pin (pin 35)
- devcb_write_line out_rpt_func;
-};
-
-
-// ======================> cdp1871_device_config
-
-class cdp1871_device_config : public device_config,
- public cdp1871_interface
-{
- friend class cdp1871_device;
-
- // construction/destruction
- cdp1871_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line out_rpt_cb;
};
// ======================> cdp1871_device
-class cdp1871_device : public device_t
+class cdp1871_device : public device_t,
+ public cdp1871_interface
{
- friend class cdp1871_device_config;
-
+public:
// construction/destruction
- cdp1871_device(running_machine &_machine, const cdp1871_device_config &_config);
+ cdp1871_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( data_r );
DECLARE_READ_LINE_MEMBER( da_r );
@@ -129,6 +107,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -158,8 +137,6 @@ private:
// timers
emu_timer *m_scan_timer; // keyboard scan timer
-
- const cdp1871_device_config &m_config;
};
diff --git a/src/emu/machine/com8116.c b/src/emu/machine/com8116.c
index 228dde9cf19..b4ab56e8ee7 100644
--- a/src/emu/machine/com8116.c
+++ b/src/emu/machine/com8116.c
@@ -22,19 +22,20 @@
//**************************************************************************
-// GLOBAL VARIABLES
+// LIVE DEVICE
//**************************************************************************
-// devices
-const device_type COM8116 = com8116_device_config::static_alloc_device_config;
-
-
+// device type definition
+const device_type COM8116 = &device_creator<com8116_device>;
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
+//-------------------------------------------------
+// com8116_device - constructor
+//-------------------------------------------------
-GENERIC_DEVICE_CONFIG_SETUP(com8116, "COM8116")
+com8116_device::com8116_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, COM8116, "COM8116", tag, owner, clock)
+{
+}
//-------------------------------------------------
@@ -43,7 +44,7 @@ GENERIC_DEVICE_CONFIG_SETUP(com8116, "COM8116")
// complete
//-------------------------------------------------
-void com8116_device_config::device_config_complete()
+void com8116_device::device_config_complete()
{
// inherit a copy of the static data
const com8116_interface *intf = reinterpret_cast<const com8116_interface *>(static_config());
@@ -53,29 +54,13 @@ void com8116_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_out_fx4_func, 0, sizeof(m_out_fx4_func));
- memset(&m_out_fr_func, 0, sizeof(m_out_fr_func));
- memset(&m_out_ft_func, 0, sizeof(m_out_ft_func));
+ memset(&m_out_fx4_cb, 0, sizeof(m_out_fx4_cb));
+ memset(&m_out_fr_cb, 0, sizeof(m_out_fr_cb));
+ memset(&m_out_ft_cb, 0, sizeof(m_out_ft_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// com8116_device - constructor
-//-------------------------------------------------
-
-com8116_device::com8116_device(running_machine &_machine, const com8116_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -83,9 +68,9 @@ com8116_device::com8116_device(running_machine &_machine, const com8116_device_c
void com8116_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_fx4_func, &m_config.m_out_fx4_func, this);
- devcb_resolve_write_line(&m_out_fr_func, &m_config.m_out_fr_func, this);
- devcb_resolve_write_line(&m_out_ft_func, &m_config.m_out_ft_func, this);
+ devcb_resolve_write_line(&m_out_fx4_func, &m_out_fx4_cb, this);
+ devcb_resolve_write_line(&m_out_fr_func, &m_out_fr_cb, this);
+ devcb_resolve_write_line(&m_out_ft_func, &m_out_ft_cb, this);
// allocate timers
m_fx4_timer = timer_alloc(TIMER_FX4);
@@ -132,7 +117,7 @@ WRITE8_MEMBER( com8116_device::str_w )
m_fr = data & 0x0f;
- m_fr_timer->adjust(attotime::zero, 0, attotime::from_hz(clock() / m_config.m_fr_divisors[m_fr] / 2));
+ m_fr_timer->adjust(attotime::zero, 0, attotime::from_hz(clock() / m_fr_divisors[m_fr] / 2));
}
@@ -146,5 +131,5 @@ WRITE8_MEMBER( com8116_device::stt_w )
m_ft = data & 0x0f;
- m_ft_timer->adjust(attotime::zero, 0, attotime::from_hz(clock() / m_config.m_ft_divisors[m_ft] / 2));
+ m_ft_timer->adjust(attotime::zero, 0, attotime::from_hz(clock() / m_ft_divisors[m_ft] / 2));
}
diff --git a/src/emu/machine/com8116.h b/src/emu/machine/com8116.h
index 754bd98e931..41137a5e95a 100644
--- a/src/emu/machine/com8116.h
+++ b/src/emu/machine/com8116.h
@@ -51,9 +51,9 @@
struct com8116_interface
{
- devcb_write_line m_out_fx4_func;
- devcb_write_line m_out_fr_func;
- devcb_write_line m_out_ft_func;
+ devcb_write_line m_out_fx4_cb;
+ devcb_write_line m_out_fr_cb;
+ devcb_write_line m_out_ft_cb;
// receiver divisor ROM (19-bit)
UINT32 m_fr_divisors[16];
@@ -63,43 +63,21 @@ struct com8116_interface
};
-// ======================> com8116_device_config
-
-class com8116_device_config : public device_config,
- public com8116_interface
-{
- friend class com8116_device;
-
- // construction/destruction
- com8116_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
-
// ======================> com8116_device
-class com8116_device : public device_t
+class com8116_device : public device_t,
+ public com8116_interface
{
- friend class com8116_device_config;
-
+public:
// construction/destruction
- com8116_device(running_machine &_machine, const com8116_device_config &_config);
+ com8116_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_WRITE8_MEMBER( str_w );
DECLARE_WRITE8_MEMBER( stt_w );
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int m_param, void *ptr);
@@ -119,8 +97,6 @@ private:
emu_timer *m_fx4_timer;
emu_timer *m_fr_timer;
emu_timer *m_ft_timer;
-
- const com8116_device_config &m_config;
};
diff --git a/src/emu/machine/devhelpr.h b/src/emu/machine/devhelpr.h
index 97ee11a08d4..2593ba39b9a 100644
--- a/src/emu/machine/devhelpr.h
+++ b/src/emu/machine/devhelpr.h
@@ -38,35 +38,4 @@
{ return downcast<devname##_device *>(device)->funcname(state); } \
void devname##_device::funcname(UINT8 state)
-#define GENERIC_DEVICE_CONFIG_SETUP(devname, devtag) \
- devname##_device_config::devname##_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock) \
- : device_config(mconfig, static_alloc_device_config, devtag, tag, owner, clock) \
- { } \
- \
- device_config *devname##_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock) \
- { return global_alloc(devname##_device_config(mconfig, tag, owner, clock)); } \
- \
- device_t *devname##_device_config::alloc_device(running_machine &machine) const \
- { return auto_alloc(machine, devname##_device(machine, *this)); }
-
-#define GENERIC_DEVICE_DERIVED_CONFIG(basename, devname) \
- class devname##_device_config : public basename##_device_config \
- { \
- friend class devname##_device; \
- devname##_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock); \
- public: \
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock); \
- virtual device_t *alloc_device(running_machine &machine) const; \
- }; \
- \
- class devname##_device : public basename##_device \
- { \
- friend class basename##_device; \
- friend class devname##_device_config; \
- devname##_device(running_machine &_machine, const devname##_device_config &config); \
- protected: \
- virtual void device_start(); \
- virtual void device_reset(); \
- };
-
#endif // __DEVHELPR_H__
diff --git a/src/emu/machine/ds1302.c b/src/emu/machine/ds1302.c
index 55f4728cdf0..1f6bd0c4d91 100644
--- a/src/emu/machine/ds1302.c
+++ b/src/emu/machine/ds1302.c
@@ -40,53 +40,18 @@ INLINE UINT8 convert_to_bcd(int val)
***************************************************************************/
//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// ds1302_device_config - constructor
-//-------------------------------------------------
-
-ds1302_device_config::ds1302_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Dallas DS1302 RTC", tag, owner, clock)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *ds1302_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(ds1302_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *ds1302_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, ds1302_device(machine, *this));
-}
-
-
-//**************************************************************************
// LIVE DEVICE
//**************************************************************************
-const device_type DS1302 = ds1302_device_config::static_alloc_device_config;
+// device type definition
+const device_type DS1302 = &device_creator<ds1302_device>;
//-------------------------------------------------
// ds1302_device - constructor
//-------------------------------------------------
-ds1302_device::ds1302_device(running_machine &_machine, const ds1302_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+ds1302_device::ds1302_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, DS1302, "Dallas DS1302 RTC", tag, owner, clock)
{
}
diff --git a/src/emu/machine/ds1302.h b/src/emu/machine/ds1302.h
index 7b97d58be65..30f53c1aa52 100644
--- a/src/emu/machine/ds1302.h
+++ b/src/emu/machine/ds1302.h
@@ -28,33 +28,13 @@
***************************************************************************/
-// ======================> ds1302_device_config
-
-class ds1302_device_config : public device_config
-{
- friend class ds1302_device;
-
- // construction/destruction
- ds1302_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-};
-
-
-
// ======================> ds1302_device
class ds1302_device : public device_t
{
- friend class ds1302_device_config;
-
- // construction/destruction
- ds1302_device(running_machine &_machine, const ds1302_device_config &_config);
-
public:
+ // construction/destruction
+ ds1302_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
void ds1302_dat_w(UINT32 offset, UINT8 data);
void ds1302_clk_w(UINT32 offset, UINT8 data);
@@ -75,8 +55,6 @@ private:
UINT8 m_last_clk;
UINT8 m_last_cmd;
UINT8 m_sram[0x20];
-
- const ds1302_device_config &m_config;
};
diff --git a/src/emu/machine/ds2401.c b/src/emu/machine/ds2401.c
index c3bee02b0e0..f0e9e5ce33c 100644
--- a/src/emu/machine/ds2401.c
+++ b/src/emu/machine/ds2401.c
@@ -20,30 +20,15 @@ inline void ATTR_PRINTF(3,4) ds2401_device::verboselog(int n_level, const char *
va_start(v, s_fmt);
vsprintf(buf, s_fmt, v);
va_end(v);
- logerror("ds2401 %s %s: %s", config.tag(), machine().describe_context(), buf);
+ logerror("ds2401 %s %s: %s", tag(), machine().describe_context(), buf);
}
}
-const device_type DS2401 = ds2401_device_config::static_alloc_device_config;
+// device type definition
+const device_type DS2401 = &device_creator<ds2401_device>;
-ds2401_device_config::ds2401_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "DS2401", tag, owner, clock)
-{
-}
-
-device_config *ds2401_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(ds2401_device_config(mconfig, tag, owner, clock));
-}
-
-device_t *ds2401_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, ds2401_device(machine, *this));
-}
-
-ds2401_device::ds2401_device(running_machine &_machine, const ds2401_device_config &_config)
- : device_t(_machine, _config),
- config(_config)
+ds2401_device::ds2401_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, DS2401, "DS2401", tag, owner, clock)
{
}
@@ -80,7 +65,7 @@ void ds2401_device::device_reset()
// Ensure the size is correct though
if(m_region->bytes() != SIZE_DATA)
logerror("ds2401 %s: Wrong region length for id data, expected 0x%x, got 0x%x\n",
- config.tag(),
+ tag(),
SIZE_DATA,
m_region->bytes());
else {
@@ -92,7 +77,7 @@ void ds2401_device::device_reset()
// That chip is useless without an id, so bitch if there
// isn't one
- logerror("ds2401 %s: Warning, no id provided, answer will be all zeroes.\n", config.tag());
+ logerror("ds2401 %s: Warning, no id provided, answer will be all zeroes.\n", tag());
memset(data, 0, SIZE_DATA);
}
diff --git a/src/emu/machine/ds2401.h b/src/emu/machine/ds2401.h
index e1b79962d03..353735899f7 100644
--- a/src/emu/machine/ds2401.h
+++ b/src/emu/machine/ds2401.h
@@ -14,27 +14,12 @@
#include "emu.h"
-class ds2401_device_config : public device_config
-{
- friend class ds2401_device;
-
- // construction/destruction
- ds2401_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-};
-
class ds2401_device : public device_t
{
- friend class ds2401_device_config;
-
+public:
// construction/destruction
- ds2401_device(running_machine &_machine, const ds2401_device_config &config);
+ ds2401_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
void write(bool line);
bool read();
UINT8 direct_read(int index);
@@ -66,8 +51,6 @@ protected:
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
// internal state
- const ds2401_device_config &config;
-
int state, bit, shift;
UINT8 byte;
bool rx, tx;
diff --git a/src/emu/machine/ds2404.c b/src/emu/machine/ds2404.c
index 4c4c43fedc2..8ce9c29c900 100644
--- a/src/emu/machine/ds2404.c
+++ b/src/emu/machine/ds2404.c
@@ -11,43 +11,22 @@
#include <time.h>
#include "devhelpr.h"
-/***************************************************************************
- IMPLEMENTATION
-***************************************************************************/
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// ds2404_device_config - constructor
-//-------------------------------------------------
-
-ds2404_device_config::ds2404_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "DS2404", tag, owner, clock),
- device_config_nvram_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *ds2404_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(ds2404_device_config(mconfig, tag, owner, clock));
-}
-
+// device type definition
+const device_type DS2404 = &device_creator<ds2404_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// ds2404_device - constructor
//-------------------------------------------------
-device_t *ds2404_device_config::alloc_device(running_machine &machine) const
+ds2404_device::ds2404_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, DS2404, "DS2404", tag, owner, clock),
+ device_nvram_interface(mconfig, *this)
{
- return auto_alloc(machine, ds2404_device(machine, *this));
}
@@ -56,10 +35,10 @@ device_t *ds2404_device_config::alloc_device(running_machine &machine) const
// to set the reference year
//-------------------------------------------------
-void ds2404_device_config::static_set_ref_year(device_config *device, UINT32 year)
+void ds2404_device::static_set_ref_year(device_t &device, UINT32 year)
{
- ds2404_device_config *ds2404 = downcast<ds2404_device_config *>(device);
- ds2404->m_ref_year = year;
+ ds2404_device &ds2404 = downcast<ds2404_device &>(device);
+ ds2404.m_ref_year = year;
}
@@ -68,10 +47,10 @@ void ds2404_device_config::static_set_ref_year(device_config *device, UINT32 yea
// to set the reference month
//-------------------------------------------------
-void ds2404_device_config::static_set_ref_month(device_config *device, UINT8 month)
+void ds2404_device::static_set_ref_month(device_t &device, UINT8 month)
{
- ds2404_device_config *ds2404 = downcast<ds2404_device_config *>(device);
- ds2404->m_ref_month = month;
+ ds2404_device &ds2404 = downcast<ds2404_device &>(device);
+ ds2404.m_ref_month = month;
}
@@ -80,30 +59,13 @@ void ds2404_device_config::static_set_ref_month(device_config *device, UINT8 mon
// to set the reference day
//-------------------------------------------------
-void ds2404_device_config::static_set_ref_day(device_config *device, UINT8 day)
+void ds2404_device::static_set_ref_day(device_t &device, UINT8 day)
{
- ds2404_device_config *ds2404 = downcast<ds2404_device_config *>(device);
- ds2404->m_ref_day = day;
+ ds2404_device &ds2404 = downcast<ds2404_device &>(device);
+ ds2404.m_ref_day = day;
}
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type DS2404 = ds2404_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// ds2404_device - constructor
-//-------------------------------------------------
-
-ds2404_device::ds2404_device(running_machine &_machine, const ds2404_device_config &config)
- : device_t(_machine, config),
- device_nvram_interface(_machine, config, *this),
- m_config(config)
-{
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -113,9 +75,9 @@ void ds2404_device::device_start()
struct tm ref_tm;
memset(&ref_tm, 0, sizeof(ref_tm));
- ref_tm.tm_year = m_config.m_ref_year - 1900;
- ref_tm.tm_mon = m_config.m_ref_month - 1;
- ref_tm.tm_mday = m_config.m_ref_day;
+ ref_tm.tm_year = m_ref_year - 1900;
+ ref_tm.tm_mon = m_ref_month - 1;
+ ref_tm.tm_mday = m_ref_day;
time_t ref_time = mktime(&ref_tm);
diff --git a/src/emu/machine/ds2404.h b/src/emu/machine/ds2404.h
index 60f508e6dcd..8f28e2164c4 100644
--- a/src/emu/machine/ds2404.h
+++ b/src/emu/machine/ds2404.h
@@ -24,62 +24,33 @@
MCFG_DS2404_REF_DAY(_ref_day)
#define MCFG_DS2404_REF_YEAR(_ref_year) \
- ds2404_device_config::static_set_ref_year(device, _ref_year);
+ ds2404_device::static_set_ref_year(*device, _ref_year);
#define MCFG_DS2404_REF_MONTH(_ref_month) \
- ds2404_device_config::static_set_ref_month(device, _ref_month);
+ ds2404_device::static_set_ref_month(*device, _ref_month);
#define MCFG_DS2404_REF_DAY(_ref_day) \
- ds2404_device_config::static_set_ref_day(device, _ref_day);
+ ds2404_device::static_set_ref_day(*device, _ref_day);
-/***************************************************************************
- TYPE DEFINITIONS
-***************************************************************************/
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
-// ======================> ds2404_device_config
-
-class ds2404_device_config : public device_config,
- public device_config_nvram_interface
-{
- friend class ds2404_device;
-
- // construction/destruction
- ds2404_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
- // inline configuration helpers
- static void static_set_ref_year(device_config *device, UINT32 m_ref_year);
- static void static_set_ref_month(device_config *device, UINT8 m_ref_month);
- static void static_set_ref_day(device_config *device, UINT8 m_ref_day);
-
-protected:
- // internal state goes here
- UINT32 m_ref_year;
- UINT8 m_ref_month;
- UINT8 m_ref_day;
-};
-
-
// ======================> ds2404_device
class ds2404_device : public device_t,
public device_nvram_interface
{
- friend class ds2404_device_config;
-
+public:
// construction/destruction
- ds2404_device(running_machine &_machine, const ds2404_device_config &_config);
+ ds2404_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
+ // inline configuration helpers
+ static void static_set_ref_year(device_t &device, UINT32 m_ref_year);
+ static void static_set_ref_month(device_t &device, UINT8 m_ref_month);
+ static void static_set_ref_day(device_t &device, UINT8 m_ref_day);
/* 1-wire interface reset */
void ds2404_1w_reset_w(UINT32 offset, UINT8 data);
@@ -129,6 +100,11 @@ private:
DS2404_STATE_COPY_SCRATCHPAD /* Copy Scratchpad command active */
};
+ // configuration state
+ UINT32 m_ref_year;
+ UINT8 m_ref_month;
+ UINT8 m_ref_day;
+
UINT16 m_address;
UINT16 m_offset;
UINT16 m_end_offset;
@@ -139,8 +115,6 @@ private:
UINT8 m_rtc[5]; /* 40-bit RTC counter */
DS2404_STATE m_state[8];
int m_state_ptr;
-
- const ds2404_device_config &m_config;
};
diff --git a/src/emu/machine/e0516.c b/src/emu/machine/e0516.c
index a686d9cd959..dcfeab3b0ad 100644
--- a/src/emu/machine/e0516.c
+++ b/src/emu/machine/e0516.c
@@ -41,51 +41,6 @@ enum
};
-
-//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type E0516 = e0516_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// e0516_device_config - constructor
-//-------------------------------------------------
-
-e0516_device_config::e0516_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "E05-16", tag, owner, clock),
- device_config_rtc_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *e0516_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(e0516_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *e0516_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, e0516_device(machine, *this));
-}
-
-
//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -141,14 +96,16 @@ inline void e0516_device::advance_seconds()
// LIVE DEVICE
//**************************************************************************
+// device type definition
+const device_type E0516 = &device_creator<e0516_device>;
+
//-------------------------------------------------
// e0516_device - constructor
//-------------------------------------------------
-e0516_device::e0516_device(running_machine &_machine, const e0516_device_config &config)
- : device_t(_machine, config),
- device_rtc_interface(_machine, config, *this),
- m_config(config)
+e0516_device::e0516_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, E0516, "E05-16", tag, owner, clock),
+ device_rtc_interface(mconfig, *this)
{
}
diff --git a/src/emu/machine/e0516.h b/src/emu/machine/e0516.h
index 9ebce2e92ce..ea2c04da29b 100644
--- a/src/emu/machine/e0516.h
+++ b/src/emu/machine/e0516.h
@@ -41,36 +41,15 @@
//**************************************************************************
-// ======================> e0516_device_config
-
-class e0516_device_config : public device_config,
- public device_config_rtc_interface
-{
- friend class e0516_device;
-
- // construction/destruction
- e0516_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
-};
-
-
// ======================> e0516_device
class e0516_device : public device_t,
public device_rtc_interface
{
- friend class e0516_device_config;
-
+public:
// construction/destruction
- e0516_device(running_machine &_machine, const e0516_device_config &_config);
+ e0516_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_WRITE_LINE_MEMBER( cs_w );
DECLARE_WRITE_LINE_MEMBER( clk_w );
DECLARE_WRITE_LINE_MEMBER( dio_w );
@@ -102,8 +81,6 @@ private:
// timers
emu_timer *m_timer;
-
- const e0516_device_config &m_config;
};
diff --git a/src/emu/machine/eeprom.c b/src/emu/machine/eeprom.c
index 14cfbefa011..ee4b836db5c 100644
--- a/src/emu/machine/eeprom.c
+++ b/src/emu/machine/eeprom.c
@@ -24,7 +24,8 @@
// GLOBAL VARIABLES
//**************************************************************************
-const device_type EEPROM = eeprom_device_config::static_alloc_device_config;
+// device type definition
+const device_type EEPROM = &device_creator<eeprom_device>;
const eeprom_interface eeprom_interface_93C46 =
{
@@ -69,42 +70,31 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
-// eeprom_device_config - constructor
+// eeprom_device - constructor
//-------------------------------------------------
-eeprom_device_config::eeprom_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "EEPROM", tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this),
+eeprom_device::eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, EEPROM, "EEPROM", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
m_default_data_size(0),
- m_default_value(0)
+ m_default_value(0),
+ m_serial_count(0),
+ m_read_address(0),
+ m_clock_count(0),
+ m_latch(0),
+ m_reset_line(CLEAR_LINE),
+ m_clock_line(CLEAR_LINE),
+ m_sending(0),
+ m_locked(false),
+ m_reset_delay(0)
{
m_default_data.u8 = NULL;
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *eeprom_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(eeprom_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *eeprom_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, eeprom_device(machine, *this));
+ memset(downcast<eeprom_interface *>(this), 0, sizeof(eeprom_interface));
}
@@ -113,16 +103,16 @@ device_t *eeprom_device_config::alloc_device(running_machine &machine) const
// to set the interface
//-------------------------------------------------
-void eeprom_device_config::static_set_interface(device_config *device, const eeprom_interface &interface)
+void eeprom_device::static_set_interface(device_t &device, const eeprom_interface &interface)
{
- eeprom_device_config *eeprom = downcast<eeprom_device_config *>(device);
- *static_cast<eeprom_interface *>(eeprom) = interface;
+ eeprom_device &eeprom = downcast<eeprom_device &>(device);
+ static_cast<eeprom_interface &>(eeprom) = interface;
// describe our address space
- if (eeprom->m_data_bits == 8)
- eeprom->m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 8, eeprom->m_address_bits, 0, *ADDRESS_MAP_NAME(eeprom_map8));
+ if (eeprom.m_data_bits == 8)
+ eeprom.m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 8, eeprom.m_address_bits, 0, *ADDRESS_MAP_NAME(eeprom_map8));
else
- eeprom->m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 16, eeprom->m_address_bits * 2, 0, *ADDRESS_MAP_NAME(eeprom_map16));
+ eeprom.m_space_config = address_space_config("eeprom", ENDIANNESS_BIG, 16, eeprom.m_address_bits * 2, 0, *ADDRESS_MAP_NAME(eeprom_map16));
}
@@ -131,20 +121,20 @@ void eeprom_device_config::static_set_interface(device_config *device, const eep
// to set the default data
//-------------------------------------------------
-void eeprom_device_config::static_set_default_data(device_config *device, const UINT8 *data, UINT32 size)
+void eeprom_device::static_set_default_data(device_t &device, const UINT8 *data, UINT32 size)
{
- eeprom_device_config *eeprom = downcast<eeprom_device_config *>(device);
- assert(eeprom->m_data_bits == 8);
- eeprom->m_default_data.u8 = const_cast<UINT8 *>(data);
- eeprom->m_default_data_size = size;
+ eeprom_device &eeprom = downcast<eeprom_device &>(device);
+ assert(eeprom.m_data_bits == 8);
+ eeprom.m_default_data.u8 = const_cast<UINT8 *>(data);
+ eeprom.m_default_data_size = size;
}
-void eeprom_device_config::static_set_default_data(device_config *device, const UINT16 *data, UINT32 size)
+void eeprom_device::static_set_default_data(device_t &device, const UINT16 *data, UINT32 size)
{
- eeprom_device_config *eeprom = downcast<eeprom_device_config *>(device);
- assert(eeprom->m_data_bits == 16);
- eeprom->m_default_data.u16 = const_cast<UINT16 *>(data);
- eeprom->m_default_data_size = size / 2;
+ eeprom_device &eeprom = downcast<eeprom_device &>(device);
+ assert(eeprom.m_data_bits == 16);
+ eeprom.m_default_data.u16 = const_cast<UINT16 *>(data);
+ eeprom.m_default_data_size = size / 2;
}
@@ -153,9 +143,9 @@ void eeprom_device_config::static_set_default_data(device_config *device, const
// to set the default value
//-------------------------------------------------
-void eeprom_device_config::static_set_default_value(device_config *device, UINT16 value)
+void eeprom_device::static_set_default_value(device_t &device, UINT16 value)
{
- downcast<eeprom_device_config *>(device)->m_default_value = 0x10000 | value;
+ downcast<eeprom_device &>(device).m_default_value = 0x10000 | value;
}
@@ -164,7 +154,7 @@ void eeprom_device_config::static_set_default_value(device_config *device, UINT1
// on this device
//-------------------------------------------------
-bool eeprom_device_config::device_validity_check(emu_options &options, const game_driver &driver) const
+bool eeprom_device::device_validity_check(emu_options &options, const game_driver &driver) const
{
bool error = false;
@@ -179,50 +169,13 @@ bool eeprom_device_config::device_validity_check(emu_options &options, const gam
//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *eeprom_device_config::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : NULL;
-}
-
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// eeprom_device - constructor
-//-------------------------------------------------
-
-eeprom_device::eeprom_device(running_machine &_machine, const eeprom_device_config &config)
- : device_t(_machine, config),
- device_memory_interface(_machine, config, *this),
- device_nvram_interface(_machine, config, *this),
- m_config(config),
- m_serial_count(0),
- m_data_bits(0),
- m_read_address(0),
- m_clock_count(0),
- m_latch(0),
- m_reset_line(CLEAR_LINE),
- m_clock_line(CLEAR_LINE),
- m_sending(0),
- m_locked(m_config.m_cmd_unlock != NULL),
- m_reset_delay(0)
-{
-}
-
-
-//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void eeprom_device::device_start()
{
+ m_locked = (m_cmd_unlock != NULL);
+
save_pointer(NAME(m_serial_buffer), SERIAL_BUFFER_LENGTH);
save_item(NAME(m_clock_line));
save_item(NAME(m_reset_line));
@@ -246,45 +199,56 @@ void eeprom_device::device_reset()
//-------------------------------------------------
+// memory_space_config - return a description of
+// any address spaces owned by this device
+//-------------------------------------------------
+
+const address_space_config *eeprom_device::memory_space_config(address_spacenum spacenum) const
+{
+ return (spacenum == 0) ? &m_space_config : NULL;
+}
+
+
+//-------------------------------------------------
// nvram_default - called to initialize NVRAM to
// its default state
//-------------------------------------------------
void eeprom_device::nvram_default()
{
- UINT32 eeprom_length = 1 << m_config.m_address_bits;
- UINT32 eeprom_bytes = eeprom_length * m_config.m_data_bits / 8;
+ UINT32 eeprom_length = 1 << m_address_bits;
+ UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8;
/* initialize to the default value */
UINT16 default_value = 0xffff;
- if (m_config.m_default_value != 0)
- default_value = m_config.m_default_value;
+ if (m_default_value != 0)
+ default_value = m_default_value;
for (offs_t offs = 0; offs < eeprom_length; offs++)
- if (m_config.m_data_bits == 8)
+ if (m_data_bits == 8)
m_addrspace[0]->write_byte(offs, default_value);
else
m_addrspace[0]->write_word(offs * 2, default_value);
/* handle hard-coded data from the driver */
- if (m_config.m_default_data.u8 != NULL)
- for (offs_t offs = 0; offs < m_config.m_default_data_size; offs++)
- if (m_config.m_data_bits == 8)
- m_addrspace[0]->write_byte(offs, m_config.m_default_data.u8[offs]);
+ if (m_default_data.u8 != NULL)
+ for (offs_t offs = 0; offs < m_default_data_size; offs++)
+ if (m_data_bits == 8)
+ m_addrspace[0]->write_byte(offs, m_default_data.u8[offs]);
else
- m_addrspace[0]->write_word(offs * 2, m_config.m_default_data.u16[offs]);
+ m_addrspace[0]->write_word(offs * 2, m_default_data.u16[offs]);
/* populate from a memory region if present */
if (m_region != NULL)
{
if (m_region->bytes() != eeprom_bytes)
fatalerror("eeprom region '%s' wrong size (expected size = 0x%X)", tag(), eeprom_bytes);
- if (m_config.m_data_bits == 8 && m_region->width() != 1)
+ if (m_data_bits == 8 && m_region->width() != 1)
fatalerror("eeprom region '%s' needs to be an 8-bit region", tag());
- if (m_config.m_data_bits == 16 && (m_region->width() != 2 || m_region->endianness() != ENDIANNESS_BIG))
+ if (m_data_bits == 16 && (m_region->width() != 2 || m_region->endianness() != ENDIANNESS_BIG))
fatalerror("eeprom region '%s' needs to be a 16-bit big-endian region", tag());
for (offs_t offs = 0; offs < eeprom_length; offs++)
- if (m_config.m_data_bits == 8)
+ if (m_data_bits == 8)
m_addrspace[0]->write_byte(offs, m_region->u8(offs));
else
m_addrspace[0]->write_word(offs * 2, m_region->u16(offs));
@@ -299,8 +263,8 @@ void eeprom_device::nvram_default()
void eeprom_device::nvram_read(emu_file &file)
{
- UINT32 eeprom_length = 1 << m_config.m_address_bits;
- UINT32 eeprom_bytes = eeprom_length * m_config.m_data_bits / 8;
+ UINT32 eeprom_length = 1 << m_address_bits;
+ UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8;
UINT8 *buffer = auto_alloc_array(machine(), UINT8, eeprom_bytes);
file.read(buffer, eeprom_bytes);
@@ -317,8 +281,8 @@ void eeprom_device::nvram_read(emu_file &file)
void eeprom_device::nvram_write(emu_file &file)
{
- UINT32 eeprom_length = 1 << m_config.m_address_bits;
- UINT32 eeprom_bytes = eeprom_length * m_config.m_data_bits / 8;
+ UINT32 eeprom_length = 1 << m_address_bits;
+ UINT32 eeprom_bytes = eeprom_length * m_data_bits / 8;
UINT8 *buffer = auto_alloc_array(machine(), UINT8, eeprom_bytes);
for (offs_t offs = 0; offs < eeprom_bytes; offs++)
@@ -355,7 +319,7 @@ int eeprom_device::read_bit()
int res;
if (m_sending)
- res = (m_data_bits >> m_config.m_data_bits) & 1;
+ res = (m_data_bits >> m_data_bits) & 1;
else
{
if (m_reset_delay > 0)
@@ -392,7 +356,7 @@ void eeprom_device::set_cs_line(int state)
m_serial_count = 0;
m_sending = 0;
- m_reset_delay = m_config.m_reset_delay; /* delay a little before returning setting data to 1 (needed by wbeachvl) */
+ m_reset_delay = m_reset_delay; /* delay a little before returning setting data to 1 (needed by wbeachvl) */
}
}
@@ -412,10 +376,10 @@ void eeprom_device::set_clock_line(int state)
{
if (m_sending)
{
- if (m_clock_count == m_config.m_data_bits && m_config.m_enable_multi_read)
+ if (m_clock_count == m_data_bits && m_enable_multi_read)
{
- m_read_address = (m_read_address + 1) & ((1 << m_config.m_address_bits) - 1);
- if (m_config.m_data_bits == 16)
+ m_read_address = (m_read_address + 1) & ((1 << m_address_bits) - 1);
+ if (m_data_bits == 16)
m_data_bits = m_addrspace[0]->read_word(m_read_address * 2);
else
m_data_bits = m_addrspace[0]->read_byte(m_read_address);
@@ -452,18 +416,18 @@ void eeprom_device::write(int bit)
m_serial_buffer[m_serial_count++] = (bit ? '1' : '0');
m_serial_buffer[m_serial_count] = 0; /* nul terminate so we can treat it as a string */
- if ( (m_serial_count > m_config.m_address_bits) &&
- command_match((char*)(m_serial_buffer),m_config.m_cmd_read,strlen((char*)(m_serial_buffer))-m_config.m_address_bits) )
+ if ( (m_serial_count > m_address_bits) &&
+ command_match((char*)(m_serial_buffer),m_cmd_read,strlen((char*)(m_serial_buffer))-m_address_bits) )
{
int i,address;
address = 0;
- for (i = m_serial_count-m_config.m_address_bits;i < m_serial_count;i++)
+ for (i = m_serial_count-m_address_bits;i < m_serial_count;i++)
{
address <<= 1;
if (m_serial_buffer[i] == '1') address |= 1;
}
- if (m_config.m_data_bits == 16)
+ if (m_data_bits == 16)
m_data_bits = m_addrspace[0]->read_word(address * 2);
else
m_data_bits = m_addrspace[0]->read_byte(address);
@@ -473,13 +437,13 @@ void eeprom_device::write(int bit)
m_serial_count = 0;
logerror("EEPROM read %04x from address %02x\n",m_data_bits,address);
}
- else if ( (m_serial_count > m_config.m_address_bits) &&
- command_match((char*)(m_serial_buffer),m_config.m_cmd_erase,strlen((char*)(m_serial_buffer))-m_config.m_address_bits) )
+ else if ( (m_serial_count > m_address_bits) &&
+ command_match((char*)(m_serial_buffer),m_cmd_erase,strlen((char*)(m_serial_buffer))-m_address_bits) )
{
int i,address;
address = 0;
- for (i = m_serial_count-m_config.m_address_bits;i < m_serial_count;i++)
+ for (i = m_serial_count-m_address_bits;i < m_serial_count;i++)
{
address <<= 1;
if (m_serial_buffer[i] == '1') address |= 1;
@@ -487,7 +451,7 @@ logerror("EEPROM read %04x from address %02x\n",m_data_bits,address);
logerror("EEPROM erase address %02x\n",address);
if (m_locked == 0)
{
- if (m_config.m_data_bits == 16)
+ if (m_data_bits == 16)
m_addrspace[0]->write_word(address * 2, 0x0000);
else
m_addrspace[0]->write_byte(address, 0x00);
@@ -496,19 +460,19 @@ logerror("EEPROM erase address %02x\n",address);
logerror("Error: EEPROM is m_locked\n");
m_serial_count = 0;
}
- else if ( (m_serial_count > (m_config.m_address_bits + m_config.m_data_bits)) &&
- command_match((char*)(m_serial_buffer),m_config.m_cmd_write,strlen((char*)(m_serial_buffer))-(m_config.m_address_bits + m_config.m_data_bits)) )
+ else if ( (m_serial_count > (m_address_bits + m_data_bits)) &&
+ command_match((char*)(m_serial_buffer),m_cmd_write,strlen((char*)(m_serial_buffer))-(m_address_bits + m_data_bits)) )
{
int i,address,data;
address = 0;
- for (i = m_serial_count-m_config.m_data_bits-m_config.m_address_bits;i < (m_serial_count-m_config.m_data_bits);i++)
+ for (i = m_serial_count-m_data_bits-m_address_bits;i < (m_serial_count-m_data_bits);i++)
{
address <<= 1;
if (m_serial_buffer[i] == '1') address |= 1;
}
data = 0;
- for (i = m_serial_count-m_config.m_data_bits;i < m_serial_count;i++)
+ for (i = m_serial_count-m_data_bits;i < m_serial_count;i++)
{
data <<= 1;
if (m_serial_buffer[i] == '1') data |= 1;
@@ -516,7 +480,7 @@ logerror("Error: EEPROM is m_locked\n");
logerror("EEPROM write %04x to address %02x\n",data,address);
if (m_locked == 0)
{
- if (m_config.m_data_bits == 16)
+ if (m_data_bits == 16)
m_addrspace[0]->write_word(address * 2, data);
else
m_addrspace[0]->write_byte(address, data);
@@ -525,13 +489,13 @@ logerror("EEPROM write %04x to address %02x\n",data,address);
logerror("Error: EEPROM is m_locked\n");
m_serial_count = 0;
}
- else if ( command_match((char*)(m_serial_buffer),m_config.m_cmd_lock,strlen((char*)(m_serial_buffer))) )
+ else if ( command_match((char*)(m_serial_buffer),m_cmd_lock,strlen((char*)(m_serial_buffer))) )
{
logerror("EEPROM lock\n");
m_locked = 1;
m_serial_count = 0;
}
- else if ( command_match((char*)(m_serial_buffer),m_config.m_cmd_unlock,strlen((char*)(m_serial_buffer))) )
+ else if ( command_match((char*)(m_serial_buffer),m_cmd_unlock,strlen((char*)(m_serial_buffer))) )
{
logerror("EEPROM unlock\n");
m_locked = 0;
diff --git a/src/emu/machine/eeprom.h b/src/emu/machine/eeprom.h
index 3a59d3c3c46..b64aa5c28d9 100644
--- a/src/emu/machine/eeprom.h
+++ b/src/emu/machine/eeprom.h
@@ -19,7 +19,7 @@
#define MCFG_EEPROM_ADD(_tag, _interface) \
MCFG_DEVICE_ADD(_tag, EEPROM, 0) \
- eeprom_device_config::static_set_interface(device, _interface); \
+ eeprom_device::static_set_interface(*device, _interface); \
#define MCFG_EEPROM_93C46_ADD(_tag) \
MCFG_EEPROM_ADD(_tag, eeprom_interface_93C46)
@@ -28,10 +28,10 @@
MCFG_EEPROM_ADD(_tag, eeprom_interface_93C66B)
#define MCFG_EEPROM_DATA(_data, _size) \
- eeprom_device_config::static_set_default_data(device, _data, _size); \
+ eeprom_device::static_set_default_data(*device, _data, _size); \
#define MCFG_EEPROM_DEFAULT_VALUE(_value) \
- eeprom_device_config::static_set_default_value(device, _value); \
+ eeprom_device::static_set_default_value(*device, _value); \
@@ -58,58 +58,23 @@ struct eeprom_interface
-// ======================> eeprom_device_config
-
-class eeprom_device_config : public device_config,
- public device_config_memory_interface,
- public device_config_nvram_interface,
- public eeprom_interface
-{
- friend class eeprom_device;
-
- // construction/destruction
- eeprom_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
- // inline configuration helpers
- static void static_set_interface(device_config *deviec, const eeprom_interface &interface);
- static void static_set_default_data(device_config *device, const UINT8 *data, UINT32 size);
- static void static_set_default_data(device_config *device, const UINT16 *data, UINT32 size);
- static void static_set_default_value(device_config *device, UINT16 value);
-
-protected:
- // device_config overrides
- virtual bool device_validity_check(emu_options &options, const game_driver &driver) const;
-
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
-
- // device-specific configuration
- address_space_config m_space_config;
-
- // internal state
- generic_ptr m_default_data;
- int m_default_data_size;
- UINT32 m_default_value;
-};
-
-
// ======================> eeprom_device
class eeprom_device : public device_t,
public device_memory_interface,
- public device_nvram_interface
+ public device_nvram_interface,
+ public eeprom_interface
{
- friend class eeprom_device_config;
-
+public:
// construction/destruction
- eeprom_device(running_machine &_machine, const eeprom_device_config &config);
+ eeprom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // inline configuration helpers
+ static void static_set_interface(device_t &device, const eeprom_interface &interface);
+ static void static_set_default_data(device_t &device, const UINT8 *data, UINT32 size);
+ static void static_set_default_data(device_t &device, const UINT16 *data, UINT32 size);
+ static void static_set_default_value(device_t &device, UINT16 value);
-public:
// I/O operations
void write_bit(int state);
int read_bit();
@@ -118,9 +83,13 @@ public:
protected:
// device-level overrides
+ virtual bool device_validity_check(emu_options &options, const game_driver &driver) const;
virtual void device_start();
virtual void device_reset();
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
// device_nvram_interface overrides
virtual void nvram_default();
virtual void nvram_read(emu_file &file);
@@ -132,20 +101,23 @@ protected:
static const int SERIAL_BUFFER_LENGTH = 40;
- // internal state
- const eeprom_device_config &m_config;
-
- int m_serial_count;
- UINT8 m_serial_buffer[SERIAL_BUFFER_LENGTH];
- int m_data_bits;
- int m_read_address;
- int m_clock_count;
- int m_latch;
- int m_reset_line;
- int m_clock_line;
- int m_sending;
- int m_locked;
- int m_reset_delay;
+ // configuration state
+ address_space_config m_space_config;
+ generic_ptr m_default_data;
+ int m_default_data_size;
+ UINT32 m_default_value;
+
+ // runtime state
+ int m_serial_count;
+ UINT8 m_serial_buffer[SERIAL_BUFFER_LENGTH];
+ int m_read_address;
+ int m_clock_count;
+ int m_latch;
+ int m_reset_line;
+ int m_clock_line;
+ int m_sending;
+ int m_locked;
+ int m_reset_delay;
};
@@ -154,7 +126,6 @@ extern const device_type EEPROM;
-
//**************************************************************************
// GLOBAL VARIABLES
//**************************************************************************
diff --git a/src/emu/machine/er2055.c b/src/emu/machine/er2055.c
index ddf735fe3a0..a4e336e83ab 100644
--- a/src/emu/machine/er2055.c
+++ b/src/emu/machine/er2055.c
@@ -45,7 +45,8 @@
// GLOBAL VARIABLES
//**************************************************************************
-const device_type ER2055 = er2055_device_config::static_alloc_device_config;
+// device type definition
+const device_type ER2055 = &device_creator<er2055_device>;
static ADDRESS_MAP_START( er2055_map, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x003f) AM_RAM
@@ -54,56 +55,6 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// er2055_device_config - constructor
-//-------------------------------------------------
-
-er2055_device_config::er2055_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "ER2055", tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this),
- m_space_config("EAROM", ENDIANNESS_BIG, 8, 6, 0, *ADDRESS_MAP_NAME(er2055_map))
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *er2055_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(er2055_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *er2055_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, er2055_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *er2055_device_config::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : NULL;
-}
-
-
-
-//**************************************************************************
// LIVE DEVICE
//**************************************************************************
@@ -111,11 +62,11 @@ const address_space_config *er2055_device_config::memory_space_config(address_sp
// er2055_device - constructor
//-------------------------------------------------
-er2055_device::er2055_device(running_machine &_machine, const er2055_device_config &config)
- : device_t(_machine, config),
- device_memory_interface(_machine, config, *this),
- device_nvram_interface(_machine, config, *this),
- m_config(config),
+er2055_device::er2055_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, ER2055, "ER2055", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
+ m_space_config("EAROM", ENDIANNESS_BIG, 8, 6, 0, *ADDRESS_MAP_NAME(er2055_map)),
m_control_state(0),
m_address(0),
m_data(0)
@@ -138,6 +89,17 @@ void er2055_device::device_start()
//-------------------------------------------------
+// memory_space_config - return a description of
+// any address spaces owned by this device
+//-------------------------------------------------
+
+const address_space_config *er2055_device::memory_space_config(address_spacenum spacenum) const
+{
+ return (spacenum == 0) ? &m_space_config : NULL;
+}
+
+
+//-------------------------------------------------
// nvram_default - called to initialize NVRAM to
// its default state
//-------------------------------------------------
diff --git a/src/emu/machine/er2055.h b/src/emu/machine/er2055.h
index 833b43918e4..f47b503d57c 100644
--- a/src/emu/machine/er2055.h
+++ b/src/emu/machine/er2055.h
@@ -58,43 +58,16 @@
//**************************************************************************
-// ======================> er2055_device_config
-
-class er2055_device_config : public device_config,
- public device_config_memory_interface,
- public device_config_nvram_interface
-{
- friend class er2055_device;
-
- // construction/destruction
- er2055_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
-
- // device-specific configuration
- address_space_config m_space_config;
-};
-
-
// ======================> er2055_device
class er2055_device : public device_t,
public device_memory_interface,
public device_nvram_interface
{
- friend class er2055_device_config;
-
+public:
// construction/destruction
- er2055_device(running_machine &_machine, const er2055_device_config &config);
+ er2055_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
// I/O operations
UINT8 data() const { return m_data; }
void set_address(UINT8 address) { m_address = address & 0x3f; }
@@ -107,6 +80,9 @@ protected:
// device-level overrides
virtual void device_start();
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
// device_nvram_interface overrides
virtual void nvram_default();
virtual void nvram_read(emu_file &file);
@@ -120,9 +96,10 @@ protected:
static const UINT8 CS1 = 0x08;
static const UINT8 CS2 = 0x10;
- // internal state
- const er2055_device_config &m_config;
+ // configuration state
+ address_space_config m_space_config;
+ // internal state
UINT8 m_control_state;
UINT8 m_address;
UINT8 m_data;
diff --git a/src/emu/machine/f3853.c b/src/emu/machine/f3853.c
index 19ff8f563ea..993028d4595 100644
--- a/src/emu/machine/f3853.c
+++ b/src/emu/machine/f3853.c
@@ -38,37 +38,20 @@
***************************************************************************/
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// f3853_device_config - constructor
-//-------------------------------------------------
-
-f3853_device_config::f3853_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "F3853", tag, owner, clock)
-{
-}
-
+// device type definition
+const device_type F3853 = &device_creator<f3853_device>;
//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
+// f3853_device - constructor
//-------------------------------------------------
-device_config *f3853_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
+f3853_device::f3853_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, F3853, "F3853", tag, owner, clock)
{
- return global_alloc(f3853_device_config(mconfig, tag, owner, clock));
-}
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *f3853_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, f3853_device(machine, *this));
}
@@ -78,7 +61,7 @@ device_t *f3853_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void f3853_device_config::device_config_complete()
+void f3853_device::device_config_complete()
{
// inherit a copy of the static data
const f3853_interface *intf = reinterpret_cast<const f3853_interface *>(static_config());
@@ -95,24 +78,6 @@ void f3853_device_config::device_config_complete()
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type F3853 = f3853_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// f3853_device - constructor
-//-------------------------------------------------
-
-f3853_device::f3853_device(running_machine &_machine, const f3853_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -166,22 +131,22 @@ void f3853_device::device_reset()
void f3853_device::f3853_set_interrupt_request_line()
{
- if(!m_config.m_interrupt_request)
+ if(!m_interrupt_request)
{
return;
}
if(m_external_enable && !m_priority_line)
{
- m_config.m_interrupt_request(this, INTERRUPT_VECTOR(TRUE), TRUE);
+ m_interrupt_request(this, INTERRUPT_VECTOR(TRUE), TRUE);
}
else if( m_timer_enable && !m_priority_line && m_request_flipflop)
{
- m_config.m_interrupt_request(this, INTERRUPT_VECTOR(FALSE), TRUE);
+ m_interrupt_request(this, INTERRUPT_VECTOR(FALSE), TRUE);
}
else
{
- m_config.m_interrupt_request(this, 0, FALSE);
+ m_interrupt_request(this, 0, FALSE);
}
}
diff --git a/src/emu/machine/f3853.h b/src/emu/machine/f3853.h
index cc0cb3b427e..9ee50c68c13 100644
--- a/src/emu/machine/f3853.h
+++ b/src/emu/machine/f3853.h
@@ -64,37 +64,14 @@ struct f3853_interface
};
-// ======================> f3853_device_config
-
-class f3853_device_config : public device_config,
- public f3853_interface
-{
- friend class f3853_device;
-
- // construction/destruction
- f3853_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
// ======================> f3853_device
-class f3853_device : public device_t
+class f3853_device : public device_t,
+ public f3853_interface
{
- friend class f3853_device_config;
-
- // construction/destruction
- f3853_device(running_machine &_machine, const f3853_device_config &_config);
-
public:
+ // construction/destruction
+ f3853_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
UINT8 f3853_r(UINT32 offset);
void f3853_w(UINT32 offset, UINT8 data);
@@ -104,6 +81,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -130,8 +108,6 @@ private:
emu_timer *m_timer;
UINT8 m_value_to_cycle[0x100];
-
- const f3853_device_config &m_config;
};
diff --git a/src/emu/machine/generic.c b/src/emu/machine/generic.c
index ddf9cc9a098..2dddd85a17a 100644
--- a/src/emu/machine/generic.c
+++ b/src/emu/machine/generic.c
@@ -96,7 +96,7 @@ void generic_machine_init(running_machine &machine)
memset(state->interrupt_device, 0, sizeof(state->interrupt_device));
device_execute_interface *exec = NULL;
int index = 0;
- for (bool gotone = machine.m_devicelist.first(exec); gotone && index < ARRAY_LENGTH(state->interrupt_device); gotone = exec->next(exec))
+ for (bool gotone = machine.devicelist().first(exec); gotone && index < ARRAY_LENGTH(state->interrupt_device); gotone = exec->next(exec))
state->interrupt_device[index++] = &exec->device();
/* register coin save state */
@@ -319,7 +319,7 @@ void nvram_load(running_machine &machine)
{
// only need to do something if we have an NVRAM device or an nvram_handler
device_nvram_interface *nvram = NULL;
- if (!machine.m_devicelist.first(nvram) && machine.config().m_nvram_handler == NULL)
+ if (!machine.devicelist().first(nvram) && machine.config().m_nvram_handler == NULL)
return;
// open the file; if it exists, call everyone to read from it
@@ -357,7 +357,7 @@ void nvram_save(running_machine &machine)
{
// only need to do something if we have an NVRAM device or an nvram_handler
device_nvram_interface *nvram = NULL;
- if (!machine.m_devicelist.first(nvram) && machine.config().m_nvram_handler == NULL)
+ if (!machine.devicelist().first(nvram) && machine.config().m_nvram_handler == NULL)
return;
// open the file; if it exists, call everyone to read from it
diff --git a/src/emu/machine/i2cmem.c b/src/emu/machine/i2cmem.c
index d6577137cbe..0aaacf24026 100644
--- a/src/emu/machine/i2cmem.c
+++ b/src/emu/machine/i2cmem.c
@@ -55,7 +55,8 @@ INLINE void ATTR_PRINTF( 3, 4 ) verboselog( device_t *device, int n_level, const
// GLOBAL VARIABLES
//**************************************************************************
-const device_type I2CMEM = i2cmem_device_config::static_alloc_device_config;
+// device type definition
+const device_type I2CMEM = &device_creator<i2cmem_device>;
static ADDRESS_MAP_START( i2cmem_map8, AS_PROGRAM, 8 )
AM_RANGE(0x0000, 0x0fff) AM_RAM
@@ -64,17 +65,25 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
-// i2cmem_device_config - constructor
+// i2cmem_device - constructor
//-------------------------------------------------
-i2cmem_device_config::i2cmem_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock )
- : device_config(mconfig, static_alloc_device_config, "I2CMEM", tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this)
+i2cmem_device::i2cmem_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock )
+ : device_t(mconfig, I2CMEM, "I2CMEM", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
+ m_scl( 0 ),
+ m_sdaw( 0 ),
+ m_e0( 0 ),
+ m_e1( 0 ),
+ m_e2( 0 ),
+ m_wc( 0 ),
+ m_sdar( 1 ),
+ m_state( STATE_IDLE )
{
m_address_bits = 0;
@@ -87,38 +96,15 @@ i2cmem_device_config::i2cmem_device_config( const machine_config &mconfig, const
}
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *i2cmem_device_config::static_alloc_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock )
-{
- return global_alloc( i2cmem_device_config( mconfig, tag, owner, clock ) );
-}
-
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *i2cmem_device_config::alloc_device( running_machine &machine ) const
-{
- return auto_alloc( machine, i2cmem_device( machine, *this ) );
-}
-
-
//-------------------------------------------------
// static_set_interface - set the device
// configuration
//-------------------------------------------------
-void i2cmem_device_config::static_set_interface(device_config *device, const i2cmem_interface &interface)
+void i2cmem_device::static_set_interface(device_t &device, const i2cmem_interface &interface)
{
- i2cmem_device_config *i2cmem = downcast<i2cmem_device_config *>(device);
- *static_cast<i2cmem_interface *>(i2cmem) = interface;
+ i2cmem_device &i2cmem = downcast<i2cmem_device &>(device);
+ static_cast<i2cmem_interface &>(i2cmem) = interface;
}
@@ -128,7 +114,7 @@ void i2cmem_device_config::static_set_interface(device_config *device, const i2c
// complete
//-------------------------------------------------
-void i2cmem_device_config::device_config_complete()
+void i2cmem_device::device_config_complete()
{
m_space_config = address_space_config( "i2cmem", ENDIANNESS_BIG, 8, m_address_bits, 0, *ADDRESS_MAP_NAME( i2cmem_map8 ) );
}
@@ -139,7 +125,7 @@ void i2cmem_device_config::device_config_complete()
// on this device
//-------------------------------------------------
-bool i2cmem_device_config::device_validity_check( emu_options &options, const game_driver &driver ) const
+bool i2cmem_device::device_validity_check( emu_options &options, const game_driver &driver ) const
{
bool error = false;
return error;
@@ -147,52 +133,16 @@ bool i2cmem_device_config::device_validity_check( emu_options &options, const ga
//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *i2cmem_device_config::memory_space_config( address_spacenum spacenum ) const
-{
- return ( spacenum == 0 ) ? &m_space_config : NULL;
-}
-
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// i2cmem_device - constructor
+// device_start - device-specific startup
//-------------------------------------------------
-i2cmem_device::i2cmem_device( running_machine &_machine, const i2cmem_device_config &config ) :
- device_t( _machine, config ),
- device_memory_interface( _machine, config, *this ),
- device_nvram_interface( _machine, config, *this ),
- m_config( config ),
- m_scl( 0 ),
- m_sdaw( 0 ),
- m_e0( 0 ),
- m_e1( 0 ),
- m_e2( 0 ),
- m_wc( 0 ),
- m_sdar( 1 ),
- m_state( STATE_IDLE )
+void i2cmem_device::device_start()
{
- if( m_config.m_page_size > 0 )
+ if( m_page_size > 0 )
{
- m_page = auto_alloc_array( machine(), UINT8, m_config.m_page_size );
+ m_page = auto_alloc_array( machine(), UINT8, m_page_size );
}
-}
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void i2cmem_device::device_start()
-{
save_item( NAME(m_scl) );
save_item( NAME(m_sdaw) );
save_item( NAME(m_e0) );
@@ -205,7 +155,7 @@ void i2cmem_device::device_start()
save_item( NAME(m_shift) );
save_item( NAME(m_devsel) );
save_item( NAME(m_byteaddr) );
- save_pointer( NAME(m_page), m_config.m_page_size );
+ save_pointer( NAME(m_page), m_page_size );
}
@@ -219,13 +169,24 @@ void i2cmem_device::device_reset()
//-------------------------------------------------
+// memory_space_config - return a description of
+// any address spaces owned by this device
+//-------------------------------------------------
+
+const address_space_config *i2cmem_device::memory_space_config( address_spacenum spacenum ) const
+{
+ return ( spacenum == 0 ) ? &m_space_config : NULL;
+}
+
+
+//-------------------------------------------------
// nvram_default - called to initialize NVRAM to
// its default state
//-------------------------------------------------
void i2cmem_device::nvram_default()
{
- int i2cmem_bytes = m_config.m_data_size;
+ int i2cmem_bytes = m_data_size;
UINT16 default_value = 0xff;
for( offs_t offs = 0; offs < i2cmem_bytes; offs++ )
@@ -261,7 +222,7 @@ void i2cmem_device::nvram_default()
void i2cmem_device::nvram_read( emu_file &file )
{
- int i2cmem_bytes = m_config.m_data_size;
+ int i2cmem_bytes = m_data_size;
UINT8 *buffer = auto_alloc_array( machine(), UINT8, i2cmem_bytes );
file.read( buffer, i2cmem_bytes );
@@ -281,7 +242,7 @@ void i2cmem_device::nvram_read( emu_file &file )
void i2cmem_device::nvram_write( emu_file &file )
{
- int i2cmem_bytes = m_config.m_data_size;
+ int i2cmem_bytes = m_data_size;
UINT8 *buffer = auto_alloc_array( machine(), UINT8, i2cmem_bytes );
for( offs_t offs = 0; offs < i2cmem_bytes; offs++ )
@@ -446,19 +407,19 @@ void i2cmem_device::set_scl_line( int state )
verboselog( this, 0, "write not enabled\n" );
m_state = STATE_IDLE;
}
- else if( m_config.m_page_size > 0 )
+ else if( m_page_size > 0 )
{
m_page[ m_page_offset ] = m_shift;
verboselog( this, 1, "page[ %04x ] <- %02x\n", m_page_offset, m_page[ m_page_offset ] );
m_page_offset++;
- if( m_page_offset == m_config.m_page_size )
+ if( m_page_offset == m_page_size )
{
- int offset = data_offset() & ~( m_config.m_page_size - 1 );
+ int offset = data_offset() & ~( m_page_size - 1 );
- verboselog( this, 1, "data[ %04x to %04x ] = page\n", offset, offset + m_config.m_page_size - 1 );
+ verboselog( this, 1, "data[ %04x to %04x ] = page\n", offset, offset + m_page_size - 1 );
- for( int i = 0; i < m_config.m_page_size; i++ )
+ for( int i = 0; i < m_page_size; i++ )
{
m_addrspace[ 0 ]->write_byte( offset + i, m_page[ i ] );
}
@@ -583,12 +544,12 @@ int i2cmem_device::read_sda_line()
int i2cmem_device::address_mask()
{
- return (m_config.m_data_size - 1);
+ return (m_data_size - 1);
}
int i2cmem_device::select_device()
{
- int device = ( m_config.m_slave_address & 0xf0 ) | ( m_e2 << 3 ) | ( m_e1 << 2 ) | ( m_e0 << 1 );
+ int device = ( m_slave_address & 0xf0 ) | ( m_e2 << 3 ) | ( m_e1 << 2 ) | ( m_e0 << 1 );
int mask = DEVSEL_ADDRESS & ~( address_mask() >> 7 );
if( ( m_devsel & mask ) == ( device & mask ) )
diff --git a/src/emu/machine/i2cmem.h b/src/emu/machine/i2cmem.h
index db353a0ec86..f0c6aa14deb 100644
--- a/src/emu/machine/i2cmem.h
+++ b/src/emu/machine/i2cmem.h
@@ -26,7 +26,7 @@
#define MCFG_I2CMEM_ADD( _tag, _interface ) \
MCFG_DEVICE_ADD( _tag, I2CMEM, 0 ) \
- i2cmem_device_config::static_set_interface(device, _interface);
+ i2cmem_device::static_set_interface(*device, _interface);
//**************************************************************************
@@ -43,54 +43,21 @@ struct i2cmem_interface
};
-// ======================> i2cmem_device_config
-
-class i2cmem_device_config :
- public device_config,
- public device_config_memory_interface,
- public device_config_nvram_interface,
- public i2cmem_interface
-{
- friend class i2cmem_device;
-
- // construction/destruction
- i2cmem_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock );
-
-public:
- // allocators
- static device_config *static_alloc_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock );
- virtual device_t *alloc_device( running_machine &machine ) const;
-
- // inline configuration
- static void static_set_interface(device_config *device, const i2cmem_interface &interface);
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
- virtual bool device_validity_check( emu_options &options, const game_driver &driver ) const;
-
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config( address_spacenum spacenum = AS_0 ) const;
-
- // device-specific configuration
- address_space_config m_space_config;
- int m_address_bits;
-};
-
-
// ======================> i2cmem_device
class i2cmem_device :
public device_t,
public device_memory_interface,
- public device_nvram_interface
+ public device_nvram_interface,
+ public i2cmem_interface
{
- friend class i2cmem_device_config;
-
+public:
// construction/destruction
- i2cmem_device( running_machine &_machine, const i2cmem_device_config &config );
+ i2cmem_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock );
+
+ // inline configuration
+ static void static_set_interface(device_t &device, const i2cmem_interface &interface);
-public:
// I/O operations
void set_e0_line( int state );
void set_e1_line( int state );
@@ -102,9 +69,14 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
+ virtual bool device_validity_check( emu_options &options, const game_driver &driver ) const;
virtual void device_start();
virtual void device_reset();
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config( address_spacenum spacenum = AS_0 ) const;
+
// device_nvram_interface overrides
virtual void nvram_default();
virtual void nvram_read( emu_file &file );
@@ -115,9 +87,11 @@ protected:
int select_device();
int data_offset();
- // internal state
- const i2cmem_device_config &m_config;
+ // device-specific configuration
+ address_space_config m_space_config;
+ int m_address_bits;
+ // internal state
int m_scl;
int m_sdaw;
int m_e0;
diff --git a/src/emu/machine/i8155.c b/src/emu/machine/i8155.c
index 3726e766029..f103a70561d 100644
--- a/src/emu/machine/i8155.c
+++ b/src/emu/machine/i8155.c
@@ -19,6 +19,9 @@
#include "i8155.h"
+// device type definition
+const device_type I8155 = &device_creator<i8155_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -94,10 +97,6 @@ enum
// GLOBAL VARIABLES
//**************************************************************************
-// devices
-const device_type I8155 = i8155_device_config::static_alloc_device_config;
-
-
// default address map
static ADDRESS_MAP_START( i8155, AS_0, 8 )
AM_RANGE(0x00, 0xff) AM_RAM
@@ -106,82 +105,6 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// i8155_device_config - constructor
-//-------------------------------------------------
-
-i8155_device_config::i8155_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Intel 8155", tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- m_space_config("ram", ENDIANNESS_LITTLE, 8, 8, 0, NULL, *ADDRESS_MAP_NAME(i8155))
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *i8155_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(i8155_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *i8155_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, i8155_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *i8155_device_config::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == AS_0) ? &m_space_config : NULL;
-}
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void i8155_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const i8155_interface *intf = reinterpret_cast<const i8155_interface *>(static_config());
- if (intf != NULL)
- *static_cast<i8155_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&in_pa_func, 0, sizeof(in_pa_func));
- memset(&out_pa_func, 0, sizeof(out_pa_func));
- memset(&in_pb_func, 0, sizeof(in_pb_func));
- memset(&out_pb_func, 0, sizeof(out_pb_func));
- memset(&in_pc_func, 0, sizeof(in_pc_func));
- memset(&out_pc_func, 0, sizeof(out_pc_func));
- memset(&out_to_func, 0, sizeof(out_to_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -291,12 +214,39 @@ inline void i8155_device::write_port(int port, UINT8 data)
// i8155_device - constructor
//-------------------------------------------------
-i8155_device::i8155_device(running_machine &_machine, const i8155_device_config &config)
- : device_t(_machine, config),
- device_memory_interface(_machine, config, *this),
- m_config(config)
+i8155_device::i8155_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8155, "Intel 8155", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ m_space_config("ram", ENDIANNESS_LITTLE, 8, 8, 0, NULL, *ADDRESS_MAP_NAME(i8155))
+{
+
+}
+
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void i8155_device::device_config_complete()
{
+ // inherit a copy of the static data
+ const i8155_interface *intf = reinterpret_cast<const i8155_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<i8155_interface *>(this) = *intf;
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&in_pa_cb, 0, sizeof(in_pa_cb));
+ memset(&out_pa_cb, 0, sizeof(out_pa_cb));
+ memset(&in_pb_cb, 0, sizeof(in_pb_cb));
+ memset(&out_pb_cb, 0, sizeof(out_pb_cb));
+ memset(&in_pc_cb, 0, sizeof(in_pc_cb));
+ memset(&out_pc_cb, 0, sizeof(out_pc_cb));
+ memset(&out_to_cb, 0, sizeof(out_to_cb));
+ }
}
@@ -307,13 +257,13 @@ i8155_device::i8155_device(running_machine &_machine, const i8155_device_config
void i8155_device::device_start()
{
// resolve callbacks
- devcb_resolve_read8(&m_in_port_func[0], &m_config.in_pa_func, this);
- devcb_resolve_read8(&m_in_port_func[1], &m_config.in_pb_func, this);
- devcb_resolve_read8(&m_in_port_func[2], &m_config.in_pc_func, this);
- devcb_resolve_write8(&m_out_port_func[0], &m_config.out_pa_func, this);
- devcb_resolve_write8(&m_out_port_func[1], &m_config.out_pb_func, this);
- devcb_resolve_write8(&m_out_port_func[2], &m_config.out_pc_func, this);
- devcb_resolve_write_line(&m_out_to_func, &m_config.out_to_func, this);
+ devcb_resolve_read8(&m_in_port_func[0], &in_pa_cb, this);
+ devcb_resolve_read8(&m_in_port_func[1], &in_pb_cb, this);
+ devcb_resolve_read8(&m_in_port_func[2], &in_pc_cb, this);
+ devcb_resolve_write8(&m_out_port_func[0], &out_pa_cb, this);
+ devcb_resolve_write8(&m_out_port_func[1], &out_pb_cb, this);
+ devcb_resolve_write8(&m_out_port_func[2], &out_pc_cb, this);
+ devcb_resolve_write_line(&m_out_to_func, &out_to_cb, this);
// allocate timers
m_timer = timer_alloc();
@@ -417,6 +367,17 @@ void i8155_device::device_timer(emu_timer &timer, device_timer_id id, int param,
//-------------------------------------------------
+// memory_space_config - return a description of
+// any address spaces owned by this device
+//-------------------------------------------------
+
+const address_space_config *i8155_device::memory_space_config(address_spacenum spacenum) const
+{
+ return (spacenum == AS_0) ? &m_space_config : NULL;
+}
+
+
+//-------------------------------------------------
// io_r - register read
//-------------------------------------------------
diff --git a/src/emu/machine/i8155.h b/src/emu/machine/i8155.h
index 282791da933..56929d9caf0 100644
--- a/src/emu/machine/i8155.h
+++ b/src/emu/machine/i8155.h
@@ -67,46 +67,17 @@
struct i8155_interface
{
- devcb_read8 in_pa_func;
- devcb_write8 out_pa_func;
+ devcb_read8 in_pa_cb;
+ devcb_write8 out_pa_cb;
- devcb_read8 in_pb_func;
- devcb_write8 out_pb_func;
+ devcb_read8 in_pb_cb;
+ devcb_write8 out_pb_cb;
- devcb_read8 in_pc_func;
- devcb_write8 out_pc_func;
+ devcb_read8 in_pc_cb;
+ devcb_write8 out_pc_cb;
// this gets called for each change of the TIMER OUT pin (pin 6)
- devcb_write_line out_to_func;
-};
-
-
-
-// ======================> i8155_device_config
-
-class i8155_device_config : public device_config,
- public device_config_memory_interface,
- public i8155_interface
-{
- friend class i8155_device;
-
- // construction/destruction
- i8155_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
-
- // address space configurations
- const address_space_config m_space_config;
+ devcb_write_line out_to_cb;
};
@@ -114,14 +85,13 @@ protected:
// ======================> i8155_device
class i8155_device : public device_t,
- public device_memory_interface
+ public device_memory_interface,
+ public i8155_interface
{
- friend class i8155_device_config;
-
+public:
// construction/destruction
- i8155_device(running_machine &_machine, const i8155_device_config &_config);
+ i8155_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( io_r );
DECLARE_WRITE8_MEMBER( io_w );
@@ -134,10 +104,13 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
inline UINT8 get_timer_mode();
inline void timer_output();
inline void pulse_timer_output();
@@ -169,7 +142,7 @@ private:
// timers
emu_timer *m_timer; // counter timer
- const i8155_device_config &m_config;
+ const address_space_config m_space_config;
};
diff --git a/src/emu/machine/i8212.c b/src/emu/machine/i8212.c
index af98db9947e..dbe6fe1e1a0 100644
--- a/src/emu/machine/i8212.c
+++ b/src/emu/machine/i8212.c
@@ -22,19 +22,23 @@
//**************************************************************************
-// GLOBAL VARIABLES
+// LIVE DEVICE
//**************************************************************************
-// devices
-const device_type I8212 = i8212_device_config::static_alloc_device_config;
-
+// device type definition
+const device_type I8212 = &device_creator<i8212_device>;
+//-------------------------------------------------
+// i8212_device - constructor
+//-------------------------------------------------
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
+i8212_device::i8212_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8212, "Intel 8212", tag, owner, clock),
+ m_md(I8212_MODE_INPUT),
+ m_stb(0)
+{
-GENERIC_DEVICE_CONFIG_SETUP(i8212, "Intel 8212")
+}
//-------------------------------------------------
@@ -43,7 +47,7 @@ GENERIC_DEVICE_CONFIG_SETUP(i8212, "Intel 8212")
// complete
//-------------------------------------------------
-void i8212_device_config::device_config_complete()
+void i8212_device::device_config_complete()
{
// inherit a copy of the static data
const i8212_interface *intf = reinterpret_cast<const i8212_interface *>(static_config());
@@ -53,32 +57,13 @@ void i8212_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&out_int_func, 0, sizeof(out_int_func));
- memset(&in_di_func, 0, sizeof(in_di_func));
- memset(&out_do_func, 0, sizeof(out_do_func));
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
+ memset(&m_in_di_cb, 0, sizeof(m_in_di_cb));
+ memset(&m_out_do_cb, 0, sizeof(m_out_do_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// i8212_device - constructor
-//-------------------------------------------------
-
-i8212_device::i8212_device(running_machine &_machine, const i8212_device_config &config)
- : device_t(_machine, config),
- m_md(I8212_MODE_INPUT),
- m_stb(0),
- m_config(config)
-{
-
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -86,9 +71,9 @@ i8212_device::i8212_device(running_machine &_machine, const i8212_device_config
void i8212_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_int_func, &m_config.out_int_func, this);
- devcb_resolve_read8(&m_in_di_func, &m_config.in_di_func, this);
- devcb_resolve_write8(&m_out_do_func, &m_config.out_do_func, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
+ devcb_resolve_read8(&m_in_di_func, &m_in_di_cb, this);
+ devcb_resolve_write8(&m_out_do_func, &m_out_do_cb, this);
// register for state saving
save_item(NAME(m_md));
diff --git a/src/emu/machine/i8212.h b/src/emu/machine/i8212.h
index 6390a4d6f7d..3ed32cbbfe9 100644
--- a/src/emu/machine/i8212.h
+++ b/src/emu/machine/i8212.h
@@ -64,46 +64,22 @@ enum
struct i8212_interface
{
- devcb_write_line out_int_func;
+ devcb_write_line m_out_int_cb;
- devcb_read8 in_di_func;
- devcb_write8 out_do_func;
-};
-
-
-
-// ======================> i8212_device_config
-
-class i8212_device_config : public device_config,
- public i8212_interface
-{
- friend class i8212_device;
-
- // construction/destruction
- i8212_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_di_cb;
+ devcb_write8 m_out_do_cb;
};
// ======================> i8212_device
-class i8212_device : public device_t
+class i8212_device : public device_t, public i8212_interface
{
- friend class i8212_device_config;
-
+public:
// construction/destruction
- i8212_device(running_machine &_machine, const i8212_device_config &_config);
+ i8212_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( data_r );
DECLARE_WRITE8_MEMBER( data_w );
@@ -112,6 +88,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -123,8 +100,6 @@ private:
int m_md; // mode
int m_stb; // strobe
UINT8 m_data; // data latch
-
- const i8212_device_config &m_config;
};
diff --git a/src/emu/machine/i8214.c b/src/emu/machine/i8214.c
index 0d77ad1da1f..521cccd7007 100644
--- a/src/emu/machine/i8214.c
+++ b/src/emu/machine/i8214.c
@@ -13,50 +13,15 @@
-//**************************************************************************
-// MACROS / CONSTANTS
-//**************************************************************************
+// device type definition
+const device_type I8214 = &device_creator<i8214_device>;
-#define LOG 0
-
-
-//**************************************************************************
-// GLOBAL VARIABLES
//**************************************************************************
-
-// devices
-const device_type I8214 = i8214_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
+// MACROS / CONSTANTS
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(i8214, "I8214")
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void i8214_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const i8214_interface *intf = reinterpret_cast<const i8214_interface *>(static_config());
- if (intf != NULL)
- *static_cast<i8214_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
- memset(&m_out_enlg_func, 0, sizeof(m_out_enlg_func));
- }
-}
+#define LOG 0
@@ -125,10 +90,31 @@ inline void i8214_device::check_interrupt()
// i8214_device - constructor
//-------------------------------------------------
-i8214_device::i8214_device(running_machine &_machine, const i8214_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+i8214_device::i8214_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8214, "I8214", tag, owner, clock)
+{
+}
+
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void i8214_device::device_config_complete()
{
+ // inherit a copy of the static data
+ const i8214_interface *intf = reinterpret_cast<const i8214_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<i8214_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
+ memset(&m_out_enlg_cb, 0, sizeof(m_out_enlg_cb));
+ }
}
@@ -139,8 +125,8 @@ i8214_device::i8214_device(running_machine &_machine, const i8214_device_config
void i8214_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
- devcb_resolve_write_line(&m_out_enlg_func, &m_config.m_out_enlg_func, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
+ devcb_resolve_write_line(&m_out_enlg_func, &m_out_enlg_cb, this);
// register for state saving
save_item(NAME(m_inte));
diff --git a/src/emu/machine/i8214.h b/src/emu/machine/i8214.h
index 06e4a59ed94..29c528c7997 100644
--- a/src/emu/machine/i8214.h
+++ b/src/emu/machine/i8214.h
@@ -53,43 +53,19 @@
struct i8214_interface
{
- devcb_write_line m_out_int_func;
- devcb_write_line m_out_enlg_func;
+ devcb_write_line m_out_int_cb;
+ devcb_write_line m_out_enlg_cb;
};
-// ======================> i8214_device_config
-
-class i8214_device_config : public device_config,
- public i8214_interface
-{
- friend class i8214_device;
-
- // construction/destruction
- i8214_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
-
// ======================> i8214_device
-class i8214_device : public device_t
+class i8214_device : public device_t, public i8214_interface
{
- friend class i8214_device_config;
-
+public:
// construction/destruction
- i8214_device(running_machine &_machine, const i8214_device_config &_config);
+ i8214_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_WRITE_LINE_MEMBER( sgs_w );
DECLARE_WRITE_LINE_MEMBER( etlg_w );
DECLARE_WRITE_LINE_MEMBER( inte_w );
@@ -100,6 +76,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
private:
@@ -116,8 +93,6 @@ private:
UINT8 m_r; // interrupt request latch
int m_sgs; // status group select
int m_etlg; // enable this level group
-
- const i8214_device_config &m_config;
};
diff --git a/src/emu/machine/i8243.c b/src/emu/machine/i8243.c
index 70bb448afb3..9a15afc1dcf 100644
--- a/src/emu/machine/i8243.c
+++ b/src/emu/machine/i8243.c
@@ -13,27 +13,39 @@
#include "devhelpr.h"
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(i8243, "I8243")
+// device type definition
+const device_type I8243 = &device_creator<i8243_device>;
+
+//-------------------------------------------------
+// i8243_device - constructor
+//-------------------------------------------------
+
+i8243_device::i8243_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8243, "I8243", tag, owner, clock)
+{
+
+}
+
//-------------------------------------------------
// static_set_read_handler - configuration helper
// to set the read handler
//-------------------------------------------------
-void i8243_device_config::static_set_read_handler(device_config *device, read8_device_func callback)
+void i8243_device::static_set_read_handler(device_t &device, read8_device_func callback)
{
- i8243_device_config *i8243 = downcast<i8243_device_config *>(device);
+ i8243_device &i8243 = downcast<i8243_device &>(device);
if(callback != NULL)
{
- i8243->m_readhandler.type = DEVCB_TYPE_SELF;
- i8243->m_readhandler.readdevice = callback;
+ i8243.m_readhandler_cb.type = DEVCB_TYPE_SELF;
+ i8243.m_readhandler_cb.readdevice = callback;
}
else
{
- i8243->m_readhandler.type = DEVCB_TYPE_NULL;
+ i8243.m_readhandler_cb.type = DEVCB_TYPE_NULL;
}
}
@@ -43,51 +55,29 @@ void i8243_device_config::static_set_read_handler(device_config *device, read8_d
// to set the write handler
//-------------------------------------------------
-void i8243_device_config::static_set_write_handler(device_config *device, write8_device_func callback)
+void i8243_device::static_set_write_handler(device_t &device, write8_device_func callback)
{
- i8243_device_config *i8243 = downcast<i8243_device_config *>(device);
+ i8243_device &i8243 = downcast<i8243_device &>(device);
if(callback != NULL)
{
- i8243->m_writehandler.type = DEVCB_TYPE_SELF;
- i8243->m_writehandler.writedevice = callback;
+ i8243.m_writehandler_cb.type = DEVCB_TYPE_SELF;
+ i8243.m_writehandler_cb.writedevice = callback;
}
else
{
- i8243->m_writehandler.type = DEVCB_TYPE_NULL;
+ i8243.m_writehandler_cb.type = DEVCB_TYPE_NULL;
}
}
-
-/***************************************************************************
- LIVE DEVICE
-***************************************************************************/
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type I8243 = i8243_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// i8243_device - constructor
-//-------------------------------------------------
-
-i8243_device::i8243_device(running_machine &_machine, const i8243_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void i8243_device::device_start()
{
- devcb_resolve_read8(&m_readhandler, &m_config.m_readhandler, this);
- devcb_resolve_write8(&m_writehandler, &m_config.m_writehandler, this);
+ devcb_resolve_read8(&m_readhandler, &m_readhandler_cb, this);
+ devcb_resolve_write8(&m_writehandler, &m_writehandler_cb, this);
}
diff --git a/src/emu/machine/i8243.h b/src/emu/machine/i8243.h
index 00b170ebe0c..325a1bdf5ba 100644
--- a/src/emu/machine/i8243.h
+++ b/src/emu/machine/i8243.h
@@ -28,50 +28,28 @@
MCFG_I8243_WRITEHANDLER(_write) \
#define MCFG_I8243_READHANDLER(_read) \
- i8243_device_config::static_set_read_handler(device, _read); \
+ i8243_device::static_set_read_handler(*device, _read); \
#define MCFG_I8243_WRITEHANDLER(_write) \
- i8243_device_config::static_set_write_handler(device, _write); \
+ i8243_device::static_set_write_handler(*device, _write); \
/***************************************************************************
TYPE DEFINITIONS
***************************************************************************/
-// ======================> i8243_device_config
-
-class i8243_device_config : public device_config
-{
- friend class i8243_device;
-
- // construction/destruction
- i8243_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
- // inline configuration helpers
- static void static_set_read_handler(device_config *device, read8_device_func callback);
- static void static_set_write_handler(device_config *device, write8_device_func callback);
-
-protected:
- devcb_read8 m_readhandler;
- devcb_write8 m_writehandler;
-};
-
-
// ======================> i8243_device
class i8243_device : public device_t
{
- friend class i8243_device_config;
-
+public:
// construction/destruction
- i8243_device(running_machine &_machine, const i8243_device_config &_config);
+ i8243_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // inline configuration helpers
+ static void static_set_read_handler(device_t &device, read8_device_func callback);
+ static void static_set_write_handler(device_t &device, write8_device_func callback);
-public:
UINT8 i8243_p2_r(UINT32 offset);
void i8243_p2_w(UINT32 offset, UINT8 data);
@@ -93,10 +71,11 @@ private:
UINT8 m_opcode; /* latched opcode */
UINT8 m_prog; /* previous PROG state */
+ devcb_read8 m_readhandler_cb;
+ devcb_write8 m_writehandler_cb;
+
devcb_resolved_read8 m_readhandler;
devcb_resolved_write8 m_writehandler;
-
- const i8243_device_config &m_config;
};
diff --git a/src/emu/machine/i8255.c b/src/emu/machine/i8255.c
index 176567d21fa..954c688afbe 100644
--- a/src/emu/machine/i8255.c
+++ b/src/emu/machine/i8255.c
@@ -64,42 +64,8 @@ enum
// DEVICE DEFINITIONS
//**************************************************************************
-const device_type I8255 = i8255_device_config::static_alloc_device_config;
-const device_type I8255A = i8255_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(i8255, "I8255")
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void i8255_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const i8255_interface *intf = reinterpret_cast<const i8255_interface *>(static_config());
- if (intf != NULL)
- *static_cast<i8255_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_in_pa_func, 0, sizeof(m_in_pa_func));
- memset(&m_out_pa_func, 0, sizeof(m_out_pa_func));
- memset(&m_in_pb_func, 0, sizeof(m_in_pb_func));
- memset(&m_out_pb_func, 0, sizeof(m_out_pb_func));
- memset(&m_in_pc_func, 0, sizeof(m_in_pc_func));
- memset(&m_out_pc_func, 0, sizeof(m_out_pc_func));
- }
-}
+const device_type I8255 = &device_creator<i8255_device>;
+const device_type I8255A = &device_creator<i8255_device>;
@@ -311,10 +277,35 @@ inline int i8255_device::port_c_upper_mode()
// i8255_device - constructor
//-------------------------------------------------
-i8255_device::i8255_device(running_machine &_machine, const i8255_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+i8255_device::i8255_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8255, "I8255", tag, owner, clock)
+{
+}
+
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void i8255_device::device_config_complete()
{
+ // inherit a copy of the static data
+ const i8255_interface *intf = reinterpret_cast<const i8255_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<i8255_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
+ memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
+ memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
+ memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
+ memset(&m_in_pc_cb, 0, sizeof(m_in_pc_cb));
+ memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
+ }
}
@@ -325,12 +316,12 @@ i8255_device::i8255_device(running_machine &_machine, const i8255_device_config
void i8255_device::device_start()
{
// resolve callbacks
- devcb_resolve_read8(&m_in_port_func[PORT_A], &m_config.m_in_pa_func, this);
- devcb_resolve_write8(&m_out_port_func[PORT_A], &m_config.m_out_pa_func, this);
- devcb_resolve_read8(&m_in_port_func[PORT_B], &m_config.m_in_pb_func, this);
- devcb_resolve_write8(&m_out_port_func[PORT_B], &m_config.m_out_pb_func, this);
- devcb_resolve_read8(&m_in_port_func[PORT_C], &m_config.m_in_pc_func, this);
- devcb_resolve_write8(&m_out_port_func[PORT_C], &m_config.m_out_pc_func, this);
+ devcb_resolve_read8(&m_in_port_func[PORT_A], &m_in_pa_cb, this);
+ devcb_resolve_write8(&m_out_port_func[PORT_A], &m_out_pa_cb, this);
+ devcb_resolve_read8(&m_in_port_func[PORT_B], &m_in_pb_cb, this);
+ devcb_resolve_write8(&m_out_port_func[PORT_B], &m_out_pb_cb, this);
+ devcb_resolve_read8(&m_in_port_func[PORT_C], &m_in_pc_cb, this);
+ devcb_resolve_write8(&m_out_port_func[PORT_C], &m_out_pc_cb, this);
// register for state saving
save_item(NAME(m_control));
diff --git a/src/emu/machine/i8255.h b/src/emu/machine/i8255.h
index 2d0d242dbdf..ae8db18cef3 100644
--- a/src/emu/machine/i8255.h
+++ b/src/emu/machine/i8255.h
@@ -69,46 +69,24 @@
struct i8255_interface
{
- devcb_read8 m_in_pa_func;
- devcb_write8 m_out_pa_func;
- devcb_read8 m_in_pb_func;
- devcb_write8 m_out_pb_func;
- devcb_read8 m_in_pc_func;
- devcb_write8 m_out_pc_func;
-};
-
-
-// ======================> i8255_device_config
-
-class i8255_device_config : public device_config,
- public i8255_interface
-{
- friend class i8255_device;
-
- // construction/destruction
- i8255_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_pa_cb;
+ devcb_write8 m_out_pa_cb;
+ devcb_read8 m_in_pb_cb;
+ devcb_write8 m_out_pb_cb;
+ devcb_read8 m_in_pc_cb;
+ devcb_write8 m_out_pc_cb;
};
// ======================> i8255_device
-class i8255_device : public device_t
+class i8255_device : public device_t,
+ public i8255_interface
{
- friend class i8255_device_config;
-
+public:
// construction/destruction
- i8255_device(running_machine &_machine, const i8255_device_config &_config);
+ i8255_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -124,6 +102,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -165,8 +144,6 @@ private:
int m_inte1; // interrupt enable
int m_inte2; // interrupt enable
int m_intr[2]; // interrupt
-
- const i8255_device_config &m_config;
};
diff --git a/src/emu/machine/i8355.c b/src/emu/machine/i8355.c
index 10671198227..52ef3393343 100644
--- a/src/emu/machine/i8355.c
+++ b/src/emu/machine/i8355.c
@@ -39,9 +39,8 @@ enum
// GLOBAL VARIABLES
//**************************************************************************
-// devices
-const device_type I8355 = i8355_device_config::static_alloc_device_config;
-
+// device type definition
+const device_type I8355 = &device_creator<i8355_device>;
// default address map
static ADDRESS_MAP_START( i8355, AS_0, 8 )
@@ -51,79 +50,6 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// i8355_device_config - constructor
-//-------------------------------------------------
-
-i8355_device_config::i8355_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Intel 8355", tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- m_space_config("ram", ENDIANNESS_LITTLE, 8, 11, 0, NULL, *ADDRESS_MAP_NAME(i8355))
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *i8355_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(i8355_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *i8355_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, i8355_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
-
-const address_space_config *i8355_device_config::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == AS_0) ? &m_space_config : NULL;
-}
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void i8355_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const i8355_interface *intf = reinterpret_cast<const i8355_interface *>(static_config());
- if (intf != NULL)
- *static_cast<i8355_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&in_pa_func, 0, sizeof(in_pa_func));
- memset(&out_pa_func, 0, sizeof(out_pa_func));
- memset(&in_pb_func, 0, sizeof(in_pb_func));
- memset(&out_pb_func, 0, sizeof(out_pb_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -165,26 +91,50 @@ inline void i8355_device::write_port(int port, UINT8 data)
// i8355_device - constructor
//-------------------------------------------------
-i8355_device::i8355_device(running_machine &_machine, const i8355_device_config &config)
- : device_t(_machine, config),
- device_memory_interface(_machine, config, *this),
- m_config(config)
+i8355_device::i8355_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, I8355, "Intel 8355", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ m_space_config("ram", ENDIANNESS_LITTLE, 8, 11, 0, NULL, *ADDRESS_MAP_NAME(i8355))
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void i8355_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const i8355_interface *intf = reinterpret_cast<const i8355_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<i8355_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
+ memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
+ memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
+ memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void i8355_device::device_start()
{
// resolve callbacks
- devcb_resolve_read8(&m_in_port_func[0], &m_config.in_pa_func, this);
- devcb_resolve_read8(&m_in_port_func[1], &m_config.in_pb_func, this);
- devcb_resolve_write8(&m_out_port_func[0], &m_config.out_pa_func, this);
- devcb_resolve_write8(&m_out_port_func[1], &m_config.out_pb_func, this);
+ devcb_resolve_read8(&m_in_port_func[0], &m_in_pa_cb, this);
+ devcb_resolve_read8(&m_in_port_func[1], &m_in_pb_cb, this);
+ devcb_resolve_write8(&m_out_port_func[0], &m_out_pa_cb, this);
+ devcb_resolve_write8(&m_out_port_func[1], &m_out_pb_cb, this);
// register for state saving
save_item(NAME(m_output));
@@ -205,6 +155,18 @@ void i8355_device::device_reset()
//-------------------------------------------------
+// memory_space_config - return a description of
+// any address spaces owned by this device
+//-------------------------------------------------
+
+const address_space_config *i8355_device::memory_space_config(address_spacenum spacenum) const
+{
+ return (spacenum == AS_0) ? &m_space_config : NULL;
+}
+
+
+
+//-------------------------------------------------
// io_r - register read
//-------------------------------------------------
diff --git a/src/emu/machine/i8355.h b/src/emu/machine/i8355.h
index a332d4fa264..142b4a36ef1 100644
--- a/src/emu/machine/i8355.h
+++ b/src/emu/machine/i8355.h
@@ -67,40 +67,11 @@
struct i8355_interface
{
- devcb_read8 in_pa_func;
- devcb_write8 out_pa_func;
+ devcb_read8 m_in_pa_cb;
+ devcb_write8 m_out_pa_cb;
- devcb_read8 in_pb_func;
- devcb_write8 out_pb_func;
-};
-
-
-
-// ======================> i8355_device_config
-
-class i8355_device_config : public device_config,
- public device_config_memory_interface,
- public i8355_interface
-{
- friend class i8355_device;
-
- // construction/destruction
- i8355_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
-
- // address space configurations
- const address_space_config m_space_config;
+ devcb_read8 m_in_pb_cb;
+ devcb_write8 m_out_pb_cb;
};
@@ -108,14 +79,13 @@ protected:
// ======================> i8355_device
class i8355_device : public device_t,
- public device_memory_interface
+ public device_memory_interface,
+ public i8355_interface
{
- friend class i8355_device_config;
-
+public:
// construction/destruction
- i8355_device(running_machine &_machine, const i8355_device_config &_config);
+ i8355_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( io_r );
DECLARE_WRITE8_MEMBER( io_w );
@@ -124,9 +94,13 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
inline UINT8 read_port(int port);
inline void write_port(int port, UINT8 data);
@@ -138,7 +112,7 @@ private:
UINT8 m_output[2]; // output latches
UINT8 m_ddr[2]; // DDR latches
- const i8355_device_config &m_config;
+ const address_space_config m_space_config;
};
diff --git a/src/emu/machine/idectrl.c b/src/emu/machine/idectrl.c
index 433badd8821..7a9a991435c 100644
--- a/src/emu/machine/idectrl.c
+++ b/src/emu/machine/idectrl.c
@@ -204,7 +204,7 @@ INLINE ide_state *get_safe_token(device_t *device)
INLINE void signal_interrupt(ide_state *ide)
{
- const ide_config *config = (const ide_config *)downcast<const legacy_device_config_base &>(ide->device->baseconfig()).inline_config();
+ const ide_config *config = (const ide_config *)downcast<const legacy_device_base *>(ide->device)->inline_config();
LOG(("IDE interrupt assert\n"));
@@ -218,7 +218,7 @@ INLINE void signal_interrupt(ide_state *ide)
INLINE void clear_interrupt(ide_state *ide)
{
- const ide_config *config = (const ide_config *)downcast<const legacy_device_config_base &>(ide->device->baseconfig()).inline_config();
+ const ide_config *config = (const ide_config *)downcast<const legacy_device_base *>(ide->device)->inline_config();
LOG(("IDE interrupt clear\n"));
@@ -1807,14 +1807,14 @@ static DEVICE_START( ide_controller )
/* validate some basic stuff */
assert(device != NULL);
- assert(device->baseconfig().static_config() == NULL);
- assert(downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config() != NULL);
+ assert(device->static_config() == NULL);
+ assert(downcast<const legacy_device_base *>(device)->inline_config() != NULL);
/* store a pointer back to the device */
ide->device = device;
/* set MAME harddisk handle */
- config = (const ide_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ config = (const ide_config *)downcast<const legacy_device_base *>(device)->inline_config();
ide->handle = get_disk_handle(device->machine(), (config->master != NULL) ? config->master : device->tag());
ide->disk = hard_disk_open(ide->handle);
assert_always(config->slave == NULL, "IDE controller does not yet support slave drives\n");
diff --git a/src/emu/machine/ins8154.c b/src/emu/machine/ins8154.c
index ff319ad785a..29baae92eaf 100644
--- a/src/emu/machine/ins8154.c
+++ b/src/emu/machine/ins8154.c
@@ -30,15 +30,24 @@ enum
};
-/***************************************************************************
- IMPLEMENTATION
-***************************************************************************/
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(ins8154, "INS8154")
+// device type definition
+const device_type INS8154 = &device_creator<ins8154_device>;
+
+//-------------------------------------------------
+// ins8154_device - constructor
+//-------------------------------------------------
+
+ins8154_device::ins8154_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, INS8154, "INS8154", tag, owner, clock)
+{
+
+}
+
//-------------------------------------------------
// device_config_complete - perform any
@@ -46,7 +55,7 @@ GENERIC_DEVICE_CONFIG_SETUP(ins8154, "INS8154")
// complete
//-------------------------------------------------
-void ins8154_device_config::device_config_complete()
+void ins8154_device::device_config_complete()
{
// inherit a copy of the static data
const ins8154_interface *intf = reinterpret_cast<const ins8154_interface *>(static_config());
@@ -58,33 +67,15 @@ void ins8154_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_in_a_func, 0, sizeof(m_in_a_func));
- memset(&m_in_b_func, 0, sizeof(m_in_b_func));
- memset(&m_out_a_func, 0, sizeof(m_out_a_func));
- memset(&m_out_b_func, 0, sizeof(m_out_b_func));
- memset(&m_out_irq_func, 0, sizeof(m_out_irq_func));
+ memset(&m_in_a_cb, 0, sizeof(m_in_a_cb));
+ memset(&m_in_b_cb, 0, sizeof(m_in_b_cb));
+ memset(&m_out_a_cb, 0, sizeof(m_out_a_cb));
+ memset(&m_out_b_cb, 0, sizeof(m_out_b_cb));
+ memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type INS8154 = ins8154_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// ins8154_device - constructor
-//-------------------------------------------------
-
-ins8154_device::ins8154_device(running_machine &_machine, const ins8154_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -92,11 +83,11 @@ ins8154_device::ins8154_device(running_machine &_machine, const ins8154_device_c
void ins8154_device::device_start()
{
/* resolve callbacks */
- devcb_resolve_read8(&m_in_a_func, &m_config.m_in_a_func, this);
- devcb_resolve_write8(&m_out_a_func, &m_config.m_out_a_func, this);
- devcb_resolve_read8(&m_in_b_func, &m_config.m_in_b_func, this);
- devcb_resolve_write8(&m_out_b_func, &m_config.m_out_b_func, this);
- devcb_resolve_write_line(&m_out_irq_func, &m_config.m_out_irq_func, this);
+ devcb_resolve_read8(&m_in_a_func, &m_in_a_cb, this);
+ devcb_resolve_write8(&m_out_a_func, &m_out_a_cb, this);
+ devcb_resolve_read8(&m_in_b_func, &m_in_b_cb, this);
+ devcb_resolve_write8(&m_out_b_func, &m_out_b_cb, this);
+ devcb_resolve_write_line(&m_out_irq_func, &m_out_irq_cb, this);
/* register for state saving */
save_item(NAME(m_in_a));
diff --git a/src/emu/machine/ins8154.h b/src/emu/machine/ins8154.h
index 13acfc521b2..1857a428223 100644
--- a/src/emu/machine/ins8154.h
+++ b/src/emu/machine/ins8154.h
@@ -55,47 +55,23 @@
struct ins8154_interface
{
- devcb_read8 m_in_a_func;
- devcb_write8 m_out_a_func;
- devcb_read8 m_in_b_func;
- devcb_write8 m_out_b_func;
- devcb_write_line m_out_irq_func;
-};
-
-
-
-// ======================> ins8154_device_config
-
-class ins8154_device_config : public device_config,
- public ins8154_interface
-{
- friend class ins8154_device;
-
- // construction/destruction
- ins8154_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_a_cb;
+ devcb_write8 m_out_a_cb;
+ devcb_read8 m_in_b_cb;
+ devcb_write8 m_out_b_cb;
+ devcb_write_line m_out_irq_cb;
};
// ======================> ins8154_device
-class ins8154_device : public device_t
+class ins8154_device : public device_t,
+ public ins8154_interface
{
- friend class ins8154_device_config;
-
- // construction/destruction
- ins8154_device(running_machine &_machine, const ins8154_device_config &_config);
-
public:
+ // construction/destruction
+ ins8154_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
UINT8 ins8154_r(UINT32 offset);
void ins8154_w(UINT32 offset, UINT8 data);
@@ -105,6 +81,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_post_load() { }
@@ -127,8 +104,6 @@ private:
UINT8 m_mdr; /* Mode Definition Register */
UINT8 m_odra; /* Output Definition Register Port A */
UINT8 m_odrb; /* Output Definition Register Port B */
-
- const ins8154_device_config &m_config;
};
diff --git a/src/emu/machine/ins8250.c b/src/emu/machine/ins8250.c
index e44641922b3..e3efc887f03 100644
--- a/src/emu/machine/ins8250.c
+++ b/src/emu/machine/ins8250.c
@@ -547,7 +547,7 @@ static void common_start( device_t *device, int device_type )
{
ins8250_t *ins8250 = get_safe_token(device);
- ins8250->interface = (const ins8250_interface*)device->baseconfig().static_config();
+ ins8250->interface = (const ins8250_interface*)device->static_config();
ins8250->device_type = device_type;
}
diff --git a/src/emu/machine/intelfsh.c b/src/emu/machine/intelfsh.c
index c8948d46c07..60c988c1b21 100644
--- a/src/emu/machine/intelfsh.c
+++ b/src/emu/machine/intelfsh.c
@@ -41,45 +41,22 @@ enum
//**************************************************************************
-// DEVICE DEFINITIONS
+// GLOBAL VARIABLES
//**************************************************************************
-// 8-bit variants
-DEFINE_TRIVIAL_DERIVED_DEVICE(intel_28f016s5_device_config, intelfsh8_device_config, intel_28f016s5_device, intelfsh8_device, "Sharp LH28F400 Flash", intelfsh_device_config::FLASH_SHARP_LH28F400)
-DEFINE_TRIVIAL_DERIVED_DEVICE(fujitsu_29f016a_device_config, intelfsh8_device_config, fujitsu_29f016a_device, intelfsh8_device, "Fujitsu 29F016A Flash", intelfsh_device_config::FLASH_FUJITSU_29F016A)
-DEFINE_TRIVIAL_DERIVED_DEVICE(fujitsu_29dl16x_device_config, intelfsh8_device_config, fujitsu_29dl16x_device, intelfsh8_device, "Fujitsu 29DL16X Flash", intelfsh_device_config::FLASH_FUJITSU_29DL16X)
-DEFINE_TRIVIAL_DERIVED_DEVICE(sharp_lh28f016s_device_config, intelfsh8_device_config, sharp_lh28f016s_device, intelfsh8_device, "Sharp LH28F016S Flash", intelfsh_device_config::FLASH_SHARP_LH28F016S)
-DEFINE_TRIVIAL_DERIVED_DEVICE(intel_e28f008sa_device_config, intelfsh8_device_config, intel_e28f008sa_device, intelfsh8_device, "Intel E28F008SA Flash", intelfsh_device_config::FLASH_INTEL_E28F008SA)
-DEFINE_TRIVIAL_DERIVED_DEVICE(macronix_29l001mc_device_config, intelfsh8_device_config, macronix_29l001mc_device, intelfsh8_device, "Macronix 29L001MC Flash", intelfsh_device_config::FLASH_MACRONIX_29L001MC)
-DEFINE_TRIVIAL_DERIVED_DEVICE(panasonic_mn63f805mnp_device_config, intelfsh8_device_config, panasonic_mn63f805mnp_device, intelfsh8_device, "Panasonic MN63F805MNP Flash", intelfsh_device_config::FLASH_PANASONIC_MN63F805MNP)
-DEFINE_TRIVIAL_DERIVED_DEVICE(sanyo_le26fv10n1ts_device_config, intelfsh8_device_config, sanyo_le26fv10n1ts_device, intelfsh8_device, "Sanyo LE26FV10N1TS Flash", intelfsh_device_config::FLASH_SANYO_LE26FV10N1TS)
-
-const device_type INTEL_28F016S5 = intel_28f016s5_device_config::static_alloc_device_config;
-const device_type SHARP_LH28F016S = sharp_lh28f016s_device_config::static_alloc_device_config;
-const device_type FUJITSU_29F016A = fujitsu_29f016a_device_config::static_alloc_device_config;
-const device_type FUJITSU_29DL16X = fujitsu_29dl16x_device_config::static_alloc_device_config;
-const device_type INTEL_E28F008SA = intel_e28f008sa_device_config::static_alloc_device_config;
-const device_type MACRONIX_29L001MC = macronix_29l001mc_device_config::static_alloc_device_config;
-const device_type PANASONIC_MN63F805MNP = panasonic_mn63f805mnp_device_config::static_alloc_device_config;
-const device_type SANYO_LE26FV10N1TS = sanyo_le26fv10n1ts_device_config::static_alloc_device_config;
-
-
-// 16-bit variants
-DEFINE_TRIVIAL_DERIVED_DEVICE(sharp_lh28f400_device_config, intelfsh16_device_config, sharp_lh28f400_device, intelfsh16_device, "Sharp LH28F400 Flash", intelfsh_device_config::FLASH_SHARP_LH28F400)
-DEFINE_TRIVIAL_DERIVED_DEVICE(intel_te28f160_device_config, intelfsh16_device_config, intel_te28f160_device, intelfsh16_device, "Intel TE28F160 Flash", intelfsh_device_config::FLASH_INTEL_TE28F160)
-DEFINE_TRIVIAL_DERIVED_DEVICE(intel_e28f400_device_config, intelfsh16_device_config, intel_e28f400_device, intelfsh16_device, "Intel E28F400 Flash", intelfsh_device_config::FLASH_INTEL_E28F400)
-DEFINE_TRIVIAL_DERIVED_DEVICE(sharp_unk128mbit_device_config, intelfsh16_device_config, sharp_unk128mbit_device, intelfsh16_device, "Sharp Unknown 128Mb Flash", intelfsh_device_config::FLASH_SHARP_UNK128MBIT)
-
-const device_type SHARP_LH28F400 = sharp_lh28f400_device_config::static_alloc_device_config;
-const device_type INTEL_TE28F160 = intel_te28f160_device_config::static_alloc_device_config;
-const device_type INTEL_E28F400 = intel_e28f400_device_config::static_alloc_device_config;
-const device_type SHARP_UNK128MBIT = sharp_unk128mbit_device_config::static_alloc_device_config;
-
-
+// device type definition
+const device_type INTEL_28F016S5 = &device_creator<intel_28f016s5_device>;
+const device_type SHARP_LH28F016S = &device_creator<sharp_lh28f016s_device>;
+const device_type FUJITSU_29F016A = &device_creator<fujitsu_29f016a_device>;
+const device_type INTEL_E28F400 = &device_creator<intel_e28f400_device>;
+const device_type MACRONIX_29L001MC = &device_creator<macronix_29l001mc_device>;
+const device_type PANASONIC_MN63F805MNP = &device_creator<panasonic_mn63f805mnp_device>;
+const device_type SANYO_LE26FV10N1TS = &device_creator<sanyo_le26fv10n1ts_device>;
-//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
+const device_type SHARP_LH28F400 = &device_creator<sharp_lh28f400_device>;
+const device_type INTEL_E28F008SA = &device_creator<intel_e28f008sa_device>;
+const device_type INTEL_TE28F160 = &device_creator<intel_te28f160_device>;
+const device_type SHARP_UNK128MBIT = &device_creator<sharp_unk128mbit_device>;
static ADDRESS_MAP_START( memory_map8_512Kb, AS_PROGRAM, 8 )
AM_RANGE(0x00000, 0x00ffff) AM_RAM
@@ -113,23 +90,29 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
-// intelfsh_device_config - constructor
+// intelfsh_device - constructor
//-------------------------------------------------
-intelfsh_device_config::intelfsh_device_config(const machine_config &mconfig, device_type type, const char *name, const char *tag, const device_config *owner, UINT32 clock, UINT32 variant)
- : device_config(mconfig, type, name, tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this),
+intelfsh_device::intelfsh_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
+ : device_t(mconfig, type, name, tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
m_type(variant),
m_size(0),
m_bits(8),
m_device_id(0),
m_maker_id(0),
- m_sector_is_4k(false)
+ m_sector_is_4k(false),
+ m_status(0x80),
+ m_erase_sector(0),
+ m_flash_mode(FM_NORMAL),
+ m_flash_master_lock(false),
+ m_timer(NULL),
+ m_bank(0)
{
address_map_constructor map = NULL;
@@ -219,56 +202,45 @@ intelfsh_device_config::intelfsh_device_config(const machine_config &mconfig, de
m_space_config = address_space_config("flash", ENDIANNESS_BIG, m_bits, addrbits, (m_bits == 8) ? 0 : -1, map);
}
-intelfsh8_device_config::intelfsh8_device_config(const machine_config &mconfig, device_type type, const char *name, const char *tag, const device_config *owner, UINT32 clock, UINT32 variant)
- : intelfsh_device_config(mconfig, type, name, tag, owner, clock, variant)
-{
-}
+intelfsh8_device::intelfsh8_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
+ : intelfsh_device(mconfig, type, name, tag, owner, clock, variant) { }
-intelfsh16_device_config::intelfsh16_device_config(const machine_config &mconfig, device_type type, const char *name, const char *tag, const device_config *owner, UINT32 clock, UINT32 variant)
- : intelfsh_device_config(mconfig, type, name, tag, owner, clock, variant)
-{
-}
+intelfsh16_device::intelfsh16_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant)
+ : intelfsh_device(mconfig, type, name, tag, owner, clock, variant) { }
-//-------------------------------------------------
-// memory_space_config - return a description of
-// any address spaces owned by this device
-//-------------------------------------------------
+intel_28f016s5_device::intel_28f016s5_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, INTEL_28F016S5, "Intel 28F016S5 Flash", tag, owner, clock, FLASH_INTEL_28F016S5) { }
-const address_space_config *intelfsh_device_config::memory_space_config(address_spacenum spacenum) const
-{
- return (spacenum == 0) ? &m_space_config : NULL;
-}
+fujitsu_29f016a_device::fujitsu_29f016a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, FUJITSU_29F016A, "Fujitsu 29F016A Flash", tag, owner, clock, FLASH_FUJITSU_29F016A) { }
+sharp_lh28f016s_device::sharp_lh28f016s_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, SHARP_LH28F016S, "Sharp LH28F016S Flash", tag, owner, clock, FLASH_SHARP_LH28F016S) { }
+intel_e28f008sa_device::intel_e28f008sa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, INTEL_E28F008SA, "Intel E28F008SA Flash", tag, owner, clock, FLASH_INTEL_E28F008SA) { }
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
+macronix_29l001mc_device::macronix_29l001mc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, MACRONIX_29L001MC, "Macronix 29L001MC Flash", tag, owner, clock, FLASH_MACRONIX_29L001MC) { }
-//-------------------------------------------------
-// intelfsh_device - constructor
-//-------------------------------------------------
+panasonic_mn63f805mnp_device::panasonic_mn63f805mnp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, PANASONIC_MN63F805MNP, "Panasonic MN63F805MNP Flash", tag, owner, clock, FLASH_PANASONIC_MN63F805MNP) { }
-intelfsh_device::intelfsh_device(running_machine &_machine, const intelfsh_device_config &config)
- : device_t(_machine, config),
- device_memory_interface(_machine, config, *this),
- device_nvram_interface(_machine, config, *this),
- m_config(config),
- m_status(0x80),
- m_erase_sector(0),
- m_flash_mode(FM_NORMAL),
- m_flash_master_lock(false),
- m_timer(NULL),
- m_bank(0)
-{
-}
+sanyo_le26fv10n1ts_device::sanyo_le26fv10n1ts_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh8_device(mconfig, SANYO_LE26FV10N1TS, "Sanyo LE26FV10N1TS Flash", tag, owner, clock, FLASH_SANYO_LE26FV10N1TS) { }
+
+sharp_lh28f400_device::sharp_lh28f400_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh16_device(mconfig, SHARP_LH28F400, "Sharp LH28F400 Flash", tag, owner, clock, FLASH_SHARP_LH28F400) { }
-intelfsh8_device::intelfsh8_device(running_machine &_machine, const intelfsh_device_config &config)
- : intelfsh_device(_machine, config) { }
+intel_te28f160_device::intel_te28f160_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh16_device(mconfig, INTEL_TE28F160, "Intel TE28F160 Flash", tag, owner, clock, FLASH_INTEL_TE28F160) { }
-intelfsh16_device::intelfsh16_device(running_machine &_machine, const intelfsh_device_config &config)
- : intelfsh_device(_machine, config) { }
+intel_e28f400_device::intel_e28f400_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh16_device(mconfig, INTEL_E28F400, "Intel E28F400 Flash", tag, owner, clock, FLASH_INTEL_E28F400) { }
+
+sharp_unk128mbit_device::sharp_unk128mbit_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : intelfsh16_device(mconfig, SHARP_UNK128MBIT, "Sharp Unknown 128Mbit Flash", tag, owner, clock, FLASH_SHARP_UNK128MBIT) { }
//-------------------------------------------------
@@ -305,6 +277,17 @@ void intelfsh_device::device_timer(emu_timer &timer, device_timer_id id, int par
//-------------------------------------------------
+// memory_space_config - return a description of
+// any address spaces owned by this device
+//-------------------------------------------------
+
+const address_space_config *intelfsh_device::memory_space_config(address_spacenum spacenum) const
+{
+ return (spacenum == 0) ? &m_space_config : NULL;
+}
+
+
+//-------------------------------------------------
// nvram_default - called to initialize NVRAM to
// its default state
//-------------------------------------------------
@@ -315,10 +298,10 @@ void intelfsh_device::nvram_default()
if (m_region != NULL)
{
UINT32 bytes = m_region->bytes();
- if (bytes > m_config.m_size)
- bytes = m_config.m_size;
+ if (bytes > m_size)
+ bytes = m_size;
- if (m_config.m_bits == 8)
+ if (m_bits == 8)
{
for (offs_t offs = 0; offs < bytes; offs++)
m_addrspace[0]->write_byte(offs, m_region->u8(offs));
@@ -332,7 +315,7 @@ void intelfsh_device::nvram_default()
}
// otherwise, default to 0xff
- for (offs_t offs = 0; offs < m_config.m_size; offs++)
+ for (offs_t offs = 0; offs < m_size; offs++)
m_addrspace[0]->write_byte(offs, 0xff);
}
@@ -344,9 +327,9 @@ void intelfsh_device::nvram_default()
void intelfsh_device::nvram_read(emu_file &file)
{
- UINT8 *buffer = global_alloc_array(UINT8, m_config.m_size);
- file.read(buffer, m_config.m_size);
- for (int byte = 0; byte < m_config.m_size; byte++)
+ UINT8 *buffer = global_alloc_array(UINT8, m_size);
+ file.read(buffer, m_size);
+ for (int byte = 0; byte < m_size; byte++)
m_addrspace[0]->write_byte(byte, buffer[byte]);
global_free(buffer);
}
@@ -359,10 +342,10 @@ void intelfsh_device::nvram_read(emu_file &file)
void intelfsh_device::nvram_write(emu_file &file)
{
- UINT8 *buffer = global_alloc_array(UINT8, m_config.m_size);
- for (int byte = 0; byte < m_config.m_size; byte++)
+ UINT8 *buffer = global_alloc_array(UINT8, m_size);
+ for (int byte = 0; byte < m_size; byte++)
buffer[byte] = m_addrspace[0]->read_byte(byte);
- file.write(buffer, m_config.m_size);
+ file.write(buffer, m_size);
global_free(buffer);
}
@@ -380,7 +363,7 @@ UINT32 intelfsh_device::read_full(UINT32 address)
{
default:
case FM_NORMAL:
- switch( m_config.m_bits )
+ switch( m_bits )
{
case 8:
{
@@ -398,13 +381,13 @@ UINT32 intelfsh_device::read_full(UINT32 address)
data = m_status;
break;
case FM_READAMDID3:
- if (m_config.m_maker_id == 0x04 && m_config.m_device_id == 0x35)
+ if (m_maker_id == 0x04 && m_device_id == 0x35)
{
//used in Fujitsu 29DL16X 8bits mode
switch (address)
{
- case 0: data = m_config.m_maker_id; break;
- case 2: data = m_config.m_device_id; break;
+ case 0: data = m_maker_id; break;
+ case 2: data = m_device_id; break;
case 4: data = 0; break;
}
}
@@ -412,8 +395,8 @@ UINT32 intelfsh_device::read_full(UINT32 address)
{
switch (address)
{
- case 0: data = m_config.m_maker_id; break;
- case 1: data = m_config.m_device_id; break;
+ case 0: data = m_maker_id; break;
+ case 1: data = m_device_id; break;
case 2: data = 0; break;
}
}
@@ -422,10 +405,10 @@ UINT32 intelfsh_device::read_full(UINT32 address)
switch (address)
{
case 0: // maker ID
- data = m_config.m_maker_id;
+ data = m_maker_id;
break;
case 1: // chip ID
- data = m_config.m_device_id;
+ data = m_device_id;
break;
case 2: // block lock config
data = 0; // we don't support this yet
@@ -446,7 +429,7 @@ UINT32 intelfsh_device::read_full(UINT32 address)
// reads outside of the erasing sector return normal data
if ((address < m_erase_sector) || (address >= m_erase_sector+(64*1024)))
{
- switch( m_config.m_bits )
+ switch( m_bits )
{
case 8:
{
@@ -600,7 +583,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
{
m_flash_mode = FM_NORMAL;
}
- else if( ( address & 0xffff ) == 0x5555 && ( data & 0xff ) == 0xb0 && m_config.m_maker_id == 0x62 && m_config.m_device_id == 0x13 )
+ else if( ( address & 0xffff ) == 0x5555 && ( data & 0xff ) == 0xb0 && m_maker_id == 0x62 && m_device_id == 0x13 )
{
m_flash_mode = FM_BANKSELECT;
}
@@ -647,13 +630,13 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
(( address & 0xfff ) == 0xaaa && ( data & 0xff ) == 0x10 ) )
{
// chip erase
- for (offs_t offs = 0; offs < m_config.m_size; offs++)
+ for (offs_t offs = 0; offs < m_size; offs++)
m_addrspace[0]->write_byte(offs, 0xff);
m_status = 1 << 3;
m_flash_mode = FM_ERASEAMD4;
- if (m_config.m_sector_is_4k)
+ if (m_sector_is_4k)
{
m_timer->adjust( attotime::from_seconds( 1 ) );
}
@@ -666,19 +649,19 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
{
// sector erase
// clear the 4k/64k block containing the current address to all 0xffs
- UINT32 base = address * ((m_config.m_bits == 16) ? 2 : 1);
- if (m_config.m_sector_is_4k)
+ UINT32 base = address * ((m_bits == 16) ? 2 : 1);
+ if (m_sector_is_4k)
{
for (offs_t offs = 0; offs < 4 * 1024; offs++)
m_addrspace[0]->write_byte((base & ~0xfff) + offs, 0xff);
- m_erase_sector = address & ((m_config.m_bits == 16) ? ~0x7ff : ~0xfff);
+ m_erase_sector = address & ((m_bits == 16) ? ~0x7ff : ~0xfff);
m_timer->adjust( attotime::from_msec( 125 ) );
}
else
{
for (offs_t offs = 0; offs < 64 * 1024; offs++)
m_addrspace[0]->write_byte((base & ~0xffff) + offs, 0xff);
- m_erase_sector = address & ((m_config.m_bits == 16) ? ~0x7fff : ~0xffff);
+ m_erase_sector = address & ((m_bits == 16) ? ~0x7fff : ~0xffff);
m_timer->adjust( attotime::from_seconds( 1 ) );
}
@@ -691,7 +674,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
}
break;
case FM_BYTEPROGRAM:
- switch( m_config.m_bits )
+ switch( m_bits )
{
case 8:
{
@@ -699,13 +682,13 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
}
break;
default:
- logerror( "FM_BYTEPROGRAM not supported when m_bits == %d\n", m_config.m_bits );
+ logerror( "FM_BYTEPROGRAM not supported when m_bits == %d\n", m_bits );
break;
}
m_flash_mode = FM_NORMAL;
break;
case FM_WRITEPART1:
- switch( m_config.m_bits )
+ switch( m_bits )
{
case 8:
{
@@ -718,7 +701,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
}
break;
default:
- logerror( "FM_WRITEPART1 not supported when m_bits == %d\n", m_config.m_bits );
+ logerror( "FM_WRITEPART1 not supported when m_bits == %d\n", m_bits );
break;
}
m_status = 0x80;
@@ -728,7 +711,7 @@ void intelfsh_device::write_full(UINT32 address, UINT32 data)
if( ( data & 0xff ) == 0xd0 )
{
// clear the 64k block containing the current address to all 0xffs
- UINT32 base = address * ((m_config.m_bits == 16) ? 2 : 1);
+ UINT32 base = address * ((m_bits == 16) ? 2 : 1);
for (offs_t offs = 0; offs < 64 * 1024; offs++)
m_addrspace[0]->write_byte((base & ~0xffff) + offs, 0xff);
diff --git a/src/emu/machine/intelfsh.h b/src/emu/machine/intelfsh.h
index d6faa63ffa4..9d68b9147f4 100644
--- a/src/emu/machine/intelfsh.h
+++ b/src/emu/machine/intelfsh.h
@@ -55,16 +55,13 @@
class intelfsh_device;
-// ======================> intelfsh_device_config
+// ======================> intelfsh_device
-class intelfsh_device_config : public device_config,
- public device_config_memory_interface,
- public device_config_nvram_interface
+class intelfsh_device : public device_t,
+ public device_memory_interface,
+ public device_nvram_interface
{
- friend class intelfsh_device;
-
-protected:
- // constants
+public:
enum
{
// 8-bit variants
@@ -84,41 +81,19 @@ protected:
FLASH_SHARP_UNK128MBIT
};
- // construction/destruction
- intelfsh_device_config(const machine_config &mconfig, device_type type, const char *name, const char *tag, const device_config *owner, UINT32 clock, UINT32 variant);
-
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
-
- // internal state
- address_space_config m_space_config;
- UINT32 m_type;
- INT32 m_size;
- UINT8 m_bits;
- UINT8 m_device_id;
- UINT8 m_maker_id;
- bool m_sector_is_4k;
-};
-
-
-// ======================> intelfsh_device
-
-class intelfsh_device : public device_t,
- public device_memory_interface,
- public device_nvram_interface
-{
- friend class intelfsh_device_config;
-
protected:
// construction/destruction
- intelfsh_device(running_machine &_machine, const intelfsh_device_config &config);
+ intelfsh_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
protected:
// device-level overrides
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
- // device_config_nvram_interface overrides
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
+ // device_nvram_interface overrides
virtual void nvram_default();
virtual void nvram_read(emu_file &file);
virtual void nvram_write(emu_file &file);
@@ -127,27 +102,22 @@ protected:
UINT32 read_full(UINT32 offset);
void write_full(UINT32 offset, UINT32 data);
- // internal state
- const intelfsh_device_config & m_config;
-
- UINT8 m_status;
- INT32 m_erase_sector;
- INT32 m_flash_mode;
- bool m_flash_master_lock;
- emu_timer * m_timer;
- INT32 m_bank;
-};
-
-
-// ======================> intelfsh8_device_config
-
-class intelfsh8_device_config : public intelfsh_device_config
-{
- friend class intelfsh8_device;
+ // configuration state
+ address_space_config m_space_config;
+ UINT32 m_type;
+ INT32 m_size;
+ UINT8 m_bits;
+ UINT8 m_device_id;
+ UINT8 m_maker_id;
+ bool m_sector_is_4k;
-protected:
- // construction/destruction
- intelfsh8_device_config(const machine_config &mconfig, device_type type, const char *name, const char *tag, const device_config *owner, UINT32 clock, UINT32 variant);
+ // internal state
+ UINT8 m_status;
+ INT32 m_erase_sector;
+ INT32 m_flash_mode;
+ bool m_flash_master_lock;
+ emu_timer * m_timer;
+ INT32 m_bank;
};
@@ -155,19 +125,9 @@ protected:
class intelfsh8_device : public intelfsh_device
{
- friend class intelfsh8_device_config;
- friend class intel_28f016s5_device_config;
- friend class fujitsu_29f016a_device_config;
- friend class fujitsu_29dl16x_device_config;
- friend class sharp_lh28f016s_device_config;
- friend class intel_e28f008sa_device_config;
- friend class macronix_29l001mc_device_config;
- friend class panasonic_mn63f805mnp_device_config;
- friend class sanyo_le26fv10n1ts_device_config;
-
protected:
// construction/destruction
- intelfsh8_device(running_machine &_machine, const intelfsh_device_config &config);
+ intelfsh8_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
public:
// public interface
@@ -179,31 +139,13 @@ public:
};
-// ======================> intelfsh16_device_config
-
-class intelfsh16_device_config : public intelfsh_device_config
-{
- friend class intelfsh16_device;
-
-protected:
- // construction/destruction
- intelfsh16_device_config(const machine_config &mconfig, device_type type, const char *name, const char *tag, const device_config *owner, UINT32 clock, UINT32 variant);
-};
-
-
// ======================> intelfsh16_device
class intelfsh16_device : public intelfsh_device
{
- friend class intelfsh16_device_config;
- friend class sharp_lh28f400_device_config;
- friend class intel_te28f160_device_config;
- friend class intel_e28f400_device_config;
- friend class sharp_unk128mbit_device_config;
-
protected:
// construction/destruction
- intelfsh16_device(running_machine &_machine, const intelfsh_device_config &config);
+ intelfsh16_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, UINT32 variant);
public:
// public interface
@@ -218,21 +160,73 @@ public:
// ======================> trivial variants
// 8-bit variants
-DECLARE_TRIVIAL_DERIVED_DEVICE(intel_28f016s5_device_config, intelfsh8_device_config, intel_28f016s5_device, intelfsh8_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(fujitsu_29f016a_device_config, intelfsh8_device_config, fujitsu_29f016a_device, intelfsh8_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(fujitsu_29dl16x_device_config, intelfsh8_device_config, fujitsu_29dl16x_device, intelfsh8_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(sharp_lh28f016s_device_config, intelfsh8_device_config, sharp_lh28f016s_device, intelfsh8_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(intel_e28f008sa_device_config, intelfsh8_device_config, intel_e28f008sa_device, intelfsh8_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(macronix_29l001mc_device_config, intelfsh8_device_config, macronix_29l001mc_device, intelfsh8_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(panasonic_mn63f805mnp_device_config, intelfsh8_device_config, panasonic_mn63f805mnp_device, intelfsh8_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(sanyo_le26fv10n1ts_device_config, intelfsh8_device_config, sanyo_le26fv10n1ts_device, intelfsh8_device)
+class intel_28f016s5_device : public intelfsh8_device
+{
+public:
+ intel_28f016s5_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class fujitsu_29f016a_device : public intelfsh8_device
+{
+public:
+ fujitsu_29f016a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class sharp_lh28f016s_device : public intelfsh8_device
+{
+public:
+ sharp_lh28f016s_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class intel_e28f008sa_device : public intelfsh8_device
+{
+public:
+ intel_e28f008sa_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class macronix_29l001mc_device : public intelfsh8_device
+{
+public:
+ macronix_29l001mc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class panasonic_mn63f805mnp_device : public intelfsh8_device
+{
+public:
+ panasonic_mn63f805mnp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class sanyo_le26fv10n1ts_device : public intelfsh8_device
+{
+public:
+ sanyo_le26fv10n1ts_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
// 16-bit variants
-DECLARE_TRIVIAL_DERIVED_DEVICE(sharp_lh28f400_device_config, intelfsh16_device_config, sharp_lh28f400_device, intelfsh16_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(intel_te28f160_device_config, intelfsh16_device_config, intel_te28f160_device, intelfsh16_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(intel_e28f400_device_config, intelfsh16_device_config, intel_e28f400_device, intelfsh16_device)
-DECLARE_TRIVIAL_DERIVED_DEVICE(sharp_unk128mbit_device_config, intelfsh16_device_config, sharp_unk128mbit_device, intelfsh16_device)
+class sharp_lh28f400_device : public intelfsh16_device
+{
+public:
+ sharp_lh28f400_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class intel_te28f160_device : public intelfsh16_device
+{
+public:
+ intel_te28f160_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class intel_e28f400_device : public intelfsh16_device
+{
+public:
+ intel_e28f400_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class sharp_unk128mbit_device : public intelfsh16_device
+{
+public:
+ sharp_unk128mbit_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
diff --git a/src/emu/machine/k033906.c b/src/emu/machine/k033906.c
index 99e20ed6aee..2e8aa7dac70 100644
--- a/src/emu/machine/k033906.c
+++ b/src/emu/machine/k033906.c
@@ -11,10 +11,21 @@
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(k033906, "Konami 033906")
+// device type definition
+const device_type K033906 = &device_creator<k033906_device>;
+
+//-------------------------------------------------
+// k033906_device - constructor
+//-------------------------------------------------
+
+k033906_device::k033906_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, K033906, "Konami 033906", tag, owner, clock)
+{
+
+}
//-------------------------------------------------
// device_config_complete - perform any
@@ -22,7 +33,7 @@ GENERIC_DEVICE_CONFIG_SETUP(k033906, "Konami 033906")
// complete
//-------------------------------------------------
-void k033906_device_config::device_config_complete()
+void k033906_device::device_config_complete()
{
// inherit a copy of the static data
const k033906_interface *intf = reinterpret_cast<const k033906_interface *>(static_config());
@@ -39,31 +50,13 @@ void k033906_device_config::device_config_complete()
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type K033906 = k033906_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// k033906_device - constructor
-//-------------------------------------------------
-
-k033906_device::k033906_device(running_machine &_machine, const k033906_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void k033906_device::device_start()
{
- m_voodoo = machine().device(m_config.m_voodoo_tag);
+ m_voodoo = machine().device(m_voodoo_tag);
m_reg = auto_alloc_array(machine(), UINT32, 256);
m_ram = auto_alloc_array(machine(), UINT32, 32768);
diff --git a/src/emu/machine/k033906.h b/src/emu/machine/k033906.h
index 43b6e127b0e..7a46d253539 100644
--- a/src/emu/machine/k033906.h
+++ b/src/emu/machine/k033906.h
@@ -36,38 +36,14 @@ struct k033906_interface
-// ======================> k033906_device_config
-
-class k033906_device_config : public device_config,
- public k033906_interface
-{
- friend class k033906_device;
-
- // construction/destruction
- k033906_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
-
// ======================> k033906_device
-class k033906_device : public device_t
+class k033906_device : public device_t,
+ public k033906_interface
{
- friend class k033906_device_config;
-
- // construction/destruction
- k033906_device(running_machine &_machine, const k033906_device_config &_config);
-
public:
+ // construction/destruction
+ k033906_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
UINT32 k033906_r(UINT32 offset);
void k033906_w(UINT32 offset, UINT32 data, UINT32 mem_mask);
@@ -75,6 +51,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset() { }
virtual void device_post_load() { }
@@ -92,8 +69,6 @@ private:
int m_reg_set; // 1 = access reg / 0 = access ram
device_t *m_voodoo;
-
- const k033906_device_config &m_config;
};
diff --git a/src/emu/machine/k056230.c b/src/emu/machine/k056230.c
index 979db7186fa..4a5ead590b0 100644
--- a/src/emu/machine/k056230.c
+++ b/src/emu/machine/k056230.c
@@ -10,10 +10,22 @@
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(k056230, "Konami 056230")
+// device type definition
+const device_type K056230 = &device_creator<k056230_device>;
+
+//-------------------------------------------------
+// k056230_device - constructor
+//-------------------------------------------------
+
+k056230_device::k056230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, K056230, "Konami 056230", tag, owner, clock)
+{
+
+}
+
//-------------------------------------------------
// device_config_complete - perform any
@@ -21,7 +33,7 @@ GENERIC_DEVICE_CONFIG_SETUP(k056230, "Konami 056230")
// complete
//-------------------------------------------------
-void k056230_device_config::device_config_complete()
+void k056230_device::device_config_complete()
{
// inherit a copy of the static data
const k056230_interface *intf = reinterpret_cast<const k056230_interface *>(static_config());
@@ -33,47 +45,27 @@ void k056230_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- m_cpu = NULL;
- m_is_thunderh = 0;
+ m_cpu_tag = NULL;
+ m_is_thunderh = false;
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-const device_type K0506230 = k056230_device_config::static_alloc_device_config;
-
-//-------------------------------------------------
-// k056230_device - constructor
-//-------------------------------------------------
-
-k056230_device::k056230_device(running_machine &_machine, const k056230_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-
-}
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void k056230_device::device_start()
{
- if(m_config.m_cpu)
+ if(m_cpu_tag)
{
- m_cpu = machine().device(m_config.m_cpu);
+ m_cpu = machine().device(m_cpu_tag);
}
else
{
m_cpu = NULL;
}
- m_is_thunderh = m_config.m_is_thunderh;
-
m_ram = auto_alloc_array(machine(), UINT32, 0x2000);
save_pointer(NAME(m_ram), 0x2000);
diff --git a/src/emu/machine/k056230.h b/src/emu/machine/k056230.h
index 81ee41ebc96..5d6d67ec103 100644
--- a/src/emu/machine/k056230.h
+++ b/src/emu/machine/k056230.h
@@ -18,7 +18,7 @@
***************************************************************************/
#define MCFG_K056230_ADD(_tag, _config) \
- MCFG_DEVICE_ADD(_tag, K0506230, 0) \
+ MCFG_DEVICE_ADD(_tag, K056230, 0) \
MCFG_DEVICE_CONFIG(_config)
@@ -31,44 +31,20 @@
struct k056230_interface
{
- const char *m_cpu;
- int m_is_thunderh;
-};
-
-
-
-// ======================> k056230_device_config
-
-class k056230_device_config : public device_config,
- public k056230_interface
-{
- friend class k056230_device;
-
- // construction/destruction
- k056230_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ const char *m_cpu_tag;
+ bool m_is_thunderh;
};
// ======================> k056230_device
-class k056230_device : public device_t
+class k056230_device : public device_t,
+ public k056230_interface
{
- friend class k056230_device_config;
-
- // construction/destruction
- k056230_device(running_machine &_machine, const k056230_device_config &_config);
-
public:
+ // construction/destruction
+ k056230_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
UINT32 lanc_ram_r(UINT32 offset);
void lanc_ram_w(UINT32 offset, UINT32 data, UINT32 mem_mask);
@@ -80,6 +56,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset() { }
virtual void device_post_load() { }
@@ -90,16 +67,12 @@ private:
void network_irq_clear();
UINT32 *m_ram;
- int m_is_thunderh;
-
device_t *m_cpu;
-
- const k056230_device_config &m_config;
};
// device type definition
-extern const device_type K0506230;
+extern const device_type K056230;
diff --git a/src/emu/machine/latch8.c b/src/emu/machine/latch8.c
index 5ec709f1597..1187a491900 100644
--- a/src/emu/machine/latch8.c
+++ b/src/emu/machine/latch8.c
@@ -187,7 +187,7 @@ static DEVICE_START( latch8 )
int i;
/* validate arguments */
- latch8->intf = (latch8_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ latch8->intf = (latch8_config *)downcast<const legacy_device_base *>(device)->inline_config();
latch8->value = 0x0;
diff --git a/src/emu/machine/ldcore.c b/src/emu/machine/ldcore.c
index 353fb68d130..759d7a94a11 100644
--- a/src/emu/machine/ldcore.c
+++ b/src/emu/machine/ldcore.c
@@ -1124,9 +1124,9 @@ static void configuration_save(running_machine &machine, int config_type, xml_da
return;
/* iterate over disc devices */
- for (device = machine.m_devicelist.first(LASERDISC); device != NULL; device = device->typenext())
+ for (device = machine.devicelist().first(LASERDISC); device != NULL; device = device->typenext())
{
- laserdisc_config *origconfig = (laserdisc_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ laserdisc_config *origconfig = (laserdisc_config *)downcast<const legacy_device_base *>(device)->inline_config();
laserdisc_state *ld = get_safe_token(device);
ldcore_data *ldcore = ld->core;
xml_data_node *overnode;
@@ -1214,7 +1214,7 @@ void laserdisc_overlay_enable(device_t *device, int enable)
SCREEN_UPDATE( laserdisc )
{
- device_t *laserdisc = screen->machine().m_devicelist.first(LASERDISC);
+ device_t *laserdisc = screen->machine().devicelist().first(LASERDISC);
if (laserdisc != NULL)
{
const rectangle &visarea = screen->visible_area();
@@ -1322,7 +1322,7 @@ void laserdisc_set_config(device_t *device, const laserdisc_config *config)
static void init_disc(device_t *device)
{
- const laserdisc_config *config = (const laserdisc_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ const laserdisc_config *config = (const laserdisc_config *)downcast<const legacy_device_base *>(device)->inline_config();
laserdisc_state *ld = get_safe_token(device);
ldcore_data *ldcore = ld->core;
chd_error err;
@@ -1473,7 +1473,7 @@ static void init_audio(device_t *device)
static DEVICE_START( laserdisc )
{
- const laserdisc_config *config = (const laserdisc_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ const laserdisc_config *config = (const laserdisc_config *)downcast<const legacy_device_base *>(device)->inline_config();
laserdisc_state *ld = get_safe_token(device);
ldcore_data *ldcore;
int statesize;
@@ -1616,12 +1616,12 @@ void laserdisc_set_type(device_t *device, int type)
device get info callback
-------------------------------------------------*/
-static const ldplayer_interface *get_interface(const device_config *devconfig)
+static const ldplayer_interface *get_interface(const device_t *device)
{
- if (devconfig == NULL)
+ if (device == NULL)
return NULL;
- const laserdisc_config *config = (const laserdisc_config *)downcast<const legacy_device_config_base *>(devconfig)->inline_config();
+ const laserdisc_config *config = (const laserdisc_config *)downcast<const legacy_device_base *>(device)->inline_config();
if (config == NULL)
return NULL;
diff --git a/src/emu/machine/mb3773.c b/src/emu/machine/mb3773.c
index e6e1eac96d7..925def0a33f 100644
--- a/src/emu/machine/mb3773.c
+++ b/src/emu/machine/mb3773.c
@@ -15,58 +15,29 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type MB3773 = mb3773_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// mb3773_device_config - constructor
-//-------------------------------------------------
-
-mb3773_device_config::mb3773_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock )
- : device_config(mconfig, static_alloc_device_config, "MB3773", tag, owner, clock)
-{
-}
-
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *mb3773_device_config::static_alloc_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock )
-{
- return global_alloc( mb3773_device_config( mconfig, tag, owner, clock ) );
-}
-
-
+// device type definition
+const device_type MB3773 = &device_creator<mb3773_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// mb3773_device - constructor
//-------------------------------------------------
-device_t *mb3773_device_config::alloc_device( running_machine &machine ) const
+mb3773_device::mb3773_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock )
+ : device_t(mconfig, MB3773, "MB3773", tag, owner, clock)
{
- return auto_alloc( machine, mb3773_device( machine, *this ) );
}
-
//-------------------------------------------------
// device_config_complete - perform any
// operations now that the configuration is
// complete
//-------------------------------------------------
-void mb3773_device_config::device_config_complete()
+void mb3773_device::device_config_complete()
{
}
@@ -76,29 +47,12 @@ void mb3773_device_config::device_config_complete()
// on this device
//-------------------------------------------------
-bool mb3773_device_config::device_validity_check( emu_options &options, const game_driver &driver ) const
+bool mb3773_device::device_validity_check( emu_options &options, const game_driver &driver ) const
{
return false;
}
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// mb3773_device - constructor
-//-------------------------------------------------
-
-mb3773_device::mb3773_device( running_machine &_machine, const mb3773_device_config &config ) :
- device_t( _machine, config ),
- m_config( config )
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
diff --git a/src/emu/machine/mb3773.h b/src/emu/machine/mb3773.h
index 80dbb855645..24874b3f534 100644
--- a/src/emu/machine/mb3773.h
+++ b/src/emu/machine/mb3773.h
@@ -20,44 +20,22 @@
MCFG_DEVICE_ADD(_tag, MB3773, 0)
-// ======================> mb3773_device_config
-
-class mb3773_device_config :
- public device_config
-{
- friend class mb3773_device;
-
- // construction/destruction
- mb3773_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock );
-
-public:
- // allocators
- static device_config *static_alloc_device_config( const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock );
- virtual device_t *alloc_device( running_machine &machine ) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
- virtual bool device_validity_check( emu_options &options, const game_driver &driver ) const;
-};
-
-
// ======================> mb3773_device
class mb3773_device :
public device_t
{
- friend class mb3773_device_config;
-
+public:
// construction/destruction
- mb3773_device( running_machine &_machine, const mb3773_device_config &config );
+ mb3773_device( const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock );
-public:
// I/O operations
void set_ck( int state );
protected:
// device-level overrides
+ virtual void device_config_complete();
+ virtual bool device_validity_check( emu_options &options, const game_driver &driver ) const;
virtual void device_start();
virtual void device_reset();
@@ -66,7 +44,6 @@ protected:
void reset_timer();
// internal state
- const mb3773_device_config &m_config;
emu_timer *m_watchdog_timer;
int m_ck;
};
diff --git a/src/emu/machine/mb87078.c b/src/emu/machine/mb87078.c
index c487e751ae8..26cd8680ac0 100644
--- a/src/emu/machine/mb87078.c
+++ b/src/emu/machine/mb87078.c
@@ -123,7 +123,7 @@ INLINE const mb87078_interface *get_interface( device_t *device )
{
assert(device != NULL);
assert((device->type() == MB87078));
- return (const mb87078_interface *) device->baseconfig().static_config();
+ return (const mb87078_interface *) device->static_config();
}
/*****************************************************************************
diff --git a/src/emu/machine/mc146818.c b/src/emu/machine/mc146818.c
index 3120cca44f0..9b8fa827cc9 100644
--- a/src/emu/machine/mc146818.c
+++ b/src/emu/machine/mc146818.c
@@ -101,48 +101,26 @@
//**************************************************************************
-// DEVICE DEFINITIONS
+// LIVE DEVICE
//**************************************************************************
-const device_type MC146818 = mc146818_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
+// device type definition
+const device_type MC146818 = &device_creator<mc146818_device>;
//-------------------------------------------------
-// mc146818_device_config - constructor
-//-------------------------------------------------
-
-mc146818_device_config::mc146818_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "NVRAM", tag, owner, clock),
- device_config_rtc_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this),
- m_type(MC146818_STANDARD)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *mc146818_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(mc146818_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
+// mc146818_device - constructor
//-------------------------------------------------
-device_t *mc146818_device_config::alloc_device(running_machine &machine) const
+mc146818_device::mc146818_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MC146818, "NVRAM", tag, owner, clock),
+ device_rtc_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
+ m_type(MC146818_STANDARD),
+ m_index(0),
+ m_eindex(0),
+ m_updated(false),
+ m_last_refresh(attotime::zero)
{
- return auto_alloc(machine, mc146818_device(machine, *this));
}
@@ -151,31 +129,9 @@ device_t *mc146818_device_config::alloc_device(running_machine &machine) const
// to set the interface
//-------------------------------------------------
-void mc146818_device_config::static_set_type(device_config *device, mc146818_type type)
-{
- downcast<mc146818_device_config *>(device)->m_type = type;
-}
-
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// mc146818_device - constructor
-//-------------------------------------------------
-
-mc146818_device::mc146818_device(running_machine &_machine, const mc146818_device_config &config)
- : device_t(_machine, config),
- device_rtc_interface(_machine, config, *this),
- device_nvram_interface(_machine, config, *this),
- m_config(config),
- m_index(0),
- m_eindex(0),
- m_updated(false),
- m_last_refresh(attotime::zero)
+void mc146818_device::static_set_type(device_t &device, mc146818_type type)
{
+ downcast<mc146818_device &>(device).m_type = type;
}
@@ -187,7 +143,7 @@ void mc146818_device::device_start()
{
m_last_refresh = machine().time();
emu_timer *timer = timer_alloc();
- if (m_config.m_type == mc146818_device_config::MC146818_UTC) {
+ if (m_type == MC146818_UTC) {
// hack: for apollo we increase the update frequency to stay in sync with real time
timer->adjust(attotime::from_hz(2), 0, attotime::from_hz(2));
} else {
@@ -205,7 +161,7 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
{
int year/*, month*/;
- if (m_config.m_type == mc146818_device_config::MC146818_UTC) {
+ if (m_type == MC146818_UTC) {
// hack: set correct real time even for overloaded emulation
// (at least for apollo)
static osd_ticks_t t0 = 0;
@@ -247,7 +203,7 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
DAY=bcd_adjust(DAY+1);
//month=bcd_2_dec(MONTH);
year=bcd_2_dec(YEAR);
- if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY) year+=bcd_2_dec(CENTURY)*100;
+ if (m_type!=MC146818_IGNORE_CENTURY) year+=bcd_2_dec(CENTURY)*100;
else year+=2000; // save for julian_days_in_month calculation
DAY=bcd_adjust(DAY+1);
if (DAY>gregorian_days_in_month(MONTH, year))
@@ -258,7 +214,7 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
{
MONTH=1;
YEAR=year=bcd_adjust(YEAR+1);
- if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY)
+ if (m_type!=MC146818_IGNORE_CENTURY)
{
if (year>=0x100)
{
@@ -286,14 +242,14 @@ void mc146818_device::device_timer(emu_timer &timer, device_timer_id id, int par
m_data[4]=0;
WEEK_DAY=(WEEK_DAY+1)%7;
year=YEAR;
- if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY) year+=CENTURY*100;
+ if (m_type!=MC146818_IGNORE_CENTURY) year+=CENTURY*100;
else year+=2000; // save for julian_days_in_month calculation
if (++DAY>gregorian_days_in_month(MONTH, year)) {
DAY=1;
if (++MONTH>12) {
MONTH=1;
YEAR++;
- if (m_config.m_type!=mc146818_device_config::MC146818_IGNORE_CENTURY) {
+ if (m_type!=MC146818_IGNORE_CENTURY) {
if (YEAR>=100) { CENTURY++;YEAR=0; }
} else {
YEAR%=100;
@@ -407,7 +363,7 @@ void mc146818_device::set_base_datetime()
machine().base_datetime(systime);
- current_time = m_config.m_type == mc146818_device_config::MC146818_UTC ? systime.utc_time: systime.local_time;
+ current_time = m_type == MC146818_UTC ? systime.utc_time: systime.local_time;
// temporary hack to go back 20 year (e.g. from 2010 -> 1990)
// current_time.year -= 20;
@@ -421,7 +377,7 @@ void mc146818_device::set_base_datetime()
else
m_data[4] = dec_2_local(current_time.hour - 12) | 0x80;
- if (m_config.m_type != mc146818_device_config::MC146818_IGNORE_CENTURY)
+ if (m_type != MC146818_IGNORE_CENTURY)
CENTURY = dec_2_local(current_time.year /100);
m_data[0] = dec_2_local(current_time.second);
diff --git a/src/emu/machine/mc146818.h b/src/emu/machine/mc146818.h
index da35b90ecc4..d7d09ebf7ad 100644
--- a/src/emu/machine/mc146818.h
+++ b/src/emu/machine/mc146818.h
@@ -21,7 +21,7 @@
#define MCFG_MC146818_ADD(_tag, _type) \
MCFG_DEVICE_ADD(_tag, MC146818, 0) \
- mc146818_device_config::static_set_type(device, mc146818_device_config::_type); \
+ mc146818_device::static_set_type(*device, mc146818_device::_type); \
@@ -29,20 +29,12 @@
// TYPE DEFINITIONS
//**************************************************************************
-class mc146818_device;
-
-
-// ======================> mc146818_device_config
+// ======================> mc146818_device
-class mc146818_device_config : public device_config,
- public device_config_rtc_interface,
- public device_config_nvram_interface
+class mc146818_device : public device_t,
+ public device_rtc_interface,
+ public device_nvram_interface
{
- friend class mc146818_device;
-
- // construction/destruction
- mc146818_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
public:
// values
enum mc146818_type
@@ -53,31 +45,12 @@ public:
MC146818_UTC
};
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
+ // construction/destruction
+ mc146818_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// inline configuration helpers
- static void static_set_type(device_config *device, mc146818_type type);
+ static void static_set_type(device_t &device, mc146818_type type);
-protected:
- // internal state
- mc146818_type m_type;
-};
-
-
-// ======================> mc146818_device
-
-class mc146818_device : public device_t,
- public device_rtc_interface,
- public device_nvram_interface
-{
- friend class mc146818_device_config;
-
- // construction/destruction
- mc146818_device(running_machine &_machine, const mc146818_device_config &config);
-
-public:
// read/write access
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -103,7 +76,7 @@ protected:
// internal state
static const int MC146818_DATA_SIZE = 0x80;
- const mc146818_device_config & m_config;
+ mc146818_type m_type;
UINT8 m_index;
UINT8 m_data[MC146818_DATA_SIZE];
diff --git a/src/emu/machine/mc6852.c b/src/emu/machine/mc6852.c
index db2c7ce697b..735865630f9 100644
--- a/src/emu/machine/mc6852.c
+++ b/src/emu/machine/mc6852.c
@@ -27,6 +27,9 @@
#include "machine/devhelpr.h"
+// device type definition
+const device_type MC6852 = &device_creator<mc6852_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -81,19 +84,31 @@
//**************************************************************************
-// GLOBAL VARIABLES
+// INLINE HELPERS
//**************************************************************************
-// devices
-const device_type MC6852 = mc6852_device_config::static_alloc_device_config;
+inline void mc6852_device::receive()
+{
+}
+
+inline void mc6852_device::transmit()
+{
+}
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-GENERIC_DEVICE_CONFIG_SETUP(mc6852, "MC6852")
+//-------------------------------------------------
+// mc6852_device - constructor
+//-------------------------------------------------
+
+mc6852_device::mc6852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MC6852, "MC6852", tag, owner, clock)
+{
+}
//-------------------------------------------------
@@ -102,7 +117,7 @@ GENERIC_DEVICE_CONFIG_SETUP(mc6852, "MC6852")
// complete
//-------------------------------------------------
-void mc6852_device_config::device_config_complete()
+void mc6852_device::device_config_complete()
{
// inherit a copy of the static data
const mc6852_interface *intf = reinterpret_cast<const mc6852_interface *>(static_config());
@@ -112,47 +127,17 @@ void mc6852_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_in_rx_data_func, 0, sizeof(m_in_rx_data_func));
- memset(&m_out_tx_data_func, 0, sizeof(m_out_tx_data_func));
- memset(&m_out_irq_func, 0, sizeof(m_out_irq_func));
- memset(&m_in_cts_func, 0, sizeof(m_in_cts_func));
- memset(&m_in_dcd_func, 0, sizeof(m_in_dcd_func));
- memset(&m_out_sm_dtr_func, 0, sizeof(m_out_sm_dtr_func));
- memset(&m_out_tuf_func, 0, sizeof(m_out_tuf_func));
+ memset(&m_in_rx_data_cb, 0, sizeof(m_in_rx_data_cb));
+ memset(&m_out_tx_data_cb, 0, sizeof(m_out_tx_data_cb));
+ memset(&m_out_irq_cb, 0, sizeof(m_out_irq_cb));
+ memset(&m_in_cts_cb, 0, sizeof(m_in_cts_cb));
+ memset(&m_in_dcd_cb, 0, sizeof(m_in_dcd_cb));
+ memset(&m_out_sm_dtr_cb, 0, sizeof(m_out_sm_dtr_cb));
+ memset(&m_out_tuf_cb, 0, sizeof(m_out_tuf_cb));
}
}
-
-//**************************************************************************
-// INLINE HELPERS
-//**************************************************************************
-
-inline void mc6852_device::receive()
-{
-}
-
-inline void mc6852_device::transmit()
-{
-}
-
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// mc6852_device - constructor
-//-------------------------------------------------
-
-mc6852_device::mc6852_device(running_machine &_machine, const mc6852_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -160,24 +145,24 @@ mc6852_device::mc6852_device(running_machine &_machine, const mc6852_device_conf
void mc6852_device::device_start()
{
// resolve callbacks
- devcb_resolve_read_line(&m_in_rx_data_func, &m_config.m_in_rx_data_func, this);
- devcb_resolve_write_line(&m_out_tx_data_func, &m_config.m_out_tx_data_func, this);
- devcb_resolve_write_line(&m_out_irq_func, &m_config.m_out_irq_func, this);
- devcb_resolve_read_line(&m_in_cts_func, &m_config.m_in_cts_func, this);
- devcb_resolve_read_line(&m_in_dcd_func, &m_config.m_in_dcd_func, this);
- devcb_resolve_write_line(&m_out_sm_dtr_func, &m_config.m_out_sm_dtr_func, this);
- devcb_resolve_write_line(&m_out_tuf_func, &m_config.m_out_tuf_func, this);
-
- if (m_config.m_rx_clock > 0)
+ devcb_resolve_read_line(&m_in_rx_data_func, &m_in_rx_data_cb, this);
+ devcb_resolve_write_line(&m_out_tx_data_func, &m_out_tx_data_cb, this);
+ devcb_resolve_write_line(&m_out_irq_func, &m_out_irq_cb, this);
+ devcb_resolve_read_line(&m_in_cts_func, &m_in_cts_cb, this);
+ devcb_resolve_read_line(&m_in_dcd_func, &m_in_dcd_cb, this);
+ devcb_resolve_write_line(&m_out_sm_dtr_func, &m_out_sm_dtr_cb, this);
+ devcb_resolve_write_line(&m_out_tuf_func, &m_out_tuf_cb, this);
+
+ if (m_rx_clock > 0)
{
m_rx_timer = timer_alloc(TIMER_RX);
- m_rx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_rx_clock));
+ m_rx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rx_clock));
}
- if (m_config.m_tx_clock > 0)
+ if (m_tx_clock > 0)
{
m_tx_timer = timer_alloc(TIMER_TX);
- m_tx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_tx_clock));
+ m_tx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_tx_clock));
}
// register for state saving
diff --git a/src/emu/machine/mc6852.h b/src/emu/machine/mc6852.h
index 7385402c75d..c0c6090d624 100644
--- a/src/emu/machine/mc6852.h
+++ b/src/emu/machine/mc6852.h
@@ -55,51 +55,27 @@ struct mc6852_interface
UINT32 m_rx_clock;
UINT32 m_tx_clock;
- devcb_read_line m_in_rx_data_func;
- devcb_write_line m_out_tx_data_func;
+ devcb_read_line m_in_rx_data_cb;
+ devcb_write_line m_out_tx_data_cb;
- devcb_write_line m_out_irq_func;
+ devcb_write_line m_out_irq_cb;
- devcb_read_line m_in_cts_func;
- devcb_read_line m_in_dcd_func;
- devcb_write_line m_out_sm_dtr_func;
- devcb_write_line m_out_tuf_func;
+ devcb_read_line m_in_cts_cb;
+ devcb_read_line m_in_dcd_cb;
+ devcb_write_line m_out_sm_dtr_cb;
+ devcb_write_line m_out_tuf_cb;
};
-
-// ======================> mc6852_device_config
-
-class mc6852_device_config : public device_config,
- public mc6852_interface
-{
- friend class mc6852_device;
-
- // construction/destruction
- mc6852_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
-
// ======================> mc6852_device
-class mc6852_device : public device_t
+class mc6852_device : public device_t,
+ public mc6852_interface
{
- friend class mc6852_device_config;
-
+public:
// construction/destruction
- mc6852_device(running_machine &_machine, const mc6852_device_config &_config);
+ mc6852_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -113,6 +89,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int m_param, void *ptr);
@@ -151,8 +128,6 @@ private:
// timers
emu_timer *m_rx_timer;
emu_timer *m_tx_timer;
-
- const mc6852_device_config &m_config;
};
diff --git a/src/emu/machine/mc68901.c b/src/emu/machine/mc68901.c
index cc3bc818c1b..65553a18185 100644
--- a/src/emu/machine/mc68901.c
+++ b/src/emu/machine/mc68901.c
@@ -46,6 +46,9 @@
#include "machine/devhelpr.h"
+// device type definition
+const device_type MC68901 = &device_creator<mc68901_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -261,44 +264,6 @@ static const int PRESCALER[] = { 0, 4, 10, 16, 50, 64, 100, 200 };
//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-// devices
-const device_type MC68901 = mc68901_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(mc68901, "Motorola MC68901")
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void mc68901_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const mc68901_interface *intf = reinterpret_cast<const mc68901_interface *>(static_config());
- if (intf != NULL)
- *static_cast<mc68901_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
-// memset(&in_pa_func, 0, sizeof(in_pa_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -771,34 +736,51 @@ inline void mc68901_device::gpio_input(int bit, int state)
// mc68901_device - constructor
//-------------------------------------------------
-mc68901_device::mc68901_device(running_machine &_machine, const mc68901_device_config &config)
- : device_t(_machine, config),
+mc68901_device::mc68901_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MC68901, "Motorola MC68901", tag, owner, clock),
m_gpip(0),
- m_tsr(TSR_BUFFER_EMPTY),
- m_config(config)
+ m_tsr(TSR_BUFFER_EMPTY)
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void mc68901_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const mc68901_interface *intf = reinterpret_cast<const mc68901_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<mc68901_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+// memset(&in_pa_cb, 0, sizeof(in_pa_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void mc68901_device::device_start()
{
/* resolve callbacks */
- devcb_resolve_read8(&m_in_gpio_func, &m_config.in_gpio_func, this);
- devcb_resolve_write8(&m_out_gpio_func, &m_config.out_gpio_func, this);
- devcb_resolve_read_line(&m_in_si_func, &m_config.in_si_func, this);
- devcb_resolve_write_line(&m_out_so_func, &m_config.out_so_func, this);
- devcb_resolve_write_line(&m_out_tao_func, &m_config.out_tao_func, this);
- devcb_resolve_write_line(&m_out_tbo_func, &m_config.out_tbo_func, this);
- devcb_resolve_write_line(&m_out_tco_func, &m_config.out_tco_func, this);
- devcb_resolve_write_line(&m_out_tdo_func, &m_config.out_tdo_func, this);
- devcb_resolve_write_line(&m_out_irq_func, &m_config.out_irq_func, this);
-
- /* set initial values */
- m_timer_clock = m_config.timer_clock;
+ devcb_resolve_read8(&m_in_gpio_func, &m_in_gpio_cb, this);
+ devcb_resolve_write8(&m_out_gpio_func, &m_out_gpio_cb, this);
+ devcb_resolve_read_line(&m_in_si_func, &m_in_si_cb, this);
+ devcb_resolve_write_line(&m_out_so_func, &m_out_so_cb, this);
+ devcb_resolve_write_line(&m_out_tao_func, &m_out_tao_cb, this);
+ devcb_resolve_write_line(&m_out_tbo_func, &m_out_tbo_cb, this);
+ devcb_resolve_write_line(&m_out_tco_func, &m_out_tco_cb, this);
+ devcb_resolve_write_line(&m_out_tdo_func, &m_out_tdo_cb, this);
+ devcb_resolve_write_line(&m_out_irq_func, &m_out_irq_cb, this);
/* create the timers */
m_timer[TIMER_A] = timer_alloc(TIMER_A);
@@ -806,16 +788,16 @@ void mc68901_device::device_start()
m_timer[TIMER_C] = timer_alloc(TIMER_C);
m_timer[TIMER_D] = timer_alloc(TIMER_D);
- if (m_config.rx_clock > 0)
+ if (m_rx_clock > 0)
{
m_rx_timer = timer_alloc(TIMER_RX);
- m_rx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.rx_clock));
+ m_rx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rx_clock));
}
- if (m_config.tx_clock > 0)
+ if (m_tx_clock > 0)
{
m_tx_timer = timer_alloc(TIMER_TX);
- m_tx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.tx_clock));
+ m_tx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_tx_clock));
}
/* register for state saving */
diff --git a/src/emu/machine/mc68901.h b/src/emu/machine/mc68901.h
index 7990d31f9d3..5bfaf4cb2e7 100644
--- a/src/emu/machine/mc68901.h
+++ b/src/emu/machine/mc68901.h
@@ -71,60 +71,37 @@
struct mc68901_interface
{
- int timer_clock; /* timer clock */
- int rx_clock; /* serial receive clock */
- int tx_clock; /* serial transmit clock */
+ int m_timer_clock; /* timer clock */
+ int m_rx_clock; /* serial receive clock */
+ int m_tx_clock; /* serial transmit clock */
- devcb_write_line out_irq_func;
+ devcb_write_line m_out_irq_cb;
- devcb_read8 in_gpio_func;
- devcb_write8 out_gpio_func;
+ devcb_read8 m_in_gpio_cb;
+ devcb_write8 m_out_gpio_cb;
- devcb_write_line out_tao_func;
- devcb_write_line out_tbo_func;
- devcb_write_line out_tco_func;
- devcb_write_line out_tdo_func;
+ devcb_write_line m_out_tao_cb;
+ devcb_write_line m_out_tbo_cb;
+ devcb_write_line m_out_tco_cb;
+ devcb_write_line m_out_tdo_cb;
- devcb_read_line in_si_func;
- devcb_write_line out_so_func;
- devcb_write_line out_rr_func;
- devcb_write_line out_tr_func;
-};
-
-
-
-// ======================> mc68901_device_config
-
-class mc68901_device_config : public device_config,
- public mc68901_interface
-{
- friend class mc68901_device;
-
- // construction/destruction
- mc68901_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read_line m_in_si_cb;
+ devcb_write_line m_out_so_cb;
+ devcb_write_line m_out_rr_cb;
+ devcb_write_line m_out_tr_cb;
};
// ======================> mc68901_device
-class mc68901_device : public device_t
+class mc68901_device : public device_t,
+ public mc68901_interface
{
- friend class mc68901_device_config;
-
+public:
// construction/destruction
- mc68901_device(running_machine &_machine, const mc68901_device_config &_config);
+ mc68901_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -147,6 +124,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -188,7 +166,6 @@ private:
devcb_resolved_write_line m_out_irq_func;
int m_device_type; /* device type */
- int m_timer_clock; /* timer clock */
/* registers */
UINT8 m_gpip; /* general purpose I/O register */
@@ -244,8 +221,6 @@ private:
emu_timer *m_timer[4]; /* counter timers */
emu_timer *m_rx_timer; /* receive timer */
emu_timer *m_tx_timer; /* transmit timer */
-
- const mc68901_device_config &m_config;
};
diff --git a/src/emu/machine/mm74c922.c b/src/emu/machine/mm74c922.c
index a2c6424dd78..1aab9cc43ce 100644
--- a/src/emu/machine/mm74c922.c
+++ b/src/emu/machine/mm74c922.c
@@ -24,54 +24,8 @@
// DEVICE DEFINITIONS
//**************************************************************************
-const device_type MM74C922 = mm74c922_device_config::static_alloc_device_config;
-const device_type MM74C923 = mm74c922_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(mm74c922, "MM74C922")
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void mm74c922_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const mm74c922_interface *intf = reinterpret_cast<const mm74c922_interface *>(static_config());
- if (intf != NULL)
- *static_cast<mm74c922_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_out_da_func, 0, sizeof(m_out_da_func));
- memset(&m_in_x1_func, 0, sizeof(m_in_x1_func));
- memset(&m_in_x2_func, 0, sizeof(m_in_x2_func));
- memset(&m_in_x3_func, 0, sizeof(m_in_x3_func));
- memset(&m_in_x4_func, 0, sizeof(m_in_x4_func));
- memset(&m_in_x5_func, 0, sizeof(m_in_x5_func));
- }
-}
-
-
-//-------------------------------------------------
-// static_set_config - configuration helper
-//-------------------------------------------------
-
-void mm74c922_device_config::static_set_config(device_config *device, int max_y)
-{
- mm74c922_device_config *mm74c922 = downcast<mm74c922_device_config *>(device);
-
- mm74c922->m_max_y = max_y;
-}
+const device_type MM74C922 = &device_creator<mm74c922_device>;
+const device_type MM74C923 = &device_creator<mm74c922_device>;
@@ -134,7 +88,7 @@ inline void mm74c922_device::detect_keypress()
{
UINT8 data = devcb_call_read8(&m_in_x_func[m_x], 0);
- for (int y = 0; y < m_config.m_max_y; y++)
+ for (int y = 0; y < m_max_y; y++)
{
if (!BIT(data, y))
{
@@ -161,13 +115,50 @@ inline void mm74c922_device::detect_keypress()
// mm74c922_device - constructor
//-------------------------------------------------
-mm74c922_device::mm74c922_device(running_machine &_machine, const mm74c922_device_config &config)
- : device_t(_machine, config),
+mm74c922_device::mm74c922_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MM74C922, "MM74C922", tag, owner, clock),
m_x(0),
m_y(0),
- m_next_da(0),
- m_config(config)
+ m_next_da(0)
+{
+}
+
+
+//-------------------------------------------------
+// static_set_config - configuration helper
+//-------------------------------------------------
+
+void mm74c922_device::static_set_config(device_t &device, int max_y)
{
+ mm74c922_device &mm74c922 = downcast<mm74c922_device &>(device);
+
+ mm74c922.m_max_y = max_y;
+}
+
+
+//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void mm74c922_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const mm74c922_interface *intf = reinterpret_cast<const mm74c922_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<mm74c922_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_out_da_cb, 0, sizeof(m_out_da_cb));
+ memset(&m_in_x1_cb, 0, sizeof(m_in_x1_cb));
+ memset(&m_in_x2_cb, 0, sizeof(m_in_x2_cb));
+ memset(&m_in_x3_cb, 0, sizeof(m_in_x3_cb));
+ memset(&m_in_x4_cb, 0, sizeof(m_in_x4_cb));
+ memset(&m_in_x5_cb, 0, sizeof(m_in_x5_cb));
+ }
}
@@ -178,12 +169,12 @@ mm74c922_device::mm74c922_device(running_machine &_machine, const mm74c922_devic
void mm74c922_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_da_func, &m_config.m_out_da_func, this);
- devcb_resolve_read8(&m_in_x_func[0], &m_config.m_in_x1_func, this);
- devcb_resolve_read8(&m_in_x_func[1], &m_config.m_in_x2_func, this);
- devcb_resolve_read8(&m_in_x_func[2], &m_config.m_in_x3_func, this);
- devcb_resolve_read8(&m_in_x_func[3], &m_config.m_in_x4_func, this);
- devcb_resolve_read8(&m_in_x_func[4], &m_config.m_in_x5_func, this);
+ devcb_resolve_write_line(&m_out_da_func, &m_out_da_cb, this);
+ devcb_resolve_read8(&m_in_x_func[0], &m_in_x1_cb, this);
+ devcb_resolve_read8(&m_in_x_func[1], &m_in_x2_cb, this);
+ devcb_resolve_read8(&m_in_x_func[2], &m_in_x3_cb, this);
+ devcb_resolve_read8(&m_in_x_func[3], &m_in_x4_cb, this);
+ devcb_resolve_read8(&m_in_x_func[4], &m_in_x5_cb, this);
// set initial values
change_output_lines();
diff --git a/src/emu/machine/mm74c922.h b/src/emu/machine/mm74c922.h
index 94746d846a3..a51b85b1152 100644
--- a/src/emu/machine/mm74c922.h
+++ b/src/emu/machine/mm74c922.h
@@ -47,13 +47,13 @@
#define MCFG_MM74C922_ADD(_tag, _config) \
MCFG_DEVICE_ADD(_tag, MM74C922, 0) \
MCFG_DEVICE_CONFIG(_config) \
- mm74c922_device_config::static_set_config(device, 4);
+ mm74c922_device::static_set_config(*device, 4);
#define MCFG_MM74C923_ADD(_tag, _config) \
MCFG_DEVICE_ADD(_tag, MM74C923, 0) \
MCFG_DEVICE_CONFIG(_config) \
- mm74c922_device_config::static_set_config(device, 5);
+ mm74c922_device::static_set_config(*device, 5);
#define MM74C922_INTERFACE(name) \
@@ -76,57 +76,33 @@ struct mm74c922_interface
double m_cap_osc;
double m_cap_debounce;
- devcb_write_line m_out_da_func;
+ devcb_write_line m_out_da_cb;
- devcb_read8 m_in_x1_func;
- devcb_read8 m_in_x2_func;
- devcb_read8 m_in_x3_func;
- devcb_read8 m_in_x4_func;
- devcb_read8 m_in_x5_func;
+ devcb_read8 m_in_x1_cb;
+ devcb_read8 m_in_x2_cb;
+ devcb_read8 m_in_x3_cb;
+ devcb_read8 m_in_x4_cb;
+ devcb_read8 m_in_x5_cb;
};
-// ======================> mm74c922_device_config
+// ======================> mm74c922_device
-class mm74c922_device_config : public device_config,
- public mm74c922_interface
+class mm74c922_device : public device_t,
+ public mm74c922_interface
{
- friend class mm74c922_device;
-
- // construction/destruction
- mm74c922_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
+ // construction/destruction
+ mm74c922_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// inline configuration helpers
- static void static_set_config(device_config *device, int max_y);
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-
-private:
- int m_max_y;
-};
+ static void static_set_config(device_t &device, int max_y);
-
-// ======================> mm74c922_device
-
-class mm74c922_device : public device_t
-{
- friend class mm74c922_device_config;
-
- // construction/destruction
- mm74c922_device(running_machine &_machine, const mm74c922_device_config &_config);
-
-public:
UINT8 data_out_r();
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -135,6 +111,8 @@ private:
inline void clock_scan_counters();
inline void detect_keypress();
+ int m_max_y;
+
devcb_resolved_write_line m_out_da_func;
devcb_resolved_read8 m_in_x_func[5];
@@ -149,8 +127,6 @@ private:
// timers
emu_timer *m_scan_timer; // keyboard scan timer
-
- const mm74c922_device_config &m_config;
};
diff --git a/src/emu/machine/mos6529.c b/src/emu/machine/mos6529.c
index 452012584fb..874495bcf6f 100644
--- a/src/emu/machine/mos6529.c
+++ b/src/emu/machine/mos6529.c
@@ -21,20 +21,20 @@
//**************************************************************************
-// GLOBAL VARIABLES
+// LIVE DEVICE
//**************************************************************************
-// devices
-const device_type MOS6529 = mos6529_device_config::static_alloc_device_config;
-
-
+// device type definition
+const device_type MOS6529 = &device_creator<mos6529_device>;
+//-------------------------------------------------
+// mos6529_device - constructor
+//-------------------------------------------------
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(mos6529, "MOS6529")
+mos6529_device::mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MOS6529, "MOS6529", tag, owner, clock)
+{
+}
//-------------------------------------------------
@@ -43,7 +43,7 @@ GENERIC_DEVICE_CONFIG_SETUP(mos6529, "MOS6529")
// complete
//-------------------------------------------------
-void mos6529_device_config::device_config_complete()
+void mos6529_device::device_config_complete()
{
// inherit a copy of the static data
const mos6529_interface *intf = reinterpret_cast<const mos6529_interface *>(static_config());
@@ -53,28 +53,12 @@ void mos6529_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_in_p_func, 0, sizeof(m_in_p_func));
- memset(&m_out_p_func, 0, sizeof(m_out_p_func));
+ memset(&m_in_p_cb, 0, sizeof(m_in_p_cb));
+ memset(&m_out_p_cb, 0, sizeof(m_out_p_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// mos6529_device - constructor
-//-------------------------------------------------
-
-mos6529_device::mos6529_device(running_machine &_machine, const mos6529_device_config &config)
- : device_t(_machine, config),
- m_config(config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -82,8 +66,8 @@ mos6529_device::mos6529_device(running_machine &_machine, const mos6529_device_c
void mos6529_device::device_start()
{
// resolve callbacks
- devcb_resolve_read8(&m_in_p_func, &m_config.m_in_p_func, this);
- devcb_resolve_write8(&m_out_p_func, &m_config.m_out_p_func, this);
+ devcb_resolve_read8(&m_in_p_func, &m_in_p_cb, this);
+ devcb_resolve_write8(&m_out_p_func, &m_out_p_cb, this);
}
diff --git a/src/emu/machine/mos6529.h b/src/emu/machine/mos6529.h
index b4545a1eb7f..f9ad7a5ad26 100644
--- a/src/emu/machine/mos6529.h
+++ b/src/emu/machine/mos6529.h
@@ -50,54 +50,31 @@
struct mos6529_interface
{
- devcb_read8 m_in_p_func;
- devcb_write8 m_out_p_func;
-};
-
-
-// ======================> mos6529_device_config
-
-class mos6529_device_config : public device_config,
- public mos6529_interface
-{
- friend class mos6529_device;
-
- // construction/destruction
- mos6529_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_p_cb;
+ devcb_write8 m_out_p_cb;
};
// ======================> mos6529_device
-class mos6529_device : public device_t
+class mos6529_device : public device_t,
+ public mos6529_interface
{
- friend class mos6529_device_config;
-
+public:
// construction/destruction
- mos6529_device(running_machine &_machine, const mos6529_device_config &_config);
+ mos6529_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
private:
devcb_resolved_read8 m_in_p_func;
devcb_resolved_write8 m_out_p_func;
-
- const mos6529_device_config &m_config;
};
diff --git a/src/emu/machine/msm5832.c b/src/emu/machine/msm5832.c
index 9a0af084775..7f8eb374a39 100644
--- a/src/emu/machine/msm5832.c
+++ b/src/emu/machine/msm5832.c
@@ -22,6 +22,9 @@
#include "msm5832.h"
+// device type definition
+const device_type MSM5832 = &device_creator<msm5832_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -56,51 +59,6 @@ static const int DAYS_PER_MONTH[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-// devices
-const device_type MSM5832 = msm5832_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// msm5832_device_config - constructor
-//-------------------------------------------------
-
-msm5832_device_config::msm5832_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "MSM5832", tag, owner, clock),
- device_config_rtc_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *msm5832_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(msm5832_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *msm5832_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, msm5832_device(machine, *this));
-}
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -214,15 +172,14 @@ inline void msm5832_device::advance_minutes()
// msm5832_device - constructor
//-------------------------------------------------
-msm5832_device::msm5832_device(running_machine &_machine, const msm5832_device_config &config)
- : device_t(_machine, config),
- device_rtc_interface(_machine, config, *this),
+msm5832_device::msm5832_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MSM5832, "MSM5832", tag, owner, clock),
+ device_rtc_interface(mconfig, *this),
m_hold(0),
m_address(0),
m_read(0),
m_write(0),
- m_cs(0),
- m_config(config)
+ m_cs(0)
{
for (int i = 0; i < 13; i++)
m_reg[i] = 0;
diff --git a/src/emu/machine/msm5832.h b/src/emu/machine/msm5832.h
index 9a220af11cc..a93c2589ffc 100644
--- a/src/emu/machine/msm5832.h
+++ b/src/emu/machine/msm5832.h
@@ -41,35 +41,15 @@
// TYPE DEFINITIONS
//**************************************************************************
-// ======================> msm5832_device_config
-
-class msm5832_device_config : public device_config,
- public device_config_rtc_interface
-{
- friend class msm5832_device;
-
- // construction/destruction
- msm5832_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-};
-
-
-
// ======================> msm5832_device
class msm5832_device : public device_t,
public device_rtc_interface
{
- friend class msm5832_device_config;
-
+public:
// construction/destruction
- msm5832_device(running_machine &_machine, const msm5832_device_config &_config);
+ msm5832_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( data_r );
DECLARE_WRITE8_MEMBER( data_w );
@@ -111,8 +91,6 @@ private:
// timers
emu_timer *m_clock_timer;
-
- const msm5832_device_config &m_config;
};
diff --git a/src/emu/machine/msm58321.c b/src/emu/machine/msm58321.c
index 28f324c1002..22866d345d5 100644
--- a/src/emu/machine/msm58321.c
+++ b/src/emu/machine/msm58321.c
@@ -23,6 +23,9 @@
#include "msm58321.h"
+// device type definition
+const device_type MSM58321 = &device_creator<msm58321_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -59,72 +62,6 @@ static const int DAYS_PER_MONTH[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31,
//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-// devices
-const device_type MSM58321 = msm58321_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// msm58321_device_config - constructor
-//-------------------------------------------------
-
-msm58321_device_config::msm58321_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "MSM58321", tag, owner, clock),
- device_config_rtc_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *msm58321_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(msm58321_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *msm58321_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, msm58321_device(machine, *this));
-}
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void msm58321_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const msm58321_interface *intf = reinterpret_cast<const msm58321_interface *>(static_config());
- if (intf != NULL)
- *static_cast<msm58321_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_out_busy_func, 0, sizeof(m_out_busy_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -238,10 +175,9 @@ inline void msm58321_device::advance_minutes()
// msm58321_device - constructor
//-------------------------------------------------
-msm58321_device::msm58321_device(running_machine &_machine, const msm58321_device_config &config)
- : device_t(_machine, config),
- device_rtc_interface(_machine, config, *this),
- m_config(config)
+msm58321_device::msm58321_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, MSM58321, "MSM58321", tag, owner, clock),
+ device_rtc_interface(mconfig, *this)
{
for (int i = 0; i < 13; i++)
m_reg[i] = 0;
@@ -249,13 +185,34 @@ msm58321_device::msm58321_device(running_machine &_machine, const msm58321_devic
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void msm58321_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const msm58321_interface *intf = reinterpret_cast<const msm58321_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<msm58321_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_out_busy_cb, 0, sizeof(m_out_busy_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void msm58321_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_busy_func, &m_config.m_out_busy_func, this);
+ devcb_resolve_write_line(&m_out_busy_func, &m_out_busy_cb, this);
// allocate timers
m_clock_timer = timer_alloc(TIMER_CLOCK);
diff --git a/src/emu/machine/msm58321.h b/src/emu/machine/msm58321.h
index dce7eedc7e5..a2e55f00ea7 100644
--- a/src/emu/machine/msm58321.h
+++ b/src/emu/machine/msm58321.h
@@ -48,30 +48,7 @@
struct msm58321_interface
{
- devcb_write_line m_out_busy_func;
-};
-
-
-
-// ======================> msm58321_device_config
-
-class msm58321_device_config : public device_config,
- public msm58321_interface,
- public device_config_rtc_interface
-{
- friend class msm58321_device;
-
- // construction/destruction
- msm58321_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_out_busy_cb;
};
@@ -79,14 +56,13 @@ protected:
// ======================> msm58321_device
class msm58321_device : public device_t,
- public device_rtc_interface
+ public device_rtc_interface,
+ public msm58321_interface
{
- friend class msm58321_device_config;
-
+public:
// construction/destruction
- msm58321_device(running_machine &_machine, const msm58321_device_config &_config);
+ msm58321_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -101,6 +77,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -133,8 +110,6 @@ private:
// timers
emu_timer *m_clock_timer;
emu_timer *m_busy_timer;
-
- const msm58321_device_config &m_config;
};
diff --git a/src/emu/machine/nmc9306.c b/src/emu/machine/nmc9306.c
index 7fef8bd7eaa..627f282bd93 100644
--- a/src/emu/machine/nmc9306.c
+++ b/src/emu/machine/nmc9306.c
@@ -54,54 +54,12 @@ enum
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type NMC9306 = nmc9306_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// nmc9306_device_config - constructor
-//-------------------------------------------------
-
-nmc9306_device_config::nmc9306_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "NMC9306", tag, owner, clock),
- device_config_nvram_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *nmc9306_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(nmc9306_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *nmc9306_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, nmc9306_device(machine, *this));
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
+// device type definition
+const device_type NMC9306 = &device_creator<nmc9306_device>;
+
//-------------------------------------------------
// nmc9306_device - constructor
//-------------------------------------------------
@@ -147,12 +105,11 @@ inline void nmc9306_device::erase(offs_t offset)
// nmc9306_device - constructor
//-------------------------------------------------
-nmc9306_device::nmc9306_device(running_machine &_machine, const nmc9306_device_config &config)
- : device_t(_machine, config),
- device_nvram_interface(_machine, config, *this),
+nmc9306_device::nmc9306_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, NMC9306, "NMC9306", tag, owner, clock),
+ device_nvram_interface(mconfig, *this),
m_state(STATE_IDLE),
- m_ewen(false),
- m_config(config)
+ m_ewen(false)
{
}
diff --git a/src/emu/machine/nmc9306.h b/src/emu/machine/nmc9306.h
index 366738b9a5e..6658775d56e 100644
--- a/src/emu/machine/nmc9306.h
+++ b/src/emu/machine/nmc9306.h
@@ -44,36 +44,15 @@
//**************************************************************************
-// ======================> nmc9306_device_config
-
-class nmc9306_device_config : public device_config,
- public device_config_nvram_interface
-{
- friend class nmc9306_device;
-
- // construction/destruction
- nmc9306_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
-};
-
-
// ======================> nmc9306_device
class nmc9306_device : public device_t,
public device_nvram_interface
{
- friend class nmc9306_device_config;
-
+public:
// construction/destruction
- nmc9306_device(running_machine &_machine, const nmc9306_device_config &_config);
+ nmc9306_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_WRITE_LINE_MEMBER( cs_w );
DECLARE_WRITE_LINE_MEMBER( sk_w );
DECLARE_WRITE_LINE_MEMBER( di_w );
@@ -105,8 +84,6 @@ private:
int m_sk;
int m_do;
int m_di;
-
- const nmc9306_device_config &m_config;
};
@@ -114,5 +91,4 @@ private:
extern const device_type NMC9306;
-
#endif
diff --git a/src/emu/machine/nvram.c b/src/emu/machine/nvram.c
index 7671f316fb7..76f088e4ea4 100644
--- a/src/emu/machine/nvram.c
+++ b/src/emu/machine/nvram.c
@@ -43,47 +43,23 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type NVRAM = nvram_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// nvram_device_config - constructor
-//-------------------------------------------------
-
-nvram_device_config::nvram_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "NVRAM", tag, owner, clock),
- device_config_nvram_interface(mconfig, *this),
- m_default_value(DEFAULT_ALL_1)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *nvram_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(nvram_device_config(mconfig, tag, owner, clock));
-}
-
+// device type definition
+const device_type NVRAM = &device_creator<nvram_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// nvram_device - constructor
//-------------------------------------------------
-device_t *nvram_device_config::alloc_device(running_machine &machine) const
+nvram_device::nvram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, NVRAM, "NVRAM", tag, owner, clock),
+ device_nvram_interface(mconfig, *this),
+ m_default_value(DEFAULT_ALL_1),
+ m_base(NULL),
+ m_length(0)
{
- return auto_alloc(machine, nvram_device(machine, *this));
}
@@ -92,10 +68,10 @@ device_t *nvram_device_config::alloc_device(running_machine &machine) const
// to set the interface
//-------------------------------------------------
-void nvram_device_config::static_set_default_value(device_config *device, default_value value)
+void nvram_device::static_set_default_value(device_t &device, default_value value)
{
- nvram_device_config *nvram = downcast<nvram_device_config *>(device);
- nvram->m_default_value = value;
+ nvram_device &nvram = downcast<nvram_device &>(device);
+ nvram.m_default_value = value;
}
@@ -104,30 +80,11 @@ void nvram_device_config::static_set_default_value(device_config *device, defaul
// helper to set a custom callback
//-------------------------------------------------
-void nvram_device_config::static_set_custom_handler(device_config *device, nvram_init_delegate handler)
-{
- nvram_device_config *nvram = downcast<nvram_device_config *>(device);
- nvram->m_default_value = DEFAULT_CUSTOM;
- nvram->m_custom_handler = handler;
-}
-
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// nvram_device - constructor
-//-------------------------------------------------
-
-nvram_device::nvram_device(running_machine &_machine, const nvram_device_config &config)
- : device_t(_machine, config),
- device_nvram_interface(_machine, config, *this),
- m_config(config),
- m_base(NULL),
- m_length(0)
+void nvram_device::static_set_custom_handler(device_t &device, nvram_init_delegate handler)
{
+ nvram_device &nvram = downcast<nvram_device &>(device);
+ nvram.m_default_value = DEFAULT_CUSTOM;
+ nvram.m_custom_handler = handler;
}
@@ -138,8 +95,8 @@ nvram_device::nvram_device(running_machine &_machine, const nvram_device_config
void nvram_device::device_start()
{
// bind our handler
- if (!m_config.m_custom_handler.isnull())
- m_custom_handler = nvram_init_delegate(m_config.m_custom_handler, m_owner);
+ if (!m_custom_handler.isnull())
+ m_custom_handler = nvram_init_delegate(m_custom_handler, m_owner);
}
@@ -161,21 +118,21 @@ void nvram_device::nvram_default()
}
// default values for other cases
- switch (m_config.m_default_value)
+ switch (m_default_value)
{
// all-0's
- case nvram_device_config::DEFAULT_ALL_0:
+ case DEFAULT_ALL_0:
memset(m_base, 0, m_length);
break;
// all 1's
default:
- case nvram_device_config::DEFAULT_ALL_1:
+ case DEFAULT_ALL_1:
memset(m_base, 0xff, m_length);
break;
// random values
- case nvram_device_config::DEFAULT_RANDOM:
+ case DEFAULT_RANDOM:
{
UINT8 *nvram = reinterpret_cast<UINT8 *>(m_base);
for (int index = 0; index < m_length; index++)
@@ -184,12 +141,12 @@ void nvram_device::nvram_default()
}
// custom handler
- case nvram_device_config::DEFAULT_CUSTOM:
+ case DEFAULT_CUSTOM:
m_custom_handler(*this, m_base, m_length);
break;
// none - do nothing
- case nvram_device_config::DEFAULT_NONE:
+ case DEFAULT_NONE:
break;
}
}
diff --git a/src/emu/machine/nvram.h b/src/emu/machine/nvram.h
index 736a6bbac19..06906161ecc 100644
--- a/src/emu/machine/nvram.h
+++ b/src/emu/machine/nvram.h
@@ -50,40 +50,40 @@
#define MCFG_NVRAM_ADD_0FILL(_tag) \
MCFG_DEVICE_ADD(_tag, NVRAM, 0) \
- nvram_device_config::static_set_default_value(device, nvram_device_config::DEFAULT_ALL_0); \
+ nvram_device::static_set_default_value(*device, nvram_device::DEFAULT_ALL_0); \
#define MCFG_NVRAM_ADD_1FILL(_tag) \
MCFG_DEVICE_ADD(_tag, NVRAM, 0) \
- nvram_device_config::static_set_default_value(device, nvram_device_config::DEFAULT_ALL_1); \
+ nvram_device::static_set_default_value(*device, nvram_device::DEFAULT_ALL_1); \
#define MCFG_NVRAM_ADD_RANDOM_FILL(_tag) \
MCFG_DEVICE_ADD(_tag, NVRAM, 0) \
- nvram_device_config::static_set_default_value(device, nvram_device_config::DEFAULT_RANDOM); \
+ nvram_device::static_set_default_value(*device, nvram_device::DEFAULT_RANDOM); \
#define MCFG_NVRAM_ADD_NO_FILL(_tag) \
MCFG_DEVICE_ADD(_tag, NVRAM, 0) \
- nvram_device_config::static_set_default_value(device, nvram_device_config::DEFAULT_NONE); \
+ nvram_device::static_set_default_value(*device, nvram_device::DEFAULT_NONE); \
#define MCFG_NVRAM_ADD_CUSTOM(_tag, _class, _method) \
MCFG_DEVICE_ADD(_tag, NVRAM, 0) \
- nvram_device_config::static_set_custom_handler(device, nvram_init_delegate(&_class::_method, #_class "::" #_method, (_class *)0)); \
+ nvram_device::static_set_custom_handler(*device, nvram_init_delegate(&_class::_method, #_class "::" #_method, (_class *)0)); \
#define MCFG_NVRAM_REPLACE_0FILL(_tag) \
MCFG_DEVICE_REPLACE(_tag, NVRAM, 0) \
- nvram_device_config::static_set_default_value(device, nvram_device_config::DEFAULT_ALL_0); \
+ nvram_device::static_set_default_value(*device, nvram_device::DEFAULT_ALL_0); \
#define MCFG_NVRAM_REPLACE_1FILL(_tag) \
MCFG_DEVICE_REPLACE(_tag, NVRAM, 0) \
- nvram_device_config::static_set_default_value(device, nvram_device_config::DEFAULT_ALL_1); \
+ nvram_device::static_set_default_value(*device, nvram_device::DEFAULT_ALL_1); \
#define MCFG_NVRAM_REPLACE_RANDOM_FILL(_tag) \
MCFG_DEVICE_REPLACE(_tag, NVRAM, 0) \
- nvram_device_config::static_set_default_value(device, nvram_device_config::DEFAULT_RANDOM); \
+ nvram_device::static_set_default_value(*device, nvram_device::DEFAULT_RANDOM); \
#define MCFG_NVRAM_REPLACE_CUSTOM(_tag, _class, _method) \
MCFG_DEVICE_REPLACE(_tag, NVRAM, 0) \
- nvram_device_config::static_set_custom_handler(device, nvram_init_delegate(&_class::_method, #_class "::" #_method, (_class *)0)); \
+ nvram_device::static_set_custom_handler(*device, nvram_init_delegate(&_class::_method, #_class "::" #_method, (_class *)0)); \
@@ -98,16 +98,11 @@ class nvram_device;
typedef delegate<void (nvram_device &, void *, size_t)> nvram_init_delegate;
-// ======================> nvram_device_config
+// ======================> nvram_device
-class nvram_device_config : public device_config,
- public device_config_nvram_interface
+class nvram_device : public device_t,
+ public device_nvram_interface
{
- friend class nvram_device;
-
- // construction/destruction
- nvram_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
public:
// values
enum default_value
@@ -119,32 +114,13 @@ public:
DEFAULT_NONE
};
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
+ // construction/destruction
+ nvram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// inline configuration helpers
- static void static_set_default_value(device_config *device, default_value value);
- static void static_set_custom_handler(device_config *device, nvram_init_delegate callback);
-
-protected:
- // internal state
- default_value m_default_value;
- nvram_init_delegate m_custom_handler;
-};
-
+ static void static_set_default_value(device_t &device, default_value value);
+ static void static_set_custom_handler(device_t &device, nvram_init_delegate callback);
-// ======================> nvram_device
-
-class nvram_device : public device_t,
- public device_nvram_interface
-{
- friend class nvram_device_config;
-
- // construction/destruction
- nvram_device(running_machine &_machine, const nvram_device_config &config);
-
-public:
// controls
void set_base(void *base, size_t length) { m_base = base; m_length = length; }
@@ -160,11 +136,13 @@ protected:
// internal helpers
void determine_final_base();
- // internal state
- const nvram_device_config & m_config;
+ // configuration state
+ default_value m_default_value;
+ nvram_init_delegate m_custom_handler;
+
+ // runtime state
void * m_base;
size_t m_length;
- nvram_init_delegate m_custom_handler;
};
diff --git a/src/emu/machine/pci.c b/src/emu/machine/pci.c
index 650c87fb789..8d1e09cc67e 100644
--- a/src/emu/machine/pci.c
+++ b/src/emu/machine/pci.c
@@ -234,7 +234,7 @@ int pci_add_sibling( running_machine &machine, char *pcitag, char *sibling )
return 0;
if (pcibus1->siblings_count == 8)
return 0;
- config2 = (pci_bus_config *)downcast<const legacy_device_config_base &>(device2->baseconfig()).inline_config();
+ config2 = (pci_bus_config *)downcast<const legacy_device_base *>(device2)->inline_config();
pcibus1->siblings[pcibus1->siblings_count] = get_safe_token(device2);
pcibus1->siblings_busnum[pcibus1->siblings_count] = config2->busnum;
pcibus1->siblings_count++;
@@ -269,11 +269,11 @@ static DEVICE_START( pci_bus )
/* validate some basic stuff */
assert(device != NULL);
- assert(device->baseconfig().static_config() == NULL);
- assert(downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config() != NULL);
+ assert(device->static_config() == NULL);
+ assert(downcast<const legacy_device_base *>(device)->inline_config() != NULL);
/* store a pointer back to the device */
- pcibus->config = (const pci_bus_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ pcibus->config = (const pci_bus_config *)downcast<const legacy_device_base *>(device)->inline_config();
pcibus->busdevice = device;
pcibus->devicenum = -1;
diff --git a/src/emu/machine/pci.h b/src/emu/machine/pci.h
index c61fcb709ba..5a2dcb64e6e 100644
--- a/src/emu/machine/pci.h
+++ b/src/emu/machine/pci.h
@@ -71,5 +71,3 @@ int pci_add_sibling( running_machine &machine, char *pcitag, char *sibling );
DECLARE_LEGACY_DEVICE(PCI_BUS, pci_bus);
#endif /* PCI_H */
-
-
diff --git a/src/emu/machine/pic8259.c b/src/emu/machine/pic8259.c
index a7972c7e00c..8e9af6ed2dc 100644
--- a/src/emu/machine/pic8259.c
+++ b/src/emu/machine/pic8259.c
@@ -413,7 +413,7 @@ WRITE8_DEVICE_HANDLER( pic8259_w )
static DEVICE_START( pic8259 )
{
pic8259_t *pic8259 = get_safe_token(device);
- const struct pic8259_interface *intf = (const struct pic8259_interface *)device->baseconfig().static_config();
+ const struct pic8259_interface *intf = (const struct pic8259_interface *)device->static_config();
assert(intf != NULL);
diff --git a/src/emu/machine/pit8253.c b/src/emu/machine/pit8253.c
index 1781aae3a44..bd760971d17 100644
--- a/src/emu/machine/pit8253.c
+++ b/src/emu/machine/pit8253.c
@@ -1071,7 +1071,7 @@ static void common_start( device_t *device, int device_type ) {
pit8253_t *pit8253 = get_safe_token(device);
int timerno;
- pit8253->config = (const struct pit8253_config *)device->baseconfig().static_config();
+ pit8253->config = (const struct pit8253_config *)device->static_config();
pit8253->device_type = device_type;
/* register for state saving */
diff --git a/src/emu/machine/ram.c b/src/emu/machine/ram.c
index dee4fa83c4e..7e7aa69196c 100644
--- a/src/emu/machine/ram.c
+++ b/src/emu/machine/ram.c
@@ -95,7 +95,7 @@ UINT32 ram_parse_string(const char *s)
static DEVICE_START( ram )
{
ram_state *ram = get_safe_token(device);
- ram_config *config = (ram_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ ram_config *config = (ram_config *)downcast<const legacy_device_base *>(device)->inline_config();
/* the device named 'ram' can get ram options from command line */
if (strcmp(device->tag(), RAM_TAG) == 0)
@@ -123,7 +123,7 @@ static DEVICE_START( ram )
static DEVICE_VALIDITY_CHECK( ram )
{
- ram_config *config = (ram_config *)downcast<const legacy_device_config_base *>(device)->inline_config();
+ ram_config *config = (ram_config *)downcast<const legacy_device_base *>(device)->inline_config();
const char *ramsize_string = NULL;
int is_valid = FALSE;
UINT32 specified_ram = 0;
diff --git a/src/emu/machine/rp5c01.c b/src/emu/machine/rp5c01.c
index ff1f047dc5e..6ac11223606 100644
--- a/src/emu/machine/rp5c01.c
+++ b/src/emu/machine/rp5c01.c
@@ -20,6 +20,9 @@
#include "rp5c01.h"
+// device type definition
+const device_type RP5C01 = &device_creator<rp5c01_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -97,74 +100,6 @@ enum
//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-// devices
-const device_type RP5C01 = rp5c01_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// rp5c01_device_config - constructor
-//-------------------------------------------------
-
-rp5c01_device_config::rp5c01_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "RP5C01", tag, owner, clock),
- device_config_rtc_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *rp5c01_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(rp5c01_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *rp5c01_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, rp5c01_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void rp5c01_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const rp5c01_interface *intf = reinterpret_cast<const rp5c01_interface *>(static_config());
- if (intf != NULL)
- *static_cast<rp5c01_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_out_alarm_func, 0, sizeof(m_out_alarm_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -342,27 +277,47 @@ inline void rp5c01_device::check_alarm()
// rp5c01_device - constructor
//-------------------------------------------------
-rp5c01_device::rp5c01_device(running_machine &_machine, const rp5c01_device_config &config)
- : device_t(_machine, config),
- device_rtc_interface(_machine, config, *this),
- device_nvram_interface(_machine, config, *this),
+rp5c01_device::rp5c01_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, RP5C01, "RP5C01", tag, owner, clock),
+ device_rtc_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
m_alarm(1),
m_alarm_on(1),
m_1hz(1),
- m_16hz(1),
- m_config(config)
+ m_16hz(1)
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void rp5c01_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const rp5c01_interface *intf = reinterpret_cast<const rp5c01_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<rp5c01_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_out_alarm_cb, 0, sizeof(m_out_alarm_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void rp5c01_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_alarm_func, &m_config.m_out_alarm_func, this);
+ devcb_resolve_write_line(&m_out_alarm_func, &m_out_alarm_cb, this);
// allocate timers
m_clock_timer = timer_alloc(TIMER_CLOCK);
diff --git a/src/emu/machine/rp5c01.h b/src/emu/machine/rp5c01.h
index c5ef20c8050..c91a35c45b4 100644
--- a/src/emu/machine/rp5c01.h
+++ b/src/emu/machine/rp5c01.h
@@ -50,31 +50,7 @@
struct rp5c01_interface
{
- devcb_write_line m_out_alarm_func;
-};
-
-
-
-// ======================> rp5c01_device_config
-
-class rp5c01_device_config : public device_config,
- public rp5c01_interface,
- public device_config_rtc_interface,
- public device_config_nvram_interface
-{
- friend class rp5c01_device;
-
- // construction/destruction
- rp5c01_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_out_alarm_cb;
};
@@ -83,20 +59,20 @@ protected:
class rp5c01_device : public device_t,
public device_rtc_interface,
- public device_nvram_interface
+ public device_nvram_interface,
+ public rp5c01_interface
{
- friend class rp5c01_device_config;
-
+public:
// construction/destruction
- rp5c01_device(running_machine &_machine, const rp5c01_device_config &_config);
+ rp5c01_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
DECLARE_WRITE_LINE_MEMBER( adj_w );
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -136,8 +112,6 @@ private:
// timers
emu_timer *m_clock_timer;
emu_timer *m_16hz_timer;
-
- const rp5c01_device_config &m_config;
};
diff --git a/src/emu/machine/rp5c15.c b/src/emu/machine/rp5c15.c
index 3da17c9c6be..714a7149da0 100644
--- a/src/emu/machine/rp5c15.c
+++ b/src/emu/machine/rp5c15.c
@@ -110,66 +110,7 @@ enum
//**************************************************************************
// devices
-const device_type RP5C15 = rp5c15_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// rp5c15_device_config - constructor
-//-------------------------------------------------
-
-rp5c15_device_config::rp5c15_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "RP5C15", tag, owner, clock),
- device_config_rtc_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *rp5c15_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(rp5c15_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *rp5c15_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, rp5c15_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void rp5c15_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const rp5c15_interface *intf = reinterpret_cast<const rp5c15_interface *>(static_config());
- if (intf != NULL)
- *static_cast<rp5c15_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_out_alarm_func, 0, sizeof(m_out_alarm_func));
- memset(&m_out_clkout_func, 0, sizeof(m_out_clkout_func));
- }
-}
+const device_type RP5C15 = &device_creator<rp5c15_device>;
@@ -351,28 +292,49 @@ inline void rp5c15_device::check_alarm()
// rp5c15_device - constructor
//-------------------------------------------------
-rp5c15_device::rp5c15_device(running_machine &_machine, const rp5c15_device_config &config)
- : device_t(_machine, config),
- device_rtc_interface(_machine, config, *this),
+rp5c15_device::rp5c15_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, RP5C15, "RP5C15", tag, owner, clock),
+ device_rtc_interface(mconfig, *this),
m_alarm(1),
m_alarm_on(1),
m_1hz(1),
m_16hz(1),
- m_clkout(1),
- m_config(config)
+ m_clkout(1)
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void rp5c15_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const rp5c15_interface *intf = reinterpret_cast<const rp5c15_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<rp5c15_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_out_alarm_cb, 0, sizeof(m_out_alarm_cb));
+ memset(&m_out_clkout_cb, 0, sizeof(m_out_clkout_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void rp5c15_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_alarm_func, &m_config.m_out_alarm_func, this);
- devcb_resolve_write_line(&m_out_clkout_func, &m_config.m_out_clkout_func, this);
+ devcb_resolve_write_line(&m_out_alarm_func, &m_out_alarm_cb, this);
+ devcb_resolve_write_line(&m_out_clkout_func, &m_out_clkout_cb, this);
// allocate timers
m_clock_timer = timer_alloc(TIMER_CLOCK);
diff --git a/src/emu/machine/rp5c15.h b/src/emu/machine/rp5c15.h
index 0deebc55401..9a2191d6316 100644
--- a/src/emu/machine/rp5c15.h
+++ b/src/emu/machine/rp5c15.h
@@ -50,31 +50,8 @@
struct rp5c15_interface
{
- devcb_write_line m_out_alarm_func;
- devcb_write_line m_out_clkout_func;
-};
-
-
-
-// ======================> rp5c15_device_config
-
-class rp5c15_device_config : public device_config,
- public rp5c15_interface,
- public device_config_rtc_interface
-{
- friend class rp5c15_device;
-
- // construction/destruction
- rp5c15_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_out_alarm_cb;
+ devcb_write_line m_out_clkout_cb;
};
@@ -82,20 +59,20 @@ protected:
// ======================> rp5c15_device
class rp5c15_device : public device_t,
- public device_rtc_interface
+ public device_rtc_interface,
+ public rp5c15_interface
{
- friend class rp5c15_device_config;
-
+public:
// construction/destruction
- rp5c15_device(running_machine &_machine, const rp5c15_device_config &_config);
+ rp5c15_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
DECLARE_WRITE_LINE_MEMBER( adj_w );
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -134,8 +111,6 @@ private:
emu_timer *m_clock_timer;
emu_timer *m_16hz_timer;
emu_timer *m_clkout_timer;
-
- const rp5c15_device_config &m_config;
};
diff --git a/src/emu/machine/rp5h01.c b/src/emu/machine/rp5h01.c
index 51b024e8664..115b040d812 100644
--- a/src/emu/machine/rp5h01.c
+++ b/src/emu/machine/rp5h01.c
@@ -173,7 +173,7 @@ static DEVICE_START( rp5h01 )
{
rp5h01_state *rp5h01 = get_safe_token(device);
- assert(device->baseconfig().static_config() == NULL);
+ assert(device->static_config() == NULL);
rp5h01->data = *device->region();
diff --git a/src/emu/machine/rtc65271.c b/src/emu/machine/rtc65271.c
index 502826c90e9..5208579ea65 100644
--- a/src/emu/machine/rtc65271.c
+++ b/src/emu/machine/rtc65271.c
@@ -685,7 +685,7 @@ static TIMER_CALLBACK( rtc_end_update_callback )
static DEVICE_START( rtc65271 )
{
- rtc65271_config *config = (rtc65271_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ rtc65271_config *config = (rtc65271_config *)downcast<const legacy_device_base *>(device)->inline_config();
rtc65271_state *state = get_safe_token(device);
state->update_timer = device->machine().scheduler().timer_alloc(FUNC(rtc_begin_update_callback), (void *)device);
diff --git a/src/emu/machine/s3c24xx.c b/src/emu/machine/s3c24xx.c
index fcd4ac80a95..77218904352 100644
--- a/src/emu/machine/s3c24xx.c
+++ b/src/emu/machine/s3c24xx.c
@@ -3167,7 +3167,7 @@ static DEVICE_RESET( s3c24xx )
static DEVICE_START( s3c24xx )
{
s3c24xx_t *s3c24xx = get_token( device);
- s3c24xx->iface = (const s3c24xx_interface *)device->baseconfig().static_config();
+ s3c24xx->iface = (const s3c24xx_interface *)device->static_config();
for (int i = 0; i < 5; i++) s3c24xx->pwm.timer[i] = device->machine().scheduler().timer_alloc( FUNC(s3c24xx_pwm_timer_exp), (void*)device);
for (int i = 0; i < 4; i++) s3c24xx->dma[i].timer = device->machine().scheduler().timer_alloc( FUNC(s3c24xx_dma_timer_exp), (void*)device);
s3c24xx->iic.timer = device->machine().scheduler().timer_alloc( FUNC(s3c24xx_iic_timer_exp), (void*)device);
diff --git a/src/emu/machine/secflash.c b/src/emu/machine/secflash.c
index ee2b1c56bad..ffa07f15634 100644
--- a/src/emu/machine/secflash.c
+++ b/src/emu/machine/secflash.c
@@ -1,17 +1,12 @@
#include "emu.h"
#include "machine/secflash.h"
-device_secure_serial_flash_config::device_secure_serial_flash_config(const machine_config &mconfig,
+device_secure_serial_flash::device_secure_serial_flash(const machine_config &mconfig,
device_type type,
const char *name, const char *tag,
- const device_config *owner, UINT32 clock, UINT32 param)
- : device_config(mconfig, type, name, tag, owner, clock, param),
- device_config_nvram_interface(mconfig, *this)
-{
-}
-
-device_secure_serial_flash::device_secure_serial_flash(running_machine &_machine, const device_secure_serial_flash_config &config) : device_t(_machine, config),
- device_nvram_interface(_machine, config, *this)
+ device_t *owner, UINT32 clock) :
+ device_t(mconfig, type, name, tag, owner, clock),
+ device_nvram_interface(mconfig, *this)
{
}
diff --git a/src/emu/machine/secflash.h b/src/emu/machine/secflash.h
index c2291435349..907238a2bd1 100644
--- a/src/emu/machine/secflash.h
+++ b/src/emu/machine/secflash.h
@@ -5,13 +5,6 @@
#include "emu.h"
-class device_secure_serial_flash_config : public device_config,
- public device_config_nvram_interface
-{
-public:
- device_secure_serial_flash_config(const machine_config &mconfig, device_type type, const char *name, const char *tag, const device_config *owner, UINT32 clock, UINT32 param = 0);
-};
-
class device_secure_serial_flash : public device_t,
public device_nvram_interface
{
@@ -34,7 +27,7 @@ protected:
virtual void sda_0() = 0;
virtual void sda_1() = 0;
- device_secure_serial_flash(running_machine &_machine, const device_secure_serial_flash_config &config);
+ device_secure_serial_flash(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
virtual void device_start();
virtual void device_reset();
};
diff --git a/src/emu/machine/smc91c9x.c b/src/emu/machine/smc91c9x.c
index 94c9afd9c27..194654ce0fa 100644
--- a/src/emu/machine/smc91c9x.c
+++ b/src/emu/machine/smc91c9x.c
@@ -509,13 +509,13 @@ WRITE16_DEVICE_HANDLER( smc91c9x_w )
static DEVICE_START( smc91c9x )
{
- const smc91c9x_config *config = (const smc91c9x_config *)downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config();
+ const smc91c9x_config *config = (const smc91c9x_config *)downcast<const legacy_device_base *>(device)->inline_config();
smc91c9x_state *smc = get_safe_token(device);
/* validate some basic stuff */
assert(device != NULL);
- assert(device->baseconfig().static_config() == NULL);
- assert(downcast<const legacy_device_config_base &>(device->baseconfig()).inline_config() != NULL);
+ assert(device->static_config() == NULL);
+ assert(downcast<const legacy_device_base *>(device)->inline_config() != NULL);
/* store a pointer back to the device */
smc->device = device;
diff --git a/src/emu/machine/timekpr.c b/src/emu/machine/timekpr.c
index 998c9bcc2c6..eb7c9737d62 100644
--- a/src/emu/machine/timekpr.c
+++ b/src/emu/machine/timekpr.c
@@ -15,6 +15,14 @@
#include "machine/timekpr.h"
+// device type definition
+const device_type M48T02 = &device_creator<m48t02_device>;
+const device_type M48T35 = &device_creator<m48t35_device>;
+const device_type M48T37 = &device_creator<m48t37_device>;
+const device_type M48T58 = &device_creator<m48t58_device>;
+const device_type MK48T08 = &device_creator<mk48t08_device>;
+
+
/***************************************************************************
MACROS
***************************************************************************/
@@ -46,66 +54,6 @@
#define FLAGS_AF ( 0x40 ) /* M48T37: not emulated */
#define FLAGS_WDF ( 0x80 ) /* M48T37: not emulated */
-#define TIMEKPR_DEV_DERIVED_CTOR(devtype) \
- devtype##_device::devtype##_device(running_machine &_machine, const devtype##_device_config &config) \
- : timekeeper_device(_machine, config) \
- { }
-
-#define TIMEKPR_DEVCFG_DERIVED_CTOR(devtype, name, shortname) \
- devtype##_device_config::devtype##_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock) \
- : timekeeper_device_config(mconfig, name, tag, owner, clock) \
- { }
-
-#define TIMEKPR_DEVCFG_DERIVED_STATIC_ALLOC(devtype) \
- device_config *devtype##_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock) \
- { return global_alloc(devtype##_device_config(mconfig, tag, owner, clock)); }
-
-#define TIMEKPR_DEVCFG_DERIVED_DEV_ALLOC(devtype) \
- device_t *devtype##_device_config::alloc_device(running_machine &machine) const \
- { return auto_alloc(machine, devtype##_device(machine, *this)); }
-
-#define TIMEKPR_DERIVE(devtype, name, shortname) \
- TIMEKPR_DEV_DERIVED_CTOR(devtype) \
- TIMEKPR_DEVCFG_DERIVED_CTOR(devtype, name, shortname) \
- TIMEKPR_DEVCFG_DERIVED_STATIC_ALLOC(devtype) \
- TIMEKPR_DEVCFG_DERIVED_DEV_ALLOC(devtype)
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// timekeeper_device_config - constructor
-//-------------------------------------------------
-
-timekeeper_device_config::timekeeper_device_config(const machine_config &mconfig, const char *type, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, type, tag, owner, clock),
- device_config_nvram_interface(mconfig, *this)
-{
-
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *timekeeper_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(timekeeper_device_config(mconfig, "TIMEKEEPER", tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *timekeeper_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, timekeeper_device(machine, *this));
-}
/***************************************************************************
INLINE FUNCTIONS
@@ -165,76 +113,19 @@ static int counter_from_ram( UINT8 *data, int offset )
// LIVE DEVICE
//**************************************************************************
-const device_type M48T02 = m48t02_device_config::static_alloc_device_config;
-const device_type M48T35 = m48t35_device_config::static_alloc_device_config;
-const device_type M48T37 = m48t37_device_config::static_alloc_device_config;
-const device_type M48T58 = m48t58_device_config::static_alloc_device_config;
-const device_type MK48T08 = mk48t08_device_config::static_alloc_device_config;
-
-TIMEKPR_DERIVE(m48t02, "M48T02", "m48t02")
-TIMEKPR_DERIVE(m48t35, "M48T35", "m48t35")
-TIMEKPR_DERIVE(m48t37, "M48T37", "m48t37")
-TIMEKPR_DERIVE(m48t58, "M48T58", "m48t58")
-TIMEKPR_DERIVE(mk48t08, "MK48T08", "mk48t08")
-
//-------------------------------------------------
-// timekeeper_device - constructor
+// timekeeper_device_config - constructor
//-------------------------------------------------
-timekeeper_device::timekeeper_device(running_machine &_machine, const timekeeper_device_config &config)
- : device_t(_machine, config),
- device_nvram_interface(_machine, config, *this),
- m_config(config)
+timekeeper_device::timekeeper_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, type, name, tag, owner, clock),
+ device_nvram_interface(mconfig, *this)
{
}
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void timekeeper_device::device_start()
-{
- system_time systime;
-
- /* validate some basic stuff */
- assert(this != NULL);
-
- machine().base_datetime(systime);
-
- m_control = 0;
- m_seconds = make_bcd( systime.local_time.second );
- m_minutes = make_bcd( systime.local_time.minute );
- m_hours = make_bcd( systime.local_time.hour );
- m_day = make_bcd( systime.local_time.weekday + 1 );
- m_date = make_bcd( systime.local_time.mday );
- m_month = make_bcd( systime.local_time.month + 1 );
- m_year = make_bcd( systime.local_time.year % 100 );
- m_century = make_bcd( systime.local_time.year / 100 );
- m_data = auto_alloc_array( machine(), UINT8, m_size );
-
- m_default_data = *region();
- if (m_default_data)
- {
- assert( region()->bytes() == m_size );
- }
-
- save_item( NAME(m_control) );
- save_item( NAME(m_seconds) );
- save_item( NAME(m_minutes) );
- save_item( NAME(m_hours) );
- save_item( NAME(m_day) );
- save_item( NAME(m_date) );
- save_item( NAME(m_month) );
- save_item( NAME(m_year) );
- save_item( NAME(m_century) );
- save_pointer( NAME(m_data), m_size );
-
- emu_timer *timer = timer_alloc();
- timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1));
-}
-
-void m48t02_device::device_start()
+m48t02_device::m48t02_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : timekeeper_device(mconfig, M48T02, "M48T02", tag, owner, clock)
{
m_offset_control = 0x7f8;
m_offset_seconds = 0x7f9;
@@ -247,11 +138,10 @@ void m48t02_device::device_start()
m_offset_century = -1;
m_offset_flags = -1;
m_size = 0x800;
-
- timekeeper_device::device_start();
}
-void m48t35_device::device_start()
+m48t35_device::m48t35_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : timekeeper_device(mconfig, M48T35, "M48T35", tag, owner, clock)
{
m_offset_control = 0x7ff8;
m_offset_seconds = 0x7ff9;
@@ -264,11 +154,10 @@ void m48t35_device::device_start()
m_offset_century = -1;
m_offset_flags = -1;
m_size = 0x8000;
-
- timekeeper_device::device_start();
}
-void m48t37_device::device_start()
+m48t37_device::m48t37_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : timekeeper_device(mconfig, M48T37, "M48T37", tag, owner, clock)
{
m_offset_control = 0x7ff8;
m_offset_seconds = 0x7ff9;
@@ -281,11 +170,10 @@ void m48t37_device::device_start()
m_offset_century = 0x7ff1;
m_offset_flags = 0x7ff0;
m_size = 0x8000;
-
- timekeeper_device::device_start();
}
-void m48t58_device::device_start()
+m48t58_device::m48t58_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : timekeeper_device(mconfig, M48T58, "M48T58", tag, owner, clock)
{
m_offset_control = 0x1ff8;
m_offset_seconds = 0x1ff9;
@@ -298,11 +186,10 @@ void m48t58_device::device_start()
m_offset_century = -1;
m_offset_flags = -1;
m_size = 0x2000;
-
- timekeeper_device::device_start();
}
-void mk48t08_device::device_start()
+mk48t08_device::mk48t08_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : timekeeper_device(mconfig, MK48T08, "MK48T08", tag, owner, clock)
{
m_offset_control = 0x1ff8;
m_offset_seconds = 0x1ff9;
@@ -315,8 +202,52 @@ void mk48t08_device::device_start()
m_offset_century = 0x1ff1;
m_offset_flags = 0x1ff0;
m_size = 0x2000;
+}
+
+
+//-------------------------------------------------
+// device_start - device-specific startup
+//-------------------------------------------------
+
+void timekeeper_device::device_start()
+{
+ system_time systime;
+
+ /* validate some basic stuff */
+ assert(this != NULL);
- timekeeper_device::device_start();
+ machine().base_datetime(systime);
+
+ m_control = 0;
+ m_seconds = make_bcd( systime.local_time.second );
+ m_minutes = make_bcd( systime.local_time.minute );
+ m_hours = make_bcd( systime.local_time.hour );
+ m_day = make_bcd( systime.local_time.weekday + 1 );
+ m_date = make_bcd( systime.local_time.mday );
+ m_month = make_bcd( systime.local_time.month + 1 );
+ m_year = make_bcd( systime.local_time.year % 100 );
+ m_century = make_bcd( systime.local_time.year / 100 );
+ m_data = auto_alloc_array( machine(), UINT8, m_size );
+
+ m_default_data = *region();
+ if (m_default_data)
+ {
+ assert( region()->bytes() == m_size );
+ }
+
+ save_item( NAME(m_control) );
+ save_item( NAME(m_seconds) );
+ save_item( NAME(m_minutes) );
+ save_item( NAME(m_hours) );
+ save_item( NAME(m_day) );
+ save_item( NAME(m_date) );
+ save_item( NAME(m_month) );
+ save_item( NAME(m_year) );
+ save_item( NAME(m_century) );
+ save_pointer( NAME(m_data), m_size );
+
+ emu_timer *timer = timer_alloc();
+ timer->adjust(attotime::from_seconds(1), 0, attotime::from_seconds(1));
}
//-------------------------------------------------
@@ -324,11 +255,6 @@ void mk48t08_device::device_start()
//-------------------------------------------------
void timekeeper_device::device_reset() { }
-void m48t02_device::device_reset() { }
-void m48t35_device::device_reset() { }
-void m48t37_device::device_reset() { }
-void m48t58_device::device_reset() { }
-void mk48t08_device::device_reset() { }
void timekeeper_device::counters_to_ram()
{
diff --git a/src/emu/machine/timekpr.h b/src/emu/machine/timekpr.h
index 67e48aae1b5..4dd5cb64aa8 100644
--- a/src/emu/machine/timekpr.h
+++ b/src/emu/machine/timekpr.h
@@ -54,44 +54,15 @@ struct timekeeper_config
const UINT8 *m_data;
};
-// ======================> timekeeper_device_config
-
-class timekeeper_device_config : public device_config,
- public device_config_nvram_interface,
- public timekeeper_config
-{
- friend class timekeeper_device;
- friend class m48t02_device_config;
- friend class m48t35_device_config;
- friend class m48t37_device_config;
- friend class m48t58_device_config;
- friend class mk48t08_device_config;
-
-protected:
- // construction/destruction
- timekeeper_device_config(const machine_config &mconfig, const char *type, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-};
-
// ======================> timekeeper_device
class timekeeper_device : public device_t,
public device_nvram_interface
{
- friend class timekeeper_device_config;
- friend class m48t02_device;
- friend class m48t35_device;
- friend class m48t37_device;
- friend class m48t58_device;
- friend class mk48t08_device;
-
+protected:
// construction/destruction
- timekeeper_device(running_machine &_machine, const timekeeper_device_config &config);
+ timekeeper_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock);
public:
void write(UINT16 offset, UINT8 data);
@@ -108,13 +79,11 @@ protected:
virtual void nvram_read(emu_file &file);
virtual void nvram_write(emu_file &file);
- // internal state
- const timekeeper_device_config &m_config;
-
private:
void counters_to_ram();
void counters_from_ram();
+ // internal state
UINT8 m_control;
UINT8 m_seconds;
UINT8 m_minutes;
@@ -128,6 +97,7 @@ private:
UINT8 *m_data;
UINT8 *m_default_data;
+protected:
int m_size;
int m_offset_control;
int m_offset_seconds;
@@ -141,11 +111,35 @@ private:
int m_offset_flags;
};
-GENERIC_DEVICE_DERIVED_CONFIG(timekeeper, m48t02)
-GENERIC_DEVICE_DERIVED_CONFIG(timekeeper, m48t35)
-GENERIC_DEVICE_DERIVED_CONFIG(timekeeper, m48t37)
-GENERIC_DEVICE_DERIVED_CONFIG(timekeeper, m48t58)
-GENERIC_DEVICE_DERIVED_CONFIG(timekeeper, mk48t08)
+class m48t02_device : public timekeeper_device
+{
+public:
+ m48t02_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class m48t35_device : public timekeeper_device
+{
+public:
+ m48t35_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class m48t37_device : public timekeeper_device
+{
+public:
+ m48t37_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class m48t58_device : public timekeeper_device
+{
+public:
+ m48t58_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
+
+class mk48t08_device : public timekeeper_device
+{
+public:
+ mk48t08_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+};
// device type definition
extern const device_type M48T02;
diff --git a/src/emu/machine/tms6100.c b/src/emu/machine/tms6100.c
index 48f9b0aef30..8bbb2e08202 100644
--- a/src/emu/machine/tms6100.c
+++ b/src/emu/machine/tms6100.c
@@ -141,7 +141,7 @@ static DEVICE_START( tms6100 )
assert_always(tms != NULL, "Error creating TMS6100 chip");
- //tms->intf = device->baseconfig().static_config ? (const tms5110_interface *)device->baseconfig().static_config : &dummy;
+ //tms->intf = device->static_config ? (const tms5110_interface *)device->static_config : &dummy;
tms->rom = *device->region();
tms->device = device;
diff --git a/src/emu/machine/upd1990a.c b/src/emu/machine/upd1990a.c
index bc3d4f11d9d..1ed6019e3fe 100644
--- a/src/emu/machine/upd1990a.c
+++ b/src/emu/machine/upd1990a.c
@@ -19,6 +19,9 @@
#include "upd1990a.h"
+// device type definition
+const device_type UPD1990A = &device_creator<upd1990a_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -43,73 +46,6 @@ enum
//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-// devices
-const device_type UPD1990A = upd1990a_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-//-------------------------------------------------
-// upd1990a_device_config - constructor
-//-------------------------------------------------
-
-upd1990a_device_config::upd1990a_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "uPD1990A", tag, owner, clock),
- device_config_rtc_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *upd1990a_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(upd1990a_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
-//-------------------------------------------------
-
-device_t *upd1990a_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, upd1990a_device(machine, *this));
-}
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void upd1990a_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const upd1990a_interface *intf = reinterpret_cast<const upd1990a_interface *>(static_config());
- if (intf != NULL)
- *static_cast<upd1990a_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
-// memset(&in_pa_func, 0, sizeof(in_pa_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -202,23 +138,43 @@ inline void upd1990a_device::advance_seconds()
// upd1990a_device - constructor
//-------------------------------------------------
-upd1990a_device::upd1990a_device(running_machine &_machine, const upd1990a_device_config &config)
- : device_t(_machine, config),
- device_rtc_interface(_machine, config, *this),
- m_config(config)
+upd1990a_device::upd1990a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, UPD1990A, "uPD1990A", tag, owner, clock),
+ device_rtc_interface(mconfig, *this)
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void upd1990a_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const upd1990a_interface *intf = reinterpret_cast<const upd1990a_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<upd1990a_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+// memset(&in_pa_cb, 0, sizeof(in_pa_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void upd1990a_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_data_func, &m_config.m_out_data_func, this);
- devcb_resolve_write_line(&m_out_tp_func, &m_config.m_out_tp_func, this);
+ devcb_resolve_write_line(&m_out_data_func, &m_out_data_cb, this);
+ devcb_resolve_write_line(&m_out_tp_func, &m_out_tp_cb, this);
// allocate timers
m_timer_clock = timer_alloc(TIMER_CLOCK);
diff --git a/src/emu/machine/upd1990a.h b/src/emu/machine/upd1990a.h
index be89551e670..2a6654424bc 100644
--- a/src/emu/machine/upd1990a.h
+++ b/src/emu/machine/upd1990a.h
@@ -54,31 +54,8 @@
struct upd1990a_interface
{
- devcb_write_line m_out_data_func;
- devcb_write_line m_out_tp_func;
-};
-
-
-
-// ======================> upd1990a_device_config
-
-class upd1990a_device_config : public device_config,
- public upd1990a_interface,
- public device_config_rtc_interface
-{
- friend class upd1990a_device;
-
- // construction/destruction
- upd1990a_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_out_data_cb;
+ devcb_write_line m_out_tp_cb;
};
@@ -86,14 +63,13 @@ protected:
// ======================> upd1990a_device
class upd1990a_device : public device_t,
- public device_rtc_interface
+ public device_rtc_interface,
+ public upd1990a_interface
{
- friend class upd1990a_device_config;
-
+public:
// construction/destruction
- upd1990a_device(running_machine &_machine, const upd1990a_device_config &_config);
+ upd1990a_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_WRITE_LINE_MEMBER( oe_w );
DECLARE_WRITE_LINE_MEMBER( cs_w );
DECLARE_WRITE_LINE_MEMBER( stb_w );
@@ -107,6 +83,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -143,8 +120,6 @@ private:
emu_timer *m_timer_clock;
emu_timer *m_timer_tp;
emu_timer *m_timer_data_out;
-
- const upd1990a_device_config &m_config;
};
diff --git a/src/emu/machine/upd7201.c b/src/emu/machine/upd7201.c
index dc74e5bdb08..9063765b403 100644
--- a/src/emu/machine/upd7201.c
+++ b/src/emu/machine/upd7201.c
@@ -21,6 +21,9 @@
#include "machine/devhelpr.h"
+// device type definition
+const device_type UPD7201 = &device_creator<upd7201_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -38,44 +41,6 @@ enum
//**************************************************************************
-// GLOBAL VARIABLES
-//**************************************************************************
-
-// devices
-const device_type UPD7201 = upd7201_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(upd7201, "UPD7201")
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void upd7201_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const upd7201_interface *intf = reinterpret_cast<const upd7201_interface *>(static_config());
- if (intf != NULL)
- *static_cast<upd7201_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -106,21 +71,41 @@ inline void upd7201_device::transmit(int channel)
// upd7201_device - constructor
//-------------------------------------------------
-upd7201_device::upd7201_device(running_machine &_machine, const upd7201_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+upd7201_device::upd7201_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, UPD7201, "UPD7201", tag, owner, clock)
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void upd7201_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const upd7201_interface *intf = reinterpret_cast<const upd7201_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<upd7201_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void upd7201_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
}
diff --git a/src/emu/machine/upd7201.h b/src/emu/machine/upd7201.h
index 69ebfb45ae1..90d65d53f7d 100644
--- a/src/emu/machine/upd7201.h
+++ b/src/emu/machine/upd7201.h
@@ -60,63 +60,40 @@
struct upd7201_interface
{
- devcb_write_line m_out_int_func;
+ devcb_write_line m_out_int_cb;
struct
{
int m_rx_clock;
int m_tx_clock;
- devcb_write_line m_out_drqrx_func;
- devcb_write_line m_out_drqtx_func;
+ devcb_write_line m_out_drqrx_cb;
+ devcb_write_line m_out_drqtx_cb;
- devcb_read_line m_in_rxd_func;
- devcb_write_line m_out_txd_func;
+ devcb_read_line m_in_rxd_cb;
+ devcb_write_line m_out_txd_cb;
- devcb_read_line m_in_cts_func;
- devcb_read_line m_in_dcd_func;
- devcb_write_line m_out_rts_func;
- devcb_write_line m_out_dtr_func;
+ devcb_read_line m_in_cts_cb;
+ devcb_read_line m_in_dcd_cb;
+ devcb_write_line m_out_rts_cb;
+ devcb_write_line m_out_dtr_cb;
- devcb_write_line m_out_wait_func;
- devcb_write_line m_out_sync_func;
+ devcb_write_line m_out_wait_cb;
+ devcb_write_line m_out_sync_cb;
} m_channel[2];
};
-// ======================> upd7201_device_config
-
-class upd7201_device_config : public device_config,
- public upd7201_interface
-{
- friend class upd7201_device;
-
- // construction/destruction
- upd7201_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
-
// ======================> upd7201_device
-class upd7201_device : public device_t
+class upd7201_device : public device_t,
+ public upd7201_interface
{
- friend class upd7201_device_config;
-
+public:
// construction/destruction
- upd7201_device(running_machine &_machine, const upd7201_device_config &_config);
+ upd7201_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( cd_ba_r );
DECLARE_WRITE8_MEMBER( cd_ba_w );
DECLARE_READ8_MEMBER( ba_cd_r );
@@ -142,6 +119,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int m_param, void *ptr);
@@ -162,8 +140,6 @@ private:
emu_timer *m_tx_a_timer;
emu_timer *m_rx_b_timer;
emu_timer *m_tx_b_timer;
-
- const upd7201_device_config &m_config;
};
diff --git a/src/emu/machine/x2212.c b/src/emu/machine/x2212.c
index e246ca53e05..a20a8321a54 100644
--- a/src/emu/machine/x2212.c
+++ b/src/emu/machine/x2212.c
@@ -14,8 +14,6 @@
// GLOBAL VARIABLES
//**************************************************************************
-const device_type X2212 = x2212_device_config::static_alloc_device_config;
-
static ADDRESS_MAP_START( x2212_sram_map, AS_0, 8 )
AM_RANGE(0x0000, 0x00ff) AM_RAM
ADDRESS_MAP_END
@@ -27,42 +25,51 @@ ADDRESS_MAP_END
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
+// device type definition
+const device_type X2212 = &device_creator<x2212_device>;
+
//-------------------------------------------------
-// x2212_device_config - constructor
+// x2212_device - constructor
//-------------------------------------------------
-x2212_device_config::x2212_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "X2212", tag, owner, clock),
- device_config_memory_interface(mconfig, *this),
- device_config_nvram_interface(mconfig, *this),
+x2212_device::x2212_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, X2212, "X2212", tag, owner, clock),
+ device_memory_interface(mconfig, *this),
+ device_nvram_interface(mconfig, *this),
+ m_auto_save(false),
m_sram_space_config("SRAM", ENDIANNESS_BIG, 8, 8, 0, *ADDRESS_MAP_NAME(x2212_sram_map)),
m_e2prom_space_config("E2PROM", ENDIANNESS_BIG, 8, 8, 0, *ADDRESS_MAP_NAME(x2212_e2prom_map)),
- m_auto_save(false)
+ m_store(false),
+ m_array_recall(false)
{
}
//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
+// static_set_auto_save - configuration helper
+// to set the auto-save flag
//-------------------------------------------------
-device_config *x2212_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
+void x2212_device::static_set_auto_save(device_t &device)
{
- return global_alloc(x2212_device_config(mconfig, tag, owner, clock));
+ downcast<x2212_device &>(device).m_auto_save = true;
}
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// device_start - device-specific startup
//-------------------------------------------------
-device_t *x2212_device_config::alloc_device(running_machine &machine) const
+void x2212_device::device_start()
{
- return auto_alloc(machine, x2212_device(machine, *this));
+ save_item(NAME(m_store));
+ save_item(NAME(m_array_recall));
+
+ m_sram = m_addrspace[0];
+ m_e2prom = m_addrspace[1];
}
@@ -71,58 +78,13 @@ device_t *x2212_device_config::alloc_device(running_machine &machine) const
// any address spaces owned by this device
//-------------------------------------------------
-const address_space_config *x2212_device_config::memory_space_config(address_spacenum spacenum) const
+const address_space_config *x2212_device::memory_space_config(address_spacenum spacenum) const
{
return (spacenum == 0) ? &m_sram_space_config : (spacenum == 1) ? &m_e2prom_space_config : NULL;
}
//-------------------------------------------------
-// static_set_auto_save - configuration helper
-// to set the auto-save flag
-//-------------------------------------------------
-
-void x2212_device_config::static_set_auto_save(device_config *device)
-{
- downcast<x2212_device_config *>(device)->m_auto_save = true;
-}
-
-
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// x2212_device - constructor
-//-------------------------------------------------
-
-x2212_device::x2212_device(running_machine &_machine, const x2212_device_config &config)
- : device_t(_machine, config),
- device_memory_interface(_machine, config, *this),
- device_nvram_interface(_machine, config, *this),
- m_config(config),
- m_store(false),
- m_array_recall(false)
-{
-}
-
-
-//-------------------------------------------------
-// device_start - device-specific startup
-//-------------------------------------------------
-
-void x2212_device::device_start()
-{
- save_item(NAME(m_store));
- save_item(NAME(m_array_recall));
-
- m_sram = m_addrspace[0];
- m_e2prom = m_addrspace[1];
-}
-
-
-//-------------------------------------------------
// nvram_default - called to initialize NVRAM to
// its default state
//-------------------------------------------------
@@ -175,7 +137,7 @@ void x2212_device::nvram_read(emu_file &file)
void x2212_device::nvram_write(emu_file &file)
{
// auto-save causes an implicit store prior to exiting (writing)
- if (m_config.m_auto_save)
+ if (m_auto_save)
store();
UINT8 buffer[SIZE_DATA];
diff --git a/src/emu/machine/x2212.h b/src/emu/machine/x2212.h
index fc85f32e9be..bebc5590baf 100644
--- a/src/emu/machine/x2212.h
+++ b/src/emu/machine/x2212.h
@@ -24,7 +24,7 @@
// to fire on power-down, effectively creating an "auto-save" functionality
#define MCFG_X2212_ADD_AUTOSAVE(_tag) \
MCFG_DEVICE_ADD(_tag, X2212, 0) \
- x2212_device_config::static_set_auto_save(device); \
+ x2212_device::static_set_auto_save(*device); \
@@ -33,50 +33,19 @@
//**************************************************************************
-// ======================> x2212_device_config
-
-class x2212_device_config : public device_config,
- public device_config_memory_interface,
- public device_config_nvram_interface
-{
- friend class x2212_device;
-
- // construction/destruction
- x2212_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
- // inline configuration helpers
- static void static_set_auto_save(device_config *device);
-
-protected:
- // device_config_memory_interface overrides
- virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
-
- // device-specific configuration
- address_space_config m_sram_space_config;
- address_space_config m_e2prom_space_config;
-
- // internal state
- bool m_auto_save;
-};
-
-
// ======================> x2212_device
class x2212_device : public device_t,
public device_memory_interface,
public device_nvram_interface
{
- friend class x2212_device_config;
-
+public:
// construction/destruction
- x2212_device(running_machine &_machine, const x2212_device_config &config);
+ x2212_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // inline configuration helpers
+ static void static_set_auto_save(device_t &device);
-public:
// I/O operations
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -92,6 +61,9 @@ protected:
// device-level overrides
virtual void device_start();
+ // device_memory_interface overrides
+ virtual const address_space_config *memory_space_config(address_spacenum spacenum = AS_0) const;
+
// device_nvram_interface overrides
virtual void nvram_default();
virtual void nvram_read(emu_file &file);
@@ -99,9 +71,14 @@ protected:
static const int SIZE_DATA = 0x100;
- // internal state
- const x2212_device_config &m_config;
+ // configuration state
+ bool m_auto_save;
+
+ // device-specific configuration
+ address_space_config m_sram_space_config;
+ address_space_config m_e2prom_space_config;
+ // internal state
address_space * m_sram;
address_space * m_e2prom;
diff --git a/src/emu/machine/x76f041.c b/src/emu/machine/x76f041.c
index c42b5571b34..a3ee45df84d 100644
--- a/src/emu/machine/x76f041.c
+++ b/src/emu/machine/x76f041.c
@@ -25,30 +25,15 @@ inline void ATTR_PRINTF(3,4) x76f041_device::verboselog(int n_level, const char
va_start(v, s_fmt);
vsprintf(buf, s_fmt, v);
va_end(v);
- logerror("x76f041 %s %s: %s", config.tag(), machine().describe_context(), buf);
+ logerror("x76f041 %s %s: %s", tag(), machine().describe_context(), buf);
}
}
-const device_type X76F041 = x76f041_device_config::static_alloc_device_config;
+// device type definition
+const device_type X76F041 = &device_creator<x76f041_device>;
-x76f041_device_config::x76f041_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_secure_serial_flash_config(mconfig, static_alloc_device_config, "X76F041", tag, owner, clock)
-{
-}
-
-device_config *x76f041_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(x76f041_device_config(mconfig, tag, owner, clock));
-}
-
-device_t *x76f041_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, x76f041_device(machine, *this));
-}
-
-x76f041_device::x76f041_device(running_machine &_machine, const x76f041_device_config &_config)
- : device_secure_serial_flash(_machine, _config),
- config(_config)
+x76f041_device::x76f041_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_secure_serial_flash(mconfig, X76F041, "X76F041", tag, owner, clock)
{
}
diff --git a/src/emu/machine/x76f041.h b/src/emu/machine/x76f041.h
index 88c492a359a..70df0bf8fe3 100644
--- a/src/emu/machine/x76f041.h
+++ b/src/emu/machine/x76f041.h
@@ -13,25 +13,11 @@
#include "machine/secflash.h"
-class x76f041_device_config : public device_secure_serial_flash_config
-{
- friend class x76f041_device;
-
- // construction/destruction
- x76f041_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-};
-
class x76f041_device : public device_secure_serial_flash
{
- friend class x76f041_device_config;
-
+public:
// construction/destruction
- x76f041_device(running_machine &_machine, const x76f041_device_config &config);
+ x76f041_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
// device-level overrides
@@ -54,8 +40,6 @@ protected:
virtual void sda_1();
// internal state
- const x76f041_device_config &config;
-
enum {
SIZE_WRITE_BUFFER = 8,
SIZE_RESPONSE_TO_RESET = 4,
diff --git a/src/emu/machine/x76f100.c b/src/emu/machine/x76f100.c
index 89db4b05e4b..c6f4d3a01a5 100644
--- a/src/emu/machine/x76f100.c
+++ b/src/emu/machine/x76f100.c
@@ -23,30 +23,15 @@ inline void ATTR_PRINTF(3,4) x76f100_device::verboselog(int n_level, const char
va_start(v, s_fmt);
vsprintf(buf, s_fmt, v);
va_end(v);
- logerror("x76f100 %s %s: %s", config.tag(), machine().describe_context(), buf);
+ logerror("x76f100 %s %s: %s", tag(), machine().describe_context(), buf);
}
}
-const device_type X76F100 = x76f100_device_config::static_alloc_device_config;
+// device type definition
+const device_type X76F100 = &device_creator<x76f100_device>;
-x76f100_device_config::x76f100_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_secure_serial_flash_config(mconfig, static_alloc_device_config, "X76F100", tag, owner, clock)
-{
-}
-
-device_config *x76f100_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(x76f100_device_config(mconfig, tag, owner, clock));
-}
-
-device_t *x76f100_device_config::alloc_device(running_machine &machine) const
-{
- return auto_alloc(machine, x76f100_device(machine, *this));
-}
-
-x76f100_device::x76f100_device(running_machine &_machine, const x76f100_device_config &_config)
- : device_secure_serial_flash(_machine, _config),
- config(_config)
+x76f100_device::x76f100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_secure_serial_flash(mconfig, X76F100, "X76F100", tag, owner, clock)
{
}
@@ -84,7 +69,7 @@ void x76f100_device::nvram_default()
// Ensure the size is correct though
if(m_region->bytes() != SIZE_RESPONSE_TO_RESET+SIZE_WRITE_PASSWORD+SIZE_READ_PASSWORD+SIZE_DATA)
logerror("x76f100 %s: Wrong region length for initialization data, expected 0x%x, got 0x%x\n",
- config.tag(),
+ tag(),
SIZE_RESPONSE_TO_RESET+SIZE_WRITE_PASSWORD+SIZE_READ_PASSWORD+SIZE_DATA,
m_region->bytes());
else {
@@ -100,7 +85,7 @@ void x76f100_device::nvram_default()
// That chip isn't really usable without the passwords, so bitch
// if there's no region
- logerror("x76f100 %s: Warning, no default data provided, chip is unusable.\n", config.tag());
+ logerror("x76f100 %s: Warning, no default data provided, chip is unusable.\n", tag());
memset(response_to_reset, 0, SIZE_RESPONSE_TO_RESET);
memset(write_password, 0, SIZE_WRITE_PASSWORD);
memset(read_password, 0, SIZE_READ_PASSWORD);
diff --git a/src/emu/machine/x76f100.h b/src/emu/machine/x76f100.h
index 92cbaaf8ecb..0eab9d26347 100644
--- a/src/emu/machine/x76f100.h
+++ b/src/emu/machine/x76f100.h
@@ -13,25 +13,11 @@
#include "machine/secflash.h"
-class x76f100_device_config : public device_secure_serial_flash_config
-{
- friend class x76f100_device;
-
- // construction/destruction
- x76f100_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-};
-
class x76f100_device : public device_secure_serial_flash
{
- friend class x76f100_device_config;
-
+public:
// construction/destruction
- x76f100_device(running_machine &_machine, const x76f100_device_config &config);
+ x76f100_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
protected:
// device-level overrides
@@ -54,8 +40,6 @@ protected:
virtual void sda_1();
// internal state
- const x76f100_device_config &config;
-
enum {
SIZE_WRITE_BUFFER = 8,
SIZE_RESPONSE_TO_RESET = 4,
diff --git a/src/emu/machine/z80ctc.c b/src/emu/machine/z80ctc.c
index fe195f62913..a992193b9a0 100644
--- a/src/emu/machine/z80ctc.c
+++ b/src/emu/machine/z80ctc.c
@@ -27,14 +27,6 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z80CTC = z80ctc_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
@@ -77,38 +69,20 @@ const int WAITING_FOR_TRIG = 0x100;
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// z80ctc_device_config - constructor
-//-------------------------------------------------
-
-z80ctc_device_config::z80ctc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Zilog Z80 CTC", tag, owner, clock),
- device_config_z80daisy_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *z80ctc_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(z80ctc_device_config(mconfig, tag, owner, clock));
-}
-
+// device type definition
+const device_type Z80CTC = &device_creator<z80ctc_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// z80ctc_device - constructor
//-------------------------------------------------
-device_t *z80ctc_device_config::alloc_device(running_machine &machine) const
+z80ctc_device::z80ctc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z80CTC, "Zilog Z80 CTC", tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this)
{
- return auto_alloc(machine, z80ctc_device(machine, *this));
}
@@ -118,7 +92,7 @@ device_t *z80ctc_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void z80ctc_device_config::device_config_complete()
+void z80ctc_device::device_config_complete()
{
// inherit a copy of the static data
const z80ctc_interface *intf = reinterpret_cast<const z80ctc_interface *>(static_config());
@@ -129,31 +103,14 @@ void z80ctc_device_config::device_config_complete()
else
{
m_notimer = 0;
- memset(&m_intr, 0, sizeof(m_intr));
- memset(&m_zc0, 0, sizeof(m_zc0));
- memset(&m_zc1, 0, sizeof(m_zc1));
- memset(&m_zc2, 0, sizeof(m_zc2));
+ memset(&m_intr_cb, 0, sizeof(m_intr_cb));
+ memset(&m_zc0_cb, 0, sizeof(m_zc0_cb));
+ memset(&m_zc1_cb, 0, sizeof(m_zc1_cb));
+ memset(&m_zc2_cb, 0, sizeof(m_zc2_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// z80ctc_device - constructor
-//-------------------------------------------------
-
-z80ctc_device::z80ctc_device(running_machine &_machine, const z80ctc_device_config &_config)
- : device_t(_machine, _config),
- device_z80daisy_interface(_machine, _config, *this),
- m_config(_config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -164,13 +121,13 @@ void z80ctc_device::device_start()
m_period256 = attotime::from_hz(m_clock) * 256;
// resolve callbacks
- devcb_resolve_write_line(&m_intr, &m_config.m_intr, this);
+ devcb_resolve_write_line(&m_intr, &m_intr_cb, this);
// start each channel
- m_channel[0].start(this, 0, (m_config.m_notimer & NOTIMER_0) != 0, &m_config.m_zc0);
- m_channel[1].start(this, 1, (m_config.m_notimer & NOTIMER_1) != 0, &m_config.m_zc1);
- m_channel[2].start(this, 2, (m_config.m_notimer & NOTIMER_2) != 0, &m_config.m_zc2);
- m_channel[3].start(this, 3, (m_config.m_notimer & NOTIMER_3) != 0, NULL);
+ m_channel[0].start(this, 0, (m_notimer & NOTIMER_0) != 0, &m_zc0_cb);
+ m_channel[1].start(this, 1, (m_notimer & NOTIMER_1) != 0, &m_zc1_cb);
+ m_channel[2].start(this, 2, (m_notimer & NOTIMER_2) != 0, &m_zc2_cb);
+ m_channel[3].start(this, 3, (m_notimer & NOTIMER_3) != 0, NULL);
// register for save states
save_item(NAME(m_vector));
diff --git a/src/emu/machine/z80ctc.h b/src/emu/machine/z80ctc.h
index 543295f4346..1700275c368 100644
--- a/src/emu/machine/z80ctc.h
+++ b/src/emu/machine/z80ctc.h
@@ -65,33 +65,10 @@ const int NOTIMER_3 = (1<<3);
struct z80ctc_interface
{
UINT8 m_notimer; // timer disabler mask
- devcb_write_line m_intr; // callback when change interrupt status
- devcb_write_line m_zc0; // ZC/TO0 callback
- devcb_write_line m_zc1; // ZC/TO1 callback
- devcb_write_line m_zc2; // ZC/TO2 callback
-};
-
-
-
-// ======================> z80ctc_device_config
-
-class z80ctc_device_config : public device_config,
- public device_config_z80daisy_interface,
- public z80ctc_interface
-{
- friend class z80ctc_device;
-
- // construction/destruction
- z80ctc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_intr_cb; // callback when change interrupt status
+ devcb_write_line m_zc0_cb; // ZC/TO0 callback
+ devcb_write_line m_zc1_cb; // ZC/TO1 callback
+ devcb_write_line m_zc2_cb; // ZC/TO2 callback
};
@@ -99,14 +76,13 @@ protected:
// ======================> z80ctc_device
class z80ctc_device : public device_t,
- public device_z80daisy_interface
+ public device_z80daisy_interface,
+ public z80ctc_interface
{
- friend class z80ctc_device_config;
-
+public:
// construction/destruction
- z80ctc_device(running_machine &_machine, const z80ctc_device_config &_config);
+ z80ctc_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
// state getters
attotime period(int ch) const { return m_channel[ch].period(); }
@@ -117,6 +93,7 @@ public:
private:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -161,7 +138,6 @@ private:
};
// internal state
- const z80ctc_device_config &m_config;
devcb_resolved_write_line m_intr; // interrupt callback
UINT8 m_vector; // interrupt vector
diff --git a/src/emu/machine/z80dart.c b/src/emu/machine/z80dart.c
index 8bb3c212cf8..ea3b80e9cb0 100644
--- a/src/emu/machine/z80dart.c
+++ b/src/emu/machine/z80dart.c
@@ -44,19 +44,6 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z80DART = z80dart_device_config::static_alloc_device_config;
-const device_type Z80SIO0 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO1 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO2 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO3 = z80dart_device_config::static_alloc_device_config; // FIXME
-const device_type Z80SIO4 = z80dart_device_config::static_alloc_device_config; // FIXME
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
@@ -190,38 +177,27 @@ const int WR5_DTR = 0x80;
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// z80dart_device_config - constructor
-//-------------------------------------------------
-
-z80dart_device_config::z80dart_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Zilog Z80 DART", tag, owner, clock),
- device_config_z80daisy_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *z80dart_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(z80dart_device_config(mconfig, tag, owner, clock));
-}
-
+// device type definition
+const device_type Z80DART = &device_creator<z80dart_device>;
+const device_type Z80SIO0 = &device_creator<z80dart_device>;
+const device_type Z80SIO1 = &device_creator<z80dart_device>;
+const device_type Z80SIO2 = &device_creator<z80dart_device>;
+const device_type Z80SIO3 = &device_creator<z80dart_device>;
+const device_type Z80SIO4 = &device_creator<z80dart_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// z80dart_device - constructor
//-------------------------------------------------
-device_t *z80dart_device_config::alloc_device(running_machine &machine) const
+z80dart_device::z80dart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z80DART, "Zilog Z80 DART", tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this)
{
- return auto_alloc(machine, z80dart_device(machine, *this));
+ for (int i = 0; i < 8; i++)
+ m_int_state[i] = 0;
}
@@ -231,7 +207,7 @@ device_t *z80dart_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void z80dart_device_config::device_config_complete()
+void z80dart_device::device_config_complete()
{
// inherit a copy of the static data
const z80dart_interface *intf = reinterpret_cast<const z80dart_interface *>(static_config());
@@ -242,42 +218,23 @@ void z80dart_device_config::device_config_complete()
else
{
m_rx_clock_a = m_tx_clock_a = m_rx_clock_b = m_tx_clock_b = 0;
- memset(&m_in_rxda_func, 0, sizeof(m_in_rxda_func));
- memset(&m_out_txda_func, 0, sizeof(m_out_txda_func));
- memset(&m_out_dtra_func, 0, sizeof(m_out_dtra_func));
- memset(&m_out_rtsa_func, 0, sizeof(m_out_rtsa_func));
- memset(&m_out_wrdya_func, 0, sizeof(m_out_wrdya_func));
- memset(&m_out_synca_func, 0, sizeof(m_out_synca_func));
- memset(&m_in_rxdb_func, 0, sizeof(m_in_rxdb_func));
- memset(&m_out_txdb_func, 0, sizeof(m_out_txdb_func));
- memset(&m_out_dtrb_func, 0, sizeof(m_out_dtrb_func));
- memset(&m_out_rtsb_func, 0, sizeof(m_out_rtsb_func));
- memset(&m_out_wrdyb_func, 0, sizeof(m_out_wrdyb_func));
- memset(&m_out_syncb_func, 0, sizeof(m_out_syncb_func));
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
+ memset(&m_in_rxda_cb, 0, sizeof(m_in_rxda_cb));
+ memset(&m_out_txda_cb, 0, sizeof(m_out_txda_cb));
+ memset(&m_out_dtra_cb, 0, sizeof(m_out_dtra_cb));
+ memset(&m_out_rtsa_cb, 0, sizeof(m_out_rtsa_cb));
+ memset(&m_out_wrdya_cb, 0, sizeof(m_out_wrdya_cb));
+ memset(&m_out_synca_cb, 0, sizeof(m_out_synca_cb));
+ memset(&m_in_rxdb_cb, 0, sizeof(m_in_rxdb_cb));
+ memset(&m_out_txdb_cb, 0, sizeof(m_out_txdb_cb));
+ memset(&m_out_dtrb_cb, 0, sizeof(m_out_dtrb_cb));
+ memset(&m_out_rtsb_cb, 0, sizeof(m_out_rtsb_cb));
+ memset(&m_out_wrdyb_cb, 0, sizeof(m_out_wrdyb_cb));
+ memset(&m_out_syncb_cb, 0, sizeof(m_out_syncb_cb));
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// z80dart_device - constructor
-//-------------------------------------------------
-
-z80dart_device::z80dart_device(running_machine &_machine, const z80dart_device_config &config)
- : device_t(_machine, config),
- device_z80daisy_interface(_machine, config, *this),
- m_config(config)
-{
- for (int i = 0; i < 8; i++)
- m_int_state[i] = 0;
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -285,37 +242,37 @@ z80dart_device::z80dart_device(running_machine &_machine, const z80dart_device_c
void z80dart_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
- m_channel[CHANNEL_A].start(this, CHANNEL_A, m_config.m_in_rxda_func, m_config.m_out_txda_func, m_config.m_out_dtra_func, m_config.m_out_rtsa_func, m_config.m_out_wrdya_func, m_config.m_out_synca_func);
- m_channel[CHANNEL_B].start(this, CHANNEL_B, m_config.m_in_rxdb_func, m_config.m_out_txdb_func, m_config.m_out_dtrb_func, m_config.m_out_rtsb_func, m_config.m_out_wrdyb_func, m_config.m_out_syncb_func);
+ m_channel[CHANNEL_A].start(this, CHANNEL_A, m_in_rxda_cb, m_out_txda_cb, m_out_dtra_cb, m_out_rtsa_cb, m_out_wrdya_cb, m_out_synca_cb);
+ m_channel[CHANNEL_B].start(this, CHANNEL_B, m_in_rxdb_cb, m_out_txdb_cb, m_out_dtrb_cb, m_out_rtsb_cb, m_out_wrdyb_cb, m_out_syncb_cb);
- if (m_config.m_rx_clock_a != 0)
+ if (m_rx_clock_a != 0)
{
// allocate channel A receive timer
m_rxca_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_rxc_tick), (void *)&m_channel[CHANNEL_A]);
- m_rxca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_rx_clock_a));
+ m_rxca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rx_clock_a));
}
- if (m_config.m_tx_clock_a != 0)
+ if (m_tx_clock_a != 0)
{
// allocate channel A transmit timer
m_txca_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_txc_tick), (void *)&m_channel[CHANNEL_A]);
- m_txca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_tx_clock_a));
+ m_txca_timer->adjust(attotime::zero, 0, attotime::from_hz(m_tx_clock_a));
}
- if (m_config.m_rx_clock_b != 0)
+ if (m_rx_clock_b != 0)
{
// allocate channel B receive timer
m_rxcb_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_rxc_tick), (void *)&m_channel[CHANNEL_B]);
- m_rxcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_rx_clock_b));
+ m_rxcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rx_clock_b));
}
- if (m_config.m_tx_clock_b != 0)
+ if (m_tx_clock_b != 0)
{
// allocate channel B transmit timer
m_txcb_timer = machine().scheduler().timer_alloc(FUNC(dart_channel::static_txc_tick), (void *)&m_channel[CHANNEL_B]);
- m_txcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_tx_clock_b));
+ m_txcb_timer->adjust(attotime::zero, 0, attotime::from_hz(m_tx_clock_b));
}
save_item(NAME(m_int_state));
diff --git a/src/emu/machine/z80dart.h b/src/emu/machine/z80dart.h
index 00b3557e2e6..805c9427f0d 100644
--- a/src/emu/machine/z80dart.h
+++ b/src/emu/machine/z80dart.h
@@ -153,44 +153,21 @@ struct z80dart_interface
int m_rx_clock_b; // channel B receive clock
int m_tx_clock_b; // channel B transmit clock
- devcb_read_line m_in_rxda_func;
- devcb_write_line m_out_txda_func;
- devcb_write_line m_out_dtra_func;
- devcb_write_line m_out_rtsa_func;
- devcb_write_line m_out_wrdya_func;
- devcb_write_line m_out_synca_func;
-
- devcb_read_line m_in_rxdb_func;
- devcb_write_line m_out_txdb_func;
- devcb_write_line m_out_dtrb_func;
- devcb_write_line m_out_rtsb_func;
- devcb_write_line m_out_wrdyb_func;
- devcb_write_line m_out_syncb_func;
-
- devcb_write_line m_out_int_func;
-};
-
-
-
-// ======================> z80dart_device_config
-
-class z80dart_device_config : public device_config,
- public device_config_z80daisy_interface,
- public z80dart_interface
-{
- friend class z80dart_device;
-
- // construction/destruction
- z80dart_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read_line m_in_rxda_cb;
+ devcb_write_line m_out_txda_cb;
+ devcb_write_line m_out_dtra_cb;
+ devcb_write_line m_out_rtsa_cb;
+ devcb_write_line m_out_wrdya_cb;
+ devcb_write_line m_out_synca_cb;
+
+ devcb_read_line m_in_rxdb_cb;
+ devcb_write_line m_out_txdb_cb;
+ devcb_write_line m_out_dtrb_cb;
+ devcb_write_line m_out_rtsb_cb;
+ devcb_write_line m_out_wrdyb_cb;
+ devcb_write_line m_out_syncb_cb;
+
+ devcb_write_line m_out_int_cb;
};
@@ -198,15 +175,15 @@ protected:
// ======================> z80dart_device
class z80dart_device : public device_t,
- public device_z80daisy_interface
+ public device_z80daisy_interface,
+ public z80dart_interface
{
- friend class z80dart_device_config;
friend class dart_channel;
+public:
// construction/destruction
- z80dart_device(running_machine &_machine, const z80dart_device_config &_config);
+ z80dart_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
// control register access
UINT8 control_read(int which) { return m_channel[which].control_read(); }
void control_write(int which, UINT8 data) { return m_channel[which].control_write(data); }
@@ -228,6 +205,7 @@ public:
private:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -333,7 +311,6 @@ private:
};
// internal state
- const z80dart_device_config & m_config;
devcb_resolved_write_line m_out_int_func;
dart_channel m_channel[2]; // channels
int m_int_state[8]; // interrupt state
diff --git a/src/emu/machine/z80dma.c b/src/emu/machine/z80dma.c
index bfdcea40ead..2a2c8f3a291 100644
--- a/src/emu/machine/z80dma.c
+++ b/src/emu/machine/z80dma.c
@@ -28,14 +28,6 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z80DMA = z80dma_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
@@ -141,38 +133,20 @@ const int TM_SEARCH_TRANSFER = 0x03;
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// z80dma_device_config - constructor
-//-------------------------------------------------
-
-z80dma_device_config::z80dma_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Z8410", tag, owner, clock),
- device_config_z80daisy_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *z80dma_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(z80dma_device_config(mconfig, tag, owner, clock));
-}
-
+// device type definition
+const device_type Z80DMA = &device_creator<z80dma_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// z80dma_device - constructor
//-------------------------------------------------
-device_t *z80dma_device_config::alloc_device(running_machine &machine) const
+z80dma_device::z80dma_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z80DMA, "Z8410", tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this)
{
- return auto_alloc(machine, z80dma_device(machine, *this));
}
@@ -182,7 +156,7 @@ device_t *z80dma_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void z80dma_device_config::device_config_complete()
+void z80dma_device::device_config_complete()
{
// inherit a copy of the static data
const z80dma_interface *intf = reinterpret_cast<const z80dma_interface *>(static_config());
@@ -192,34 +166,17 @@ void z80dma_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_out_busreq_func, 0, sizeof(m_out_busreq_func));
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
- memset(&m_out_bao_func, 0, sizeof(m_out_bao_func));
- memset(&m_in_mreq_func, 0, sizeof(m_in_mreq_func));
- memset(&m_out_mreq_func, 0, sizeof(m_out_mreq_func));
- memset(&m_in_iorq_func, 0, sizeof(m_in_iorq_func));
- memset(&m_out_iorq_func, 0, sizeof(m_out_iorq_func));
+ memset(&m_out_busreq_cb, 0, sizeof(m_out_busreq_cb));
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
+ memset(&m_out_bao_cb, 0, sizeof(m_out_bao_cb));
+ memset(&m_in_mreq_cb, 0, sizeof(m_in_mreq_cb));
+ memset(&m_out_mreq_cb, 0, sizeof(m_out_mreq_cb));
+ memset(&m_in_iorq_cb, 0, sizeof(m_in_iorq_cb));
+ memset(&m_out_iorq_cb, 0, sizeof(m_out_iorq_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// z80dma_device - constructor
-//-------------------------------------------------
-
-z80dma_device::z80dma_device(running_machine &_machine, const z80dma_device_config &_config)
- : device_t(_machine, _config),
- device_z80daisy_interface(_machine, _config, *this),
- m_config(_config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -227,13 +184,13 @@ z80dma_device::z80dma_device(running_machine &_machine, const z80dma_device_conf
void z80dma_device::device_start()
{
// resolve callbacks
- devcb_resolve_write_line(&m_out_busreq_func, &m_config.m_out_busreq_func, this);
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
- devcb_resolve_write_line(&m_out_bao_func, &m_config.m_out_bao_func, this);
- devcb_resolve_read8(&m_in_mreq_func, &m_config.m_in_mreq_func, this);
- devcb_resolve_write8(&m_out_mreq_func, &m_config.m_out_mreq_func, this);
- devcb_resolve_read8(&m_in_iorq_func, &m_config.m_in_iorq_func, this);
- devcb_resolve_write8(&m_out_iorq_func, &m_config.m_out_iorq_func, this);
+ devcb_resolve_write_line(&m_out_busreq_func, &m_out_busreq_cb, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
+ devcb_resolve_write_line(&m_out_bao_func, &m_out_bao_cb, this);
+ devcb_resolve_read8(&m_in_mreq_func, &m_in_mreq_cb, this);
+ devcb_resolve_write8(&m_out_mreq_func, &m_out_mreq_cb, this);
+ devcb_resolve_read8(&m_in_iorq_func, &m_in_iorq_cb, this);
+ devcb_resolve_write8(&m_out_iorq_func, &m_out_iorq_cb, this);
// allocate timer
m_timer = machine().scheduler().timer_alloc(FUNC(static_timerproc), (void *)this);
diff --git a/src/emu/machine/z80dma.h b/src/emu/machine/z80dma.h
index 47643814d42..252c25a137b 100644
--- a/src/emu/machine/z80dma.h
+++ b/src/emu/machine/z80dma.h
@@ -58,40 +58,17 @@
struct z80dma_interface
{
- devcb_write_line m_out_busreq_func;
- devcb_write_line m_out_int_func;
- devcb_write_line m_out_bao_func;
+ devcb_write_line m_out_busreq_cb;
+ devcb_write_line m_out_int_cb;
+ devcb_write_line m_out_bao_cb;
// memory accessors
- devcb_read8 m_in_mreq_func;
- devcb_write8 m_out_mreq_func;
+ devcb_read8 m_in_mreq_cb;
+ devcb_write8 m_out_mreq_cb;
// I/O accessors
- devcb_read8 m_in_iorq_func;
- devcb_write8 m_out_iorq_func;
-};
-
-
-
-// ======================> z80dma_device_config
-
-class z80dma_device_config : public device_config,
- public device_config_z80daisy_interface,
- public z80dma_interface
-{
- friend class z80dma_device;
-
- // construction/destruction
- z80dma_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_iorq_cb;
+ devcb_write8 m_out_iorq_cb;
};
@@ -99,14 +76,13 @@ protected:
// ======================> z80dma_device
class z80dma_device : public device_t,
- public device_z80daisy_interface
+ public device_z80daisy_interface,
+ public z80dma_interface
{
- friend class z80dma_device_config;
-
+public:
// construction/destruction
- z80dma_device(running_machine &_machine, const z80dma_device_config &_config);
+ z80dma_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
UINT8 read();
void write(UINT8 data);
@@ -116,6 +92,7 @@ public:
private:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -140,8 +117,6 @@ private:
void rdy_write_callback(int state);
// internal state
- const z80dma_device_config &m_config;
-
devcb_resolved_write_line m_out_busreq_func;
devcb_resolved_write_line m_out_int_func;
devcb_resolved_write_line m_out_bao_func;
diff --git a/src/emu/machine/z80pio.c b/src/emu/machine/z80pio.c
index 1e6c123d308..35046726c07 100644
--- a/src/emu/machine/z80pio.c
+++ b/src/emu/machine/z80pio.c
@@ -13,14 +13,6 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z80PIO = z80pio_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
@@ -53,38 +45,20 @@ const int ICW_MASK_FOLLOWS = 0x10;
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
-//-------------------------------------------------
-// z80pio_device_config - constructor
-//-------------------------------------------------
-
-z80pio_device_config::z80pio_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Z8420", tag, owner, clock),
- device_config_z80daisy_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *z80pio_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(z80pio_device_config(mconfig, tag, owner, clock));
-}
-
+// device type definition
+const device_type Z80PIO = &device_creator<z80pio_device>;
//-------------------------------------------------
-// alloc_device - allocate a new device object
+// z80pio_device - constructor
//-------------------------------------------------
-device_t *z80pio_device_config::alloc_device(running_machine &machine) const
+z80pio_device::z80pio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z80PIO, "Z8420", tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this)
{
- return auto_alloc(machine, z80pio_device(machine, *this));
}
@@ -94,7 +68,7 @@ device_t *z80pio_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void z80pio_device_config::device_config_complete()
+void z80pio_device::device_config_complete()
{
// inherit a copy of the static data
const z80pio_interface *intf = reinterpret_cast<const z80pio_interface *>(static_config());
@@ -104,45 +78,28 @@ void z80pio_device_config::device_config_complete()
// or initialize to defaults if none provided
else
{
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
- memset(&m_in_pa_func, 0, sizeof(m_in_pa_func));
- memset(&m_out_pa_func, 0, sizeof(m_out_pa_func));
- memset(&m_out_ardy_func, 0, sizeof(m_out_ardy_func));
- memset(&m_in_pb_func, 0, sizeof(m_in_pb_func));
- memset(&m_out_pb_func, 0, sizeof(m_out_pb_func));
- memset(&m_out_brdy_func, 0, sizeof(m_out_brdy_func));
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
+ memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
+ memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
+ memset(&m_out_ardy_cb, 0, sizeof(m_out_ardy_cb));
+ memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
+ memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
+ memset(&m_out_brdy_cb, 0, sizeof(m_out_brdy_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// z80pio_device - constructor
-//-------------------------------------------------
-
-z80pio_device::z80pio_device(running_machine &_machine, const z80pio_device_config &config)
- : device_t(_machine, config),
- device_z80daisy_interface(_machine, config, *this),
- m_config(config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
void z80pio_device::device_start()
{
- m_port[PORT_A].start(this, PORT_A, m_config.m_in_pa_func, m_config.m_out_pa_func, m_config.m_out_ardy_func);
- m_port[PORT_B].start(this, PORT_B, m_config.m_in_pb_func, m_config.m_out_pb_func, m_config.m_out_brdy_func);
+ m_port[PORT_A].start(this, PORT_A, m_in_pa_cb, m_out_pa_cb, m_out_ardy_cb);
+ m_port[PORT_B].start(this, PORT_B, m_in_pb_cb, m_out_pb_cb, m_out_brdy_cb);
// resolve callbacks
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
}
diff --git a/src/emu/machine/z80pio.h b/src/emu/machine/z80pio.h
index 26762e153b1..4a2df0bb03e 100644
--- a/src/emu/machine/z80pio.h
+++ b/src/emu/machine/z80pio.h
@@ -58,38 +58,15 @@
struct z80pio_interface
{
- devcb_write_line m_out_int_func;
+ devcb_write_line m_out_int_cb;
- devcb_read8 m_in_pa_func;
- devcb_write8 m_out_pa_func;
- devcb_write_line m_out_ardy_func;
+ devcb_read8 m_in_pa_cb;
+ devcb_write8 m_out_pa_cb;
+ devcb_write_line m_out_ardy_cb;
- devcb_read8 m_in_pb_func;
- devcb_write8 m_out_pb_func;
- devcb_write_line m_out_brdy_func;
-};
-
-
-
-// ======================> z80pio_device_config
-
-class z80pio_device_config : public device_config,
- public device_config_z80daisy_interface,
- public z80pio_interface
-{
- friend class z80pio_device;
-
- // construction/destruction
- z80pio_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_pb_cb;
+ devcb_write8 m_out_pb_cb;
+ devcb_write_line m_out_brdy_cb;
};
@@ -97,13 +74,9 @@ protected:
// ======================> z80pio_device
class z80pio_device : public device_t,
- public device_z80daisy_interface
+ public device_z80daisy_interface,
+ public z80pio_interface
{
- friend class z80pio_device_config;
-
- // construction/destruction
- z80pio_device(running_machine &_machine, const z80pio_device_config &config);
-
public:
enum
{
@@ -112,6 +85,9 @@ public:
PORT_COUNT
};
+ // construction/destruction
+ z80pio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
// I/O line access
int rdy(int which) { return m_port[which].rdy(); }
void strobe(int which, bool state) { m_port[which].strobe(state); }
@@ -130,6 +106,7 @@ public:
private:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -197,7 +174,6 @@ private:
};
// internal state
- const z80pio_device_config &m_config;
pio_port m_port[2];
devcb_resolved_write_line m_out_int_func;
};
diff --git a/src/emu/machine/z80sio.c b/src/emu/machine/z80sio.c
index ecc93d16913..8ddcd54806a 100644
--- a/src/emu/machine/z80sio.c
+++ b/src/emu/machine/z80sio.c
@@ -13,6 +13,9 @@
#include "cpu/z80/z80daisy.h"
+// device type definition
+const device_type Z80SIO = &device_creator<z80sio_device>;
+
//**************************************************************************
// DEBUGGING
@@ -25,14 +28,6 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z80SIO = z80sio_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
@@ -248,8 +243,8 @@ const UINT8 z80sio_device::k_int_priority[] =
inline void z80sio_device::update_interrupt_state()
{
// if we have a callback, update it with the current state
- if (m_config.m_irq_cb != NULL)
- (*m_config.m_irq_cb)(this, (z80daisy_irq_state() & Z80_DAISY_INT) ? ASSERT_LINE : CLEAR_LINE);
+ if (m_irq_cb != NULL)
+ (*m_irq_cb)(this, (z80daisy_irq_state() & Z80_DAISY_INT) ? ASSERT_LINE : CLEAR_LINE);
}
@@ -295,38 +290,19 @@ inline attotime z80sio_device::sio_channel::compute_time_per_character()
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
-// z80sio_device_config - constructor
-//-------------------------------------------------
-
-z80sio_device_config::z80sio_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Zilog Z80 SIO", tag, owner, clock),
- device_config_z80daisy_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *z80sio_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(z80sio_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
+// z80sio_device - constructor
//-------------------------------------------------
-device_t *z80sio_device_config::alloc_device(running_machine &machine) const
+z80sio_device::z80sio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z80SIO, "Zilog Z80 SIO", tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this)
{
- return auto_alloc(machine, z80sio_device(machine, *this));
+ for (int i = 0; i < 8; i++)
+ m_int_state[i] = 0;
}
@@ -336,7 +312,7 @@ device_t *z80sio_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void z80sio_device_config::device_config_complete()
+void z80sio_device::device_config_complete()
{
// inherit a copy of the static data
const z80sio_interface *intf = reinterpret_cast<const z80sio_interface *>(static_config());
@@ -356,25 +332,6 @@ void z80sio_device_config::device_config_complete()
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// z80sio_device - constructor
-//-------------------------------------------------
-
-z80sio_device::z80sio_device(running_machine &_machine, const z80sio_device_config &config)
- : device_t(_machine, config),
- device_z80daisy_interface(_machine, config, *this),
- m_config(config)
-{
- for (int i = 0; i < 8; i++)
- m_int_state[i] = 0;
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -609,12 +566,12 @@ void z80sio_device::sio_channel::control_write(UINT8 data)
// SIO write register 5
case 5:
- if (((old ^ data) & SIO_WR5_DTR) && m_device->m_config.m_dtr_changed_cb)
- (*m_device->m_config.m_dtr_changed_cb)(m_device, m_index, (data & SIO_WR5_DTR) != 0);
- if (((old ^ data) & SIO_WR5_SEND_BREAK) && m_device->m_config.m_break_changed_cb)
- (*m_device->m_config.m_break_changed_cb)(m_device, m_index, (data & SIO_WR5_SEND_BREAK) != 0);
- if (((old ^ data) & SIO_WR5_RTS) && m_device->m_config.m_rts_changed_cb)
- (*m_device->m_config.m_rts_changed_cb)(m_device, m_index, (data & SIO_WR5_RTS) != 0);
+ if (((old ^ data) & SIO_WR5_DTR) && m_device->m_dtr_changed_cb)
+ (*m_device->m_dtr_changed_cb)(m_device, m_index, (data & SIO_WR5_DTR) != 0);
+ if (((old ^ data) & SIO_WR5_SEND_BREAK) && m_device->m_break_changed_cb)
+ (*m_device->m_break_changed_cb)(m_device, m_index, (data & SIO_WR5_SEND_BREAK) != 0);
+ if (((old ^ data) & SIO_WR5_RTS) && m_device->m_rts_changed_cb)
+ (*m_device->m_rts_changed_cb)(m_device, m_index, (data & SIO_WR5_RTS) != 0);
break;
}
}
@@ -784,8 +741,8 @@ void z80sio_device::sio_channel::serial_callback()
VPRINTF(("serial_callback(%c): Transmitting %02x\n", 'A' + m_index, m_outbuf));
// actually transmit the character
- if (m_device->m_config.m_transmit_cb != NULL)
- (*m_device->m_config.m_transmit_cb)(m_device, m_index, m_outbuf);
+ if (m_device->m_transmit_cb != NULL)
+ (*m_device->m_transmit_cb)(m_device, m_index, m_outbuf);
// update the status register
m_status[0] |= SIO_RR0_TX_BUFFER_EMPTY;
@@ -799,8 +756,8 @@ void z80sio_device::sio_channel::serial_callback()
}
// ask the polling callback if there is data to receive
- if (m_device->m_config.m_receive_poll_cb != NULL)
- data = (*m_device->m_config.m_receive_poll_cb)(m_device, m_index);
+ if (m_device->m_receive_poll_cb != NULL)
+ data = (*m_device->m_receive_poll_cb)(m_device, m_index);
// if we have buffered data, pull it
if (m_receive_inptr != m_receive_outptr)
diff --git a/src/emu/machine/z80sio.h b/src/emu/machine/z80sio.h
index b50cf583c57..c1141251036 100644
--- a/src/emu/machine/z80sio.h
+++ b/src/emu/machine/z80sio.h
@@ -42,40 +42,16 @@ struct z80sio_interface
-// ======================> z80sio_device_config
-
-class z80sio_device_config : public device_config,
- public device_config_z80daisy_interface,
- public z80sio_interface
-{
- friend class z80sio_device;
-
- // construction/destruction
- z80sio_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
-};
-
-
-
// ======================> z80sio_device
class z80sio_device : public device_t,
- public device_z80daisy_interface
+ public device_z80daisy_interface,
+ public z80sio_interface
{
- friend class z80sio_device_config;
-
+public:
// construction/destruction
- z80sio_device(running_machine &_machine, const z80sio_device_config &config);
+ z80sio_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
// control register I/O
UINT8 control_read(int ch) { return m_channel[ch].control_read(); }
void control_write(int ch, UINT8 data) { m_channel[ch].control_write(data); }
@@ -93,6 +69,7 @@ public:
private:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -152,7 +129,6 @@ private:
};
// internal state
- const z80sio_device_config &m_config;
sio_channel m_channel[2]; // 2 channels
UINT8 m_int_state[8]; // interrupt states
diff --git a/src/emu/machine/z80sti.c b/src/emu/machine/z80sti.c
index 2dfc89e7c9a..79ddaf09329 100644
--- a/src/emu/machine/z80sti.c
+++ b/src/emu/machine/z80sti.c
@@ -24,6 +24,9 @@
+// device type definition
+const device_type Z80STI = &device_creator<z80sti_device>;
+
//**************************************************************************
// DEBUGGING
//**************************************************************************
@@ -35,14 +38,6 @@
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z80STI = z80sti_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
// CONSTANTS
//**************************************************************************
@@ -144,38 +139,17 @@ static const int PRESCALER[] = { 0, 4, 10, 16, 50, 64, 100, 200 };
//**************************************************************************
-// DEVICE CONFIGURATION
+// LIVE DEVICE
//**************************************************************************
//-------------------------------------------------
-// z80sti_device_config - constructor
-//-------------------------------------------------
-
-z80sti_device_config::z80sti_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
- : device_config(mconfig, static_alloc_device_config, "Mostek MK3801", tag, owner, clock),
- device_config_z80daisy_interface(mconfig, *this)
-{
-}
-
-
-//-------------------------------------------------
-// static_alloc_device_config - allocate a new
-// configuration object
-//-------------------------------------------------
-
-device_config *z80sti_device_config::static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock)
-{
- return global_alloc(z80sti_device_config(mconfig, tag, owner, clock));
-}
-
-
-//-------------------------------------------------
-// alloc_device - allocate a new device object
+// z80sti_device - constructor
//-------------------------------------------------
-device_t *z80sti_device_config::alloc_device(running_machine &machine) const
+z80sti_device::z80sti_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z80STI, "Mostek MK3801", tag, owner, clock),
+ device_z80daisy_interface(mconfig, *this)
{
- return auto_alloc(machine, z80sti_device(machine, *this));
}
@@ -185,7 +159,7 @@ device_t *z80sti_device_config::alloc_device(running_machine &machine) const
// complete
//-------------------------------------------------
-void z80sti_device_config::device_config_complete()
+void z80sti_device::device_config_complete()
{
// inherit a copy of the static data
const z80sti_interface *intf = reinterpret_cast<const z80sti_interface *>(static_config());
@@ -196,36 +170,19 @@ void z80sti_device_config::device_config_complete()
else
{
m_rx_clock = m_tx_clock = 0;
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
- memset(&m_in_gpio_func, 0, sizeof(m_in_gpio_func));
- memset(&m_out_gpio_func, 0, sizeof(m_out_gpio_func));
- memset(&m_in_si_func, 0, sizeof(m_in_si_func));
- memset(&m_out_so_func, 0, sizeof(m_out_so_func));
- memset(&m_out_tao_func, 0, sizeof(m_out_tao_func));
- memset(&m_out_tbo_func, 0, sizeof(m_out_tbo_func));
- memset(&m_out_tco_func, 0, sizeof(m_out_tco_func));
- memset(&m_out_tdo_func, 0, sizeof(m_out_tdo_func));
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
+ memset(&m_in_gpio_cb, 0, sizeof(m_in_gpio_cb));
+ memset(&m_out_gpio_cb, 0, sizeof(m_out_gpio_cb));
+ memset(&m_in_si_cb, 0, sizeof(m_in_si_cb));
+ memset(&m_out_so_cb, 0, sizeof(m_out_so_cb));
+ memset(&m_out_tao_cb, 0, sizeof(m_out_tao_cb));
+ memset(&m_out_tbo_cb, 0, sizeof(m_out_tbo_cb));
+ memset(&m_out_tco_cb, 0, sizeof(m_out_tco_cb));
+ memset(&m_out_tdo_cb, 0, sizeof(m_out_tdo_cb));
}
}
-
-//**************************************************************************
-// LIVE DEVICE
-//**************************************************************************
-
-//-------------------------------------------------
-// z80sti_device - constructor
-//-------------------------------------------------
-
-z80sti_device::z80sti_device(running_machine &_machine, const z80sti_device_config &config)
- : device_t(_machine, config),
- device_z80daisy_interface(_machine, config, *this),
- m_config(config)
-{
-}
-
-
//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -233,15 +190,15 @@ z80sti_device::z80sti_device(running_machine &_machine, const z80sti_device_conf
void z80sti_device::device_start()
{
// resolve callbacks
- devcb_resolve_read8(&m_in_gpio_func, &m_config.m_in_gpio_func, this);
- devcb_resolve_write8(&m_out_gpio_func, &m_config.m_out_gpio_func, this);
- devcb_resolve_read_line(&m_in_si_func, &m_config.m_in_si_func, this);
- devcb_resolve_write_line(&m_out_so_func, &m_config.m_out_so_func, this);
- devcb_resolve_write_line(&m_out_timer_func[TIMER_A], &m_config.m_out_tao_func, this);
- devcb_resolve_write_line(&m_out_timer_func[TIMER_B], &m_config.m_out_tbo_func, this);
- devcb_resolve_write_line(&m_out_timer_func[TIMER_C], &m_config.m_out_tco_func, this);
- devcb_resolve_write_line(&m_out_timer_func[TIMER_D], &m_config.m_out_tdo_func, this);
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
+ devcb_resolve_read8(&m_in_gpio_func, &m_in_gpio_cb, this);
+ devcb_resolve_write8(&m_out_gpio_func, &m_out_gpio_cb, this);
+ devcb_resolve_read_line(&m_in_si_func, &m_in_si_cb, this);
+ devcb_resolve_write_line(&m_out_so_func, &m_out_so_cb, this);
+ devcb_resolve_write_line(&m_out_timer_func[TIMER_A], &m_out_tao_cb, this);
+ devcb_resolve_write_line(&m_out_timer_func[TIMER_B], &m_out_tbo_cb, this);
+ devcb_resolve_write_line(&m_out_timer_func[TIMER_C], &m_out_tco_cb, this);
+ devcb_resolve_write_line(&m_out_timer_func[TIMER_D], &m_out_tdo_cb, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
// create the counter timers
m_timer[TIMER_A] = machine().scheduler().timer_alloc(FUNC(static_timer_count), (void *)this);
@@ -250,17 +207,17 @@ void z80sti_device::device_start()
m_timer[TIMER_D] = machine().scheduler().timer_alloc(FUNC(static_timer_count), (void *)this);
// create serial receive clock timer
- if (m_config.m_rx_clock > 0)
+ if (m_rx_clock > 0)
{
m_rx_timer = machine().scheduler().timer_alloc(FUNC(static_rx_tick), (void *)this);
- m_rx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_rx_clock));
+ m_rx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_rx_clock));
}
// create serial transmit clock timer
- if (m_config.m_tx_clock > 0)
+ if (m_tx_clock > 0)
{
m_tx_timer = machine().scheduler().timer_alloc(FUNC(static_tx_tick), (void *)this);
- m_tx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_config.m_tx_clock));
+ m_tx_timer->adjust(attotime::zero, 0, attotime::from_hz(m_tx_clock));
}
// register for state saving
diff --git a/src/emu/machine/z80sti.h b/src/emu/machine/z80sti.h
index 0a413a31cfc..e316949c038 100644
--- a/src/emu/machine/z80sti.h
+++ b/src/emu/machine/z80sti.h
@@ -61,54 +61,31 @@ struct z80sti_interface
int m_tx_clock; // serial transmit clock
// this gets called on each change of the _INT pin (pin 17)
- devcb_write_line m_out_int_func;
+ devcb_write_line m_out_int_cb;
// this is called on each read of the GPIO pins
- devcb_read8 m_in_gpio_func;
+ devcb_read8 m_in_gpio_cb;
// this is called on each write of the GPIO pins
- devcb_write8 m_out_gpio_func;
+ devcb_write8 m_out_gpio_cb;
// this gets called for each read of the SI pin (pin 38)
- devcb_read_line m_in_si_func;
+ devcb_read_line m_in_si_cb;
// this gets called for each change of the SO pin (pin 37)
- devcb_write_line m_out_so_func;
+ devcb_write_line m_out_so_cb;
// this gets called for each change of the TAO pin (pin 1)
- devcb_write_line m_out_tao_func;
+ devcb_write_line m_out_tao_cb;
// this gets called for each change of the TBO pin (pin 2)
- devcb_write_line m_out_tbo_func;
+ devcb_write_line m_out_tbo_cb;
// this gets called for each change of the TCO pin (pin 3)
- devcb_write_line m_out_tco_func;
+ devcb_write_line m_out_tco_cb;
// this gets called for each change of the TDO pin (pin 4)
- devcb_write_line m_out_tdo_func;
-};
-
-
-
-// ======================> z80sti_device_config
-
-class z80sti_device_config : public device_config,
- public device_config_z80daisy_interface,
- public z80sti_interface
-{
- friend class z80sti_device;
-
- // construction/destruction
- z80sti_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_write_line m_out_tdo_cb;
};
@@ -116,14 +93,13 @@ protected:
// ======================> z80sti_device
class z80sti_device : public device_t,
- public device_z80daisy_interface
+ public device_z80daisy_interface,
+ public z80sti_interface
{
- friend class z80sti_device_config;
-
+public:
// construction/destruction
- z80sti_device(running_machine &_machine, const z80sti_device_config &config);
+ z80sti_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
// I/O accessors
UINT8 read(offs_t offset);
void write(offs_t offset, UINT8 data);
@@ -135,6 +111,7 @@ public:
private:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
@@ -154,9 +131,6 @@ private:
static TIMER_CALLBACK( static_timer_count ) { reinterpret_cast<z80sti_device *>(ptr)->timer_count(param); }
- // internal state
- const z80sti_device_config &m_config;
-
// device callbacks
devcb_resolved_read8 m_in_gpio_func;
devcb_resolved_write8 m_out_gpio_func;
diff --git a/src/emu/machine/z8536.c b/src/emu/machine/z8536.c
index 322d764ada2..aa779c6f9ec 100644
--- a/src/emu/machine/z8536.c
+++ b/src/emu/machine/z8536.c
@@ -12,6 +12,9 @@
#include "machine/devhelpr.h"
+// device type definition
+const device_type Z8536 = &device_creator<z8536_device>;
+
//**************************************************************************
// MACROS / CONSTANTS
@@ -234,49 +237,6 @@ enum
//**************************************************************************
-// DEVICE DEFINITIONS
-//**************************************************************************
-
-const device_type Z8536 = z8536_device_config::static_alloc_device_config;
-
-
-
-//**************************************************************************
-// DEVICE CONFIGURATION
-//**************************************************************************
-
-GENERIC_DEVICE_CONFIG_SETUP(z8536, "Zilog Z8536")
-
-
-//-------------------------------------------------
-// device_config_complete - perform any
-// operations now that the configuration is
-// complete
-//-------------------------------------------------
-
-void z8536_device_config::device_config_complete()
-{
- // inherit a copy of the static data
- const z8536_interface *intf = reinterpret_cast<const z8536_interface *>(static_config());
- if (intf != NULL)
- *static_cast<z8536_interface *>(this) = *intf;
-
- // or initialize to defaults if none provided
- else
- {
- memset(&m_out_int_func, 0, sizeof(m_out_int_func));
- memset(&m_in_pa_func, 0, sizeof(m_in_pa_func));
- memset(&m_out_pa_func, 0, sizeof(m_out_pa_func));
- memset(&m_in_pb_func, 0, sizeof(m_in_pb_func));
- memset(&m_out_pb_func, 0, sizeof(m_out_pb_func));
- memset(&m_in_pc_func, 0, sizeof(m_in_pc_func));
- memset(&m_out_pc_func, 0, sizeof(m_out_pc_func));
- }
-}
-
-
-
-//**************************************************************************
// INLINE HELPERS
//**************************************************************************
@@ -415,14 +375,40 @@ inline void z8536_device::gate(device_timer_id id)
// z8536_device - constructor
//-------------------------------------------------
-z8536_device::z8536_device(running_machine &_machine, const z8536_device_config &config)
- : device_t(_machine, config),
- m_config(config)
+z8536_device::z8536_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
+ : device_t(mconfig, Z8536, "Zilog Z8536", tag, owner, clock)
{
}
//-------------------------------------------------
+// device_config_complete - perform any
+// operations now that the configuration is
+// complete
+//-------------------------------------------------
+
+void z8536_device::device_config_complete()
+{
+ // inherit a copy of the static data
+ const z8536_interface *intf = reinterpret_cast<const z8536_interface *>(static_config());
+ if (intf != NULL)
+ *static_cast<z8536_interface *>(this) = *intf;
+
+ // or initialize to defaults if none provided
+ else
+ {
+ memset(&m_out_int_cb, 0, sizeof(m_out_int_cb));
+ memset(&m_in_pa_cb, 0, sizeof(m_in_pa_cb));
+ memset(&m_out_pa_cb, 0, sizeof(m_out_pa_cb));
+ memset(&m_in_pb_cb, 0, sizeof(m_in_pb_cb));
+ memset(&m_out_pb_cb, 0, sizeof(m_out_pb_cb));
+ memset(&m_in_pc_cb, 0, sizeof(m_in_pc_cb));
+ memset(&m_out_pc_cb, 0, sizeof(m_out_pc_cb));
+ }
+}
+
+
+//-------------------------------------------------
// device_start - device-specific startup
//-------------------------------------------------
@@ -434,13 +420,13 @@ void z8536_device::device_start()
m_timer[TIMER_3] = timer_alloc(TIMER_3);
// resolve callbacks
- devcb_resolve_write_line(&m_out_int_func, &m_config.m_out_int_func, this);
- devcb_resolve_read8(&m_in_pa_func, &m_config.m_in_pa_func, this);
- devcb_resolve_write8(&m_out_pa_func, &m_config.m_out_pa_func, this);
- devcb_resolve_read8(&m_in_pb_func, &m_config.m_in_pb_func, this);
- devcb_resolve_write8(&m_out_pb_func, &m_config.m_out_pb_func, this);
- devcb_resolve_read8(&m_in_pc_func, &m_config.m_in_pc_func, this);
- devcb_resolve_write8(&m_out_pc_func, &m_config.m_out_pc_func, this);
+ devcb_resolve_write_line(&m_out_int_func, &m_out_int_cb, this);
+ devcb_resolve_read8(&m_in_pa_func, &m_in_pa_cb, this);
+ devcb_resolve_write8(&m_out_pa_func, &m_out_pa_cb, this);
+ devcb_resolve_read8(&m_in_pb_func, &m_in_pb_cb, this);
+ devcb_resolve_write8(&m_out_pb_func, &m_out_pb_cb, this);
+ devcb_resolve_read8(&m_in_pc_func, &m_in_pc_cb, this);
+ devcb_resolve_write8(&m_out_pc_func, &m_out_pc_cb, this);
}
diff --git a/src/emu/machine/z8536.h b/src/emu/machine/z8536.h
index 9a71eafa92f..10862269ade 100644
--- a/src/emu/machine/z8536.h
+++ b/src/emu/machine/z8536.h
@@ -67,50 +67,28 @@
struct z8536_interface
{
- devcb_write_line m_out_int_func;
+ devcb_write_line m_out_int_cb;
- devcb_read8 m_in_pa_func;
- devcb_write8 m_out_pa_func;
+ devcb_read8 m_in_pa_cb;
+ devcb_write8 m_out_pa_cb;
- devcb_read8 m_in_pb_func;
- devcb_write8 m_out_pb_func;
+ devcb_read8 m_in_pb_cb;
+ devcb_write8 m_out_pb_cb;
- devcb_read8 m_in_pc_func;
- devcb_write8 m_out_pc_func;
-};
-
-
-// ======================> z8536_device_config
-
-class z8536_device_config : public device_config,
- public z8536_interface
-{
- friend class z8536_device;
-
- // construction/destruction
- z8536_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
-
-public:
- // allocators
- static device_config *static_alloc_device_config(const machine_config &mconfig, const char *tag, const device_config *owner, UINT32 clock);
- virtual device_t *alloc_device(running_machine &machine) const;
-
-protected:
- // device_config overrides
- virtual void device_config_complete();
+ devcb_read8 m_in_pc_cb;
+ devcb_write8 m_out_pc_cb;
};
// ======================> z8536_device
-class z8536_device : public device_t
+class z8536_device : public device_t,
+ public z8536_interface
{
- friend class z8536_device_config;
-
+public:
// construction/destruction
- z8536_device(running_machine &_machine, const z8536_device_config &_config);
+ z8536_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
-public:
DECLARE_READ8_MEMBER( read );
DECLARE_WRITE8_MEMBER( write );
@@ -131,6 +109,7 @@ public:
protected:
// device-level overrides
+ virtual void device_config_complete();
virtual void device_start();
virtual void device_reset();
virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr);
@@ -169,8 +148,6 @@ private:
// timers
emu_timer *m_timer[3];
-
- const z8536_device_config &m_config;
};