diff options
Diffstat (limited to 'src/emu/bus/ecbbus/ecbbus.h')
-rw-r--r-- | src/emu/bus/ecbbus/ecbbus.h | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/src/emu/bus/ecbbus/ecbbus.h b/src/emu/bus/ecbbus/ecbbus.h new file mode 100644 index 00000000000..7be19a40b91 --- /dev/null +++ b/src/emu/bus/ecbbus/ecbbus.h @@ -0,0 +1,170 @@ +// license:BSD-3-Clause +// copyright-holders:Curt Coder +/********************************************************************** + + Conitec Datensysteme ECB Bus emulation + + Copyright MESS Team. + Visit http://mamedev.org for licensing and usage restrictions. + +**********************************************************************/ + +#pragma once + +#ifndef __ECBBUS__ +#define __ECBBUS__ + +#include "emu.h" + + +//************************************************************************** +// CONSTANTS +//************************************************************************** + +#define ECBBUS_TAG "ecbbus" + + +#define MAX_ECBBUS_SLOTS 16 + + + +//************************************************************************** +// INTERFACE CONFIGURATION MACROS +//************************************************************************** + +#define MCFG_ECBBUS_ADD(_cpu_tag, _config) \ + MCFG_DEVICE_ADD(ECBBUS_TAG, ECBBUS, 0) \ + MCFG_DEVICE_CONFIG(_config) \ + ecbbus_device::static_set_cputag(*device, _cpu_tag); + + +#define ECBBUS_INTERFACE(_name) \ + const ecbbus_interface (_name) = + + +#define MCFG_ECBBUS_SLOT_ADD(_num, _tag, _slot_intf, _def_slot) \ + MCFG_DEVICE_ADD(_tag, ECBBUS_SLOT, 0) \ + MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, false) \ + ecbbus_slot_device::static_set_ecbbus_slot(*device, ECBBUS_TAG, _num); + + + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> ecbbus_slot_device + +class ecbbus_device; + +class ecbbus_slot_device : public device_t, + public device_slot_interface +{ +public: + // construction/destruction + ecbbus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + + // device-level overrides + virtual void device_start(); + + // inline configuration + static void static_set_ecbbus_slot(device_t &device, const char *tag, int num); + +private: + // configuration + const char *m_bus_tag; + int m_bus_num; + ecbbus_device *m_bus; +}; + + +// device type definition +extern const device_type ECBBUS_SLOT; + + +// ======================> ecbbus_interface + +struct ecbbus_interface +{ + devcb_write_line m_out_int_cb; + devcb_write_line m_out_nmi_cb; +}; + +class device_ecbbus_card_interface; + + +// ======================> ecbbus_device + +class ecbbus_device : public device_t, + public ecbbus_interface +{ +public: + // construction/destruction + ecbbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + // inline configuration + static void static_set_cputag(device_t &device, const char *tag); + + void add_ecbbus_card(device_ecbbus_card_interface *card, int pos); + + DECLARE_READ8_MEMBER( mem_r ); + DECLARE_WRITE8_MEMBER( mem_w ); + + DECLARE_READ8_MEMBER( io_r ); + DECLARE_WRITE8_MEMBER( io_w ); + + DECLARE_WRITE_LINE_MEMBER( int_w ); + DECLARE_WRITE_LINE_MEMBER( nmi_w ); + +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + virtual void device_config_complete(); + +private: + // internal state + cpu_device *m_maincpu; + + devcb_resolved_write_line m_out_int_func; + devcb_resolved_write_line m_out_nmi_func; + + device_ecbbus_card_interface *m_ecbbus_device[MAX_ECBBUS_SLOTS]; + const char *m_cputag; +}; + + +// device type definition +extern const device_type ECBBUS; + + +// ======================> device_ecbbus_card_interface + +// class representing interface-specific live ecbbus card +class device_ecbbus_card_interface : public device_slot_card_interface +{ + friend class ecbbus_device; + +public: + // construction/destruction + device_ecbbus_card_interface(const machine_config &mconfig, device_t &device); + virtual ~device_ecbbus_card_interface(); + + // optional operation overrides + virtual UINT8 ecbbus_mem_r(offs_t offset) { return 0; }; + virtual void ecbbus_mem_w(offs_t offset, UINT8 data) { }; + virtual UINT8 ecbbus_io_r(offs_t offset) { return 0; }; + virtual void ecbbus_io_w(offs_t offset, UINT8 data) { }; + +public: + ecbbus_slot_device *m_slot; +}; + + +// slot devices +#include "grip.h" + +SLOT_INTERFACE_EXTERN( ecbbus_cards ); + + + +#endif |