summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/ecbbus/ecbbus.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/ecbbus/ecbbus.h')
-rw-r--r--src/devices/bus/ecbbus/ecbbus.h187
1 files changed, 187 insertions, 0 deletions
diff --git a/src/devices/bus/ecbbus/ecbbus.h b/src/devices/bus/ecbbus/ecbbus.h
new file mode 100644
index 00000000000..c04a0245596
--- /dev/null
+++ b/src/devices/bus/ecbbus/ecbbus.h
@@ -0,0 +1,187 @@
+// license:BSD-3-Clause
+// copyright-holders:Curt Coder
+/**********************************************************************
+
+ Kontron Europe Card Bus emulation
+
+**********************************************************************
+
+ A B C
+ +5 V --- * 1 * --- +5V
+ D5 --- * 2 * --- D0
+ D6 --- * 3 * --- D7
+ D3 --- * 4 * --- D2
+ D4 --- * 5 * --- A0
+ A2 --- * 6 * --- A3
+ A4 --- * 7 * --- A1
+ A5 --- * 8 * --- A8
+ A6 --- * 9 * --- A7
+ WAIT* --- * 10 * --- D8
+ BUSRQ* --- * 11 * --- IEI
+ BAI1 --- * 12 * --- D9
+ +12 V --- * 13 * --- D10
+ D11 --- * 14 * --- D1
+ -5 V --- * 15 * --- -15 V
+ phi2 --- * 16 * --- IEO
+ BAO1 --- * 17 * --- A11
+ A14 --- * 18 * --- A10
+ +15 V --- * 19 * --- D13
+ M1* --- * 20 * --- NMI*
+ D14 --- * 21 * --- INT*
+ D15 --- * 22 * --- WR*
+ DPR* --- * 23 * --- D12
+ +5VBAT --- * 24 * --- RD*
+ phiN --- * 25 * --- HALT*
+ WRITE EN--- * 26 * --- PWRRCL*
+ IORQ* --- * 27 * --- A12
+ RFSH* --- * 28 * --- A15
+ A13 --- * 29 * --- PHI
+ A9 --- * 30 * --- MREQ*
+ BUSAK* --- * 31 * --- RESET*
+ GND --- * 32 * --- GND
+
+**********************************************************************/
+
+#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() \
+ MCFG_DEVICE_ADD(ECBBUS_TAG, ECBBUS, 0)
+#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);
+
+
+#define MCFG_ECBBUS_IRQ_CALLBACK(_write) \
+ devcb = &ecbbus_device::set_irq_wr_callback(*device, DEVCB_##_write);
+
+#define MCFG_ECBBUS_NMI_CALLBACK(_write) \
+ devcb = &ecbbus_device::set_nmi_wr_callback(*device, DEVCB_##_write);
+
+
+
+//**************************************************************************
+// 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
+
+class device_ecbbus_card_interface;
+
+
+// ======================> ecbbus_device
+
+class ecbbus_device : public device_t
+{
+public:
+ // construction/destruction
+ ecbbus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ template<class _Object> static devcb_base &set_irq_wr_callback(device_t &device, _Object object) { return downcast<ecbbus_device &>(device).m_write_irq.set_callback(object); }
+ template<class _Object> static devcb_base &set_nmi_wr_callback(device_t &device, _Object object) { return downcast<ecbbus_device &>(device).m_write_nmi.set_callback(object); }
+
+ void add_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( irq_w ) { m_write_irq(state); }
+ DECLARE_WRITE_LINE_MEMBER( nmi_w ) { m_write_nmi(state); }
+
+protected:
+ // device-level overrides
+ virtual void device_start();
+
+private:
+ devcb_write_line m_write_irq;
+ devcb_write_line m_write_nmi;
+
+ device_ecbbus_card_interface *m_ecbbus_device[MAX_ECBBUS_SLOTS];
+};
+
+
+// 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_INTERFACE_EXTERN( ecbbus_cards );
+
+
+
+#endif