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
136
137
138
139
|
/**********************************************************************
Coleco ADAMnet bus emulation
Copyright MESS Team.
Visit http://mamedev.org for licensing and usage restrictions.
**********************************************************************/
#pragma once
#ifndef __ADAMNET__
#define __ADAMNET__
#include "emu.h"
//**************************************************************************
// CONSTANTS
//**************************************************************************
#define ADAMNET_TAG "adamnet"
//**************************************************************************
// INTERFACE CONFIGURATION MACROS
//**************************************************************************
#define MCFG_ADAMNET_BUS_ADD() \
MCFG_DEVICE_ADD(ADAMNET_TAG, ADAMNET, 0)
#define MCFG_ADAMNET_SLOT_ADD(_tag, _slot_intf, _def_slot, _def_inp) \
MCFG_DEVICE_ADD(_tag, ADAMNET_SLOT, 0) \
MCFG_DEVICE_SLOT_INTERFACE(_slot_intf, _def_slot, _def_inp, false)
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
class device_adamnet_card_interface;
// ======================> adamnet_device
class adamnet_device : public device_t
{
public:
// construction/destruction
adamnet_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
void add_device(device_t *target);
DECLARE_READ_LINE_MEMBER( rxd_r );
int rxd_r(device_t *device);
DECLARE_WRITE_LINE_MEMBER( txd_w );
void txd_w(device_t *device, int state);
DECLARE_READ_LINE_MEMBER( reset_r );
DECLARE_WRITE_LINE_MEMBER( reset_w );
protected:
// device-level overrides
virtual void device_start();
virtual void device_stop();
private:
class daisy_entry
{
public:
daisy_entry(device_t *device);
daisy_entry *next() const { return m_next; }
daisy_entry * m_next; // next device
device_t * m_device; // associated device
device_adamnet_card_interface * m_interface; // associated device's daisy interface
int m_txd;
};
simple_list<daisy_entry> m_device_list;
int m_txd;
int m_reset;
};
// ======================> adamnet_slot_device
class adamnet_slot_device : public device_t,
public device_slot_interface
{
public:
// construction/destruction
adamnet_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
// device-level overrides
virtual void device_start();
protected:
// configuration
adamnet_device *m_bus;
};
// ======================> device_adamnet_card_interface
class device_adamnet_card_interface : public device_slot_card_interface
{
public:
// construction/destruction
device_adamnet_card_interface(const machine_config &mconfig, device_t &device);
virtual ~device_adamnet_card_interface();
virtual void adamnet_reset_w(int state) = 0;
adamnet_device *m_bus;
};
// device type definitions
extern const device_type ADAMNET;
extern const device_type ADAMNET_SLOT;
// slot devices
#include "machine/adam_ddp.h"
#include "machine/adam_fdc.h"
#include "machine/adam_kb.h"
#include "machine/adam_prn.h"
#include "machine/adam_spi.h"
SLOT_INTERFACE_EXTERN( adamnet_devices );
#endif
|