summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/imi7000/imi7000.h
blob: 0559a565285d867fa0b2a1b5999c3c123e5541d0 (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
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/**********************************************************************

    International Memories Incorporated IMI 7000 Series bus emulation

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

                    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

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

#ifndef MAME_BUS_IMI7000_IMI7000_H
#define MAME_BUS_IMI7000_IMI7000_H

#pragma once




//**************************************************************************
//  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_t clock);

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

	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_t clock);

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

	device_imi7000_interface *m_card;
};


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

class device_imi7000_interface : public device_slot_card_interface
{
	friend class imi7000_slot_device;

protected:
	// construction/destruction
	device_imi7000_interface(const machine_config &mconfig, device_t &device);

	imi7000_slot_device *m_slot;
};


// device type definition
DECLARE_DEVICE_TYPE(IMI7000_BUS,  imi7000_bus_device)
DECLARE_DEVICE_TYPE(IMI7000_SLOT, imi7000_slot_device)


// slot interface
void imi7000_devices(device_slot_interface &device);

#endif // MAME_BUS_IMI7000_IMI7000_H