summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/machine/6821pia.c
diff options
context:
space:
mode:
author Aaron Giles <aaron@aarongiles.com>2011-04-27 05:11:18 +0000
committer Aaron Giles <aaron@aarongiles.com>2011-04-27 05:11:18 +0000
commit919913f118760c0ca41ab63512bd5c106f6fd840 (patch)
treecd6c115c8e9c5280ac4bd16eabfe69c7341151c2 /src/emu/machine/6821pia.c
parent84f2c31f7d6f6c667427b1d60c83e6dc9f420d60 (diff)
Collapsed device_config and device_t into one class. Updated all
existing modern devices and the legacy wrappers to work in this environment. This in general greatly simplifies writing a modern device. [Aaron Giles] General notes: * some more cleanup probably needs to happen behind this change, but I needed to get it in before the next device modernization or import from MESS :) * new template function device_creator which automatically defines the static function that creates the device; use this instead of creating a static_alloc_device_config function * added device_stop() method which is called at around the time the previous device_t's destructor was called; if you auto_free anything, do it here because the machine is gone when the destructor is called * changed the static_set_* calls to pass a device_t & instead of a device_config * * for many devices, the static config structure member names over- lapped the device's names for devcb_* functions; in these cases the members in the interface were renamed to have a _cb suffix * changed the driver_enumerator to only cache 100 machine_configs because caching them all took a ton of memory; fortunately this implementation detail is completely hidden behind the driver_enumerator interface * got rid of the macros for creating derived classes; doing it manually is now clean enough that it isn't worth hiding the details in a macro
Diffstat (limited to 'src/emu/machine/6821pia.c')
-rw-r--r--src/emu/machine/6821pia.c96
1 files changed, 31 insertions, 65 deletions
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));