diff options
author | 2014-04-15 15:11:58 +0000 | |
---|---|---|
committer | 2014-04-15 15:11:58 +0000 | |
commit | 8f416aa02063962fd54e18b487a64b0d0d0d296e (patch) | |
tree | 27538a9c39738ec1fc1092783e150cda743f08bf | |
parent | eb436c17f22bc7bc85816565ad85124096c9141d (diff) |
bitbanger_device: converted to devcb2 (nw)
Loading coco doesn't crash, but someone familiar with the system should test it. Thanks!
-rw-r--r-- | src/emu/bus/rs232/null_modem.c | 14 | ||||
-rw-r--r-- | src/emu/imagedev/bitbngr.c | 22 | ||||
-rw-r--r-- | src/emu/imagedev/bitbngr.h | 48 | ||||
-rw-r--r-- | src/mess/drivers/coco12.c | 6 | ||||
-rw-r--r-- | src/mess/drivers/coco3.c | 6 | ||||
-rw-r--r-- | src/mess/includes/coco.h | 5 | ||||
-rw-r--r-- | src/mess/machine/coco.c | 16 |
7 files changed, 44 insertions, 73 deletions
diff --git a/src/emu/bus/rs232/null_modem.c b/src/emu/bus/rs232/null_modem.c index e477faf5906..ed67584a106 100644 --- a/src/emu/bus/rs232/null_modem.c +++ b/src/emu/bus/rs232/null_modem.c @@ -9,16 +9,12 @@ null_modem_device::null_modem_device(const machine_config &mconfig, const char * { } -static bitbanger_config null_modem_image_config = -{ - DEVCB_DEVICE_LINE_MEMBER(DEVICE_SELF_OWNER, null_modem_device, read), - BITBANGER_MODEM, - BITBANGER_9600, - BITBANGER_0PERCENT -}; - static MACHINE_CONFIG_FRAGMENT(null_modem_config) - MCFG_BITBANGER_ADD("bitbanger", null_modem_image_config); + MCFG_DEVICE_ADD("bitbanger", BITBANGER, 0) + MCFG_BITBANGER_INPUT_CB(WRITELINE(null_modem_device, read)) /* callback */ + MCFG_BITBANGER_DEFAULT_MODE(BITBANGER_MODEM) /* default mode */ + MCFG_BITBANGER_DEFAULT_BAUD(BITBANGER_9600) /* default output baud */ + MCFG_BITBANGER_DEFAULT_TUNE(BITBANGER_0PERCENT) /* default fine tune adjustment */ MACHINE_CONFIG_END machine_config_constructor null_modem_device::device_mconfig_additions() const diff --git a/src/emu/imagedev/bitbngr.c b/src/emu/imagedev/bitbngr.c index 483f568c068..1e7835eb576 100644 --- a/src/emu/imagedev/bitbngr.c +++ b/src/emu/imagedev/bitbngr.c @@ -23,7 +23,8 @@ const device_type BITBANGER = &device_creator<bitbanger_device>; bitbanger_device::bitbanger_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock) : device_t(mconfig, BITBANGER, "Bitbanger", tag, owner, clock, "bitbanger", __FILE__), - device_image_interface(mconfig, *this) + device_image_interface(mconfig, *this), + m_input_cb(*this) { m_output_timer = NULL; m_input_timer = NULL; @@ -314,13 +315,10 @@ void bitbanger_device::device_start(void) m_input_buffer_cursor = 0; /* defaults */ - m_mode = m_default_mode; - m_baud = m_default_baud; - m_tune = m_default_tune; m_current_baud = attotime::from_hz(baud_value()); /* callback */ - m_input_func.resolve(m_input_callback, *this); + m_input_cb.resolve_safe(); } @@ -331,18 +329,6 @@ void bitbanger_device::device_start(void) void bitbanger_device::device_config_complete(void) { - const bitbanger_config *intf = reinterpret_cast<const bitbanger_config *>(static_config()); - if(intf != NULL) - { - *static_cast<bitbanger_config *>(this) = *intf; - } - else - { - memset(&m_input_callback, 0, sizeof(m_input_callback)); - m_default_mode = 0; - m_default_baud = 0; - m_default_tune = 0; - } update_names(BITBANGER, "bitbngr", "bitb"); } @@ -443,7 +429,7 @@ void bitbanger_device::set_input_line(UINT8 line) if (m_current_input != line) { m_current_input = line; - m_input_func(line ? ASSERT_LINE : CLEAR_LINE); + m_input_cb(line ? ASSERT_LINE : CLEAR_LINE); } } diff --git a/src/emu/imagedev/bitbngr.h b/src/emu/imagedev/bitbngr.h index 1c450816311..6e5d811abcf 100644 --- a/src/emu/imagedev/bitbngr.h +++ b/src/emu/imagedev/bitbngr.h @@ -55,40 +55,35 @@ enum CONSTANTS ***************************************************************************/ -#define MCFG_BITBANGER_ADD(_tag, _intrf) \ - MCFG_DEVICE_ADD(_tag, BITBANGER, 0) \ - MCFG_DEVICE_CONFIG(_intrf) - +#define MCFG_BITBANGER_INPUT_CB(_devcb) \ + devcb = &bitbanger_device::set_input_callback(*device, DEVCB2_##_devcb); + +#define MCFG_BITBANGER_DEFAULT_MODE(_mode) \ + bitbanger_device::set_default_mode(*device, _mode); + +#define MCFG_BITBANGER_DEFAULT_BAUD(_baud) \ + bitbanger_device::set_default_baud(*device, _baud); + +#define MCFG_BITBANGER_DEFAULT_TUNE(_tune) \ + bitbanger_device::set_default_tune(*device, _tune); /*************************************************************************** TYPE DEFINITIONS ***************************************************************************/ -struct bitbanger_config -{ - /* callback to driver */ - devcb_write_line m_input_callback; - - /* emulating a printer or modem */ - int m_default_mode; - - /* output bits per second */ - int m_default_baud; - - /* fine tune adjustment to the baud */ - int m_default_tune; -}; - - class bitbanger_device : public device_t, - public device_image_interface, - public bitbanger_config + public device_image_interface { public: // construction/destruction bitbanger_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + template<class _Object> static devcb2_base &set_input_callback(device_t &device, _Object object) { return downcast<bitbanger_device &>(device).m_input_cb.set_callback(object); } + static void set_default_mode(device_t &device, int default_mode) { downcast<bitbanger_device &>(device).m_mode = default_mode; } + static void set_default_baud(device_t &device, int default_baud) { downcast<bitbanger_device &>(device).m_baud = default_baud; } + static void set_default_tune(device_t &device, int default_tune) { downcast<bitbanger_device &>(device).m_tune = default_tune; } + // image-level overrides virtual bool call_load(); virtual void call_unload(); @@ -145,7 +140,8 @@ private: // variables emu_timer * m_output_timer; emu_timer * m_input_timer; - devcb_resolved_write_line m_input_func; + + devcb2_write_line m_input_cb; /* callback to driver */ int m_output_value; int m_build_count; int m_build_byte; @@ -153,9 +149,9 @@ private: attotime m_current_baud; UINT32 m_input_buffer_size; UINT32 m_input_buffer_cursor; - int m_mode; - int m_baud; - int m_tune; + int m_mode; /* emulating a printer or modem */ + int m_baud; /* output bits per second */ + int m_tune; /* fine tune adjustment to the baud */ UINT8 m_current_input; UINT8 m_input_buffer[1000]; }; diff --git a/src/mess/drivers/coco12.c b/src/mess/drivers/coco12.c index 43824e4b251..5dd1780d9bf 100644 --- a/src/mess/drivers/coco12.c +++ b/src/mess/drivers/coco12.c @@ -293,7 +293,11 @@ static MACHINE_CONFIG_START( coco, coco12_state ) MCFG_SAM6883_ADD(SAM_TAG, XTAL_3_579545MHz, coco12_state::sam6883_config) MCFG_SAM6883_RES_CALLBACK(READ8(coco12_state, sam_read)) MCFG_CASSETTE_ADD("cassette", coco_state::coco_cassette_interface) - MCFG_BITBANGER_ADD(BITBANGER_TAG, coco_state::coco_bitbanger_config) + MCFG_DEVICE_ADD(BITBANGER_TAG, BITBANGER, 0) + MCFG_BITBANGER_INPUT_CB(WRITELINE(coco_state, bitbanger_callback)) /* callback */ + MCFG_BITBANGER_DEFAULT_MODE(BITBANGER_PRINTER) /* default mode */ + MCFG_BITBANGER_DEFAULT_BAUD(BITBANGER_600) /* default output baud */ + MCFG_BITBANGER_DEFAULT_TUNE(BITBANGER_0PERCENT) /* default fine tune adjustment */ MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_state::cartridge_config, coco_cart, "pak") // video hardware diff --git a/src/mess/drivers/coco3.c b/src/mess/drivers/coco3.c index 8ad723d5746..88ed89d2cd2 100644 --- a/src/mess/drivers/coco3.c +++ b/src/mess/drivers/coco3.c @@ -262,7 +262,11 @@ static MACHINE_CONFIG_START( coco3, coco3_state ) MCFG_PIA_IRQB_HANDLER(WRITELINE(coco_state, pia1_firq_b)) MCFG_CASSETTE_ADD("cassette", coco_state::coco_cassette_interface) - MCFG_BITBANGER_ADD(BITBANGER_TAG, coco_state::coco_bitbanger_config) + MCFG_DEVICE_ADD(BITBANGER_TAG, BITBANGER, 0) + MCFG_BITBANGER_INPUT_CB(WRITELINE(coco_state, bitbanger_callback)) /* callback */ + MCFG_BITBANGER_DEFAULT_MODE(BITBANGER_PRINTER) /* default mode */ + MCFG_BITBANGER_DEFAULT_BAUD(BITBANGER_600) /* default output baud */ + MCFG_BITBANGER_DEFAULT_TUNE(BITBANGER_0PERCENT) /* default fine tune adjustment */ MCFG_COCO_CARTRIDGE_ADD(CARTRIDGE_TAG, coco_state::cartridge_config, coco_cart, "fdcv11") MCFG_COCO_VHD_ADD(VHD0_TAG) MCFG_COCO_VHD_ADD(VHD1_TAG) diff --git a/src/mess/includes/coco.h b/src/mess/includes/coco.h index 65b7eb7e120..92e622a9dec 100644 --- a/src/mess/includes/coco.h +++ b/src/mess/includes/coco.h @@ -97,7 +97,6 @@ public: optional_device<coco_vhd_image_device> m_vhd_1; static const cococart_interface cartridge_config; - static const bitbanger_config coco_bitbanger_config; static const cassette_interface coco_cassette_interface; // driver update handlers @@ -135,6 +134,9 @@ public: // floating bus DECLARE_READ8_MEMBER( floating_bus_read ) { return floating_bus_read(); } + + // bitbanger + DECLARE_WRITE_LINE_MEMBER( bitbanger_callback ); protected: // device-level overrides @@ -214,7 +216,6 @@ private: void poll_hires_joystick(void); void update_cassout(int cassout); void update_prinout(bool prinout); - DECLARE_WRITE_LINE_MEMBER( bitbanger_callback ); void diecom_lightgun_clock(void); // thin wrappers for PIA output diff --git a/src/mess/machine/coco.c b/src/mess/machine/coco.c index 8f19ac906f0..efd32826169 100644 --- a/src/mess/machine/coco.c +++ b/src/mess/machine/coco.c @@ -1039,22 +1039,6 @@ WRITE_LINE_MEMBER( coco_state::bitbanger_callback ) bitbanger_changed(state ? true : false); } - - -//------------------------------------------------- -// bitbanger_config -//------------------------------------------------- - -const bitbanger_config coco_state::coco_bitbanger_config = -{ - DEVCB_DRIVER_LINE_MEMBER(coco_state, bitbanger_callback), /* callback */ - BITBANGER_PRINTER, /* default mode */ - BITBANGER_600, /* default output baud */ - BITBANGER_0PERCENT /* default fine tune adjustment */ -}; - - - //------------------------------------------------- // poll_hires_joystick //------------------------------------------------- |