summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/bus/imi7000/imi7000.h
blob: e360ae99feb55377cb6701a5a7a8fd3286fe1759 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************

    International Memories Incorporated IMI 7000 Series bus emulation

    Copyright MESS Team.
    Visit http://mamedev.org for licensing and usage restrictions.

**********************************************************************

                    GND       1      2       GND
                  SPARE       3      4       SPARE
       -SEL UNIT ADDR 3       5      6       -SEL UNIT ADDR 2
              +R/W DATA       7      8       -R/W DATA
       -SEL UNIT ADDR 1       9      10      -SEL UNIT ADDR 0
             +SYS CLOCK      11      12      -SYS CLOCK
                    GND      13      14      GND
                -SECTOR      15      16      -INDEX
         -SEEK COMPLETE      17      18      -FAULT
            -CMD STROBE      19      20      -CMD R/W
          -CMD SELECT 0      21      22      -CMD SELECT 1
                  SPARE      23      24      SPARE
               -CMD ACK      25      26      SPARE
             -CMD BUS 6      27      28      -CMD BUS 7
             -CMD BUS 4      29      30      -CMD BUS 5
             -CMD BUS 2      31      32      -CMD BUS 3
             -CMD BUS 0      33      34      -CMD BUS 1

**********************************************************************/

#pragma once

#ifndef __IMI7000_BUS__
#define __IMI7000_BUS__

#include "emu.h"



//**************************************************************************
//  CONSTANTS
//**************************************************************************

#define IMI7000_BUS_TAG      "imi7000"



//**************************************************************************
//  INTERFACE CONFIGURATION MACROS
//**************************************************************************

#define MCFG_IMI7000_BUS_ADD(_def_slot1, _def_slot2, _def_slot3, _def_slot4) \
	MCFG_DEVICE_ADD(IMI7000_BUS_TAG, IMI7000_BUS, 0) \
	MCFG_DEVICE_ADD(IMI7000_BUS_TAG":0", IMI7000_SLOT, 0) \
	MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot1, false) \
	MCFG_DEVICE_ADD(IMI7000_BUS_TAG":1", IMI7000_SLOT, 0) \
	MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot2, false) \
	MCFG_DEVICE_ADD(IMI7000_BUS_TAG":2", IMI7000_SLOT, 0) \
	MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot3, false) \
	MCFG_DEVICE_ADD(IMI7000_BUS_TAG":3", IMI7000_SLOT, 0) \
	MCFG_DEVICE_SLOT_INTERFACE(imi7000_devices, _def_slot4, false)



//**************************************************************************
//  TYPE DEFINITIONS
//**************************************************************************

class imi7000_slot_device;
class device_imi7000_interface;


// ======================> imi7000_bus_device

class imi7000_bus_device : public device_t
{
public:
	// construction/destruction
	imi7000_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);

	void add_device(imi7000_slot_device *slot, device_t *target);

protected:
	// device-level overrides
	virtual void device_start();

	imi7000_slot_device *m_unit[4];
};


// ======================> imi7000_slot_device

class imi7000_slot_device : public device_t,
							public device_slot_interface
{
public:
	// construction/destruction
	imi7000_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);

protected:
	// device-level overrides
	virtual void device_start();

	device_imi7000_interface *m_card;
};


// ======================> device_imi7000_interface

class device_imi7000_interface : public device_slot_card_interface
{
	friend class imi7000_slot_device;

public:
	// construction/destruction
	device_imi7000_interface(const machine_config &mconfig, device_t &device);
	virtual ~device_imi7000_interface() { }

protected:
	imi7000_slot_device *m_slot;
};


// device type definition
extern const device_type IMI7000_BUS;
extern const device_type IMI7000_SLOT;


// slot interface
SLOT_INTERFACE_EXTERN( imi7000_devices );



#endif