summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/cbus/pc9801_cbus.h
blob: 22dd80154c3472d45639d9ed2733c15404a43e6d (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
// license:BSD-3-Clause
// copyright-holders:Angelo Salese
/**********************************************************************

                            <B>          <A>
                                +------+
                            GND |[ 01 ]| GND
                             V1 |[ 02 ]| V1
                             V2 |[ 03 ]| V2
                          DB001 |[ 04 ]| AB001
                          DB011 |[ 05 ]| AB011
                          DB021 |[ 06 ]| AB021
                          DB031 |[ 07 ]| AB031
                          DB041 |[ 08 ]| AB041
                          DB051 |[ 09 ]| AB051
                          DB061 |[ 10 ]| AB061
                            GND |[ 11 ]| GND
                          DB071 |[ 12 ]| AB071
                          DB081 |[ 13 ]| AB081
                          DB091 |[ 14 ]| AB091
                          DB101 |[ 15 ]| AB101
                          DB111 |[ 16 ]| AB111
                          DB121 |[ 17 ]| AB121
                          DB131 |[ 18 ]| AB131
                          DB141 |[ 19 ]| AB141
                          DB151 |[ 20 ]| AB151
                            GND |[ 21 ]| GND
                          +12 V |[ 22 ]| AB161
                          +12 V |[ 23 ]| AB171
            "INT0"         IR31 |[ 24 ]| AB181
            "INT1"         IR51 |[ 25 ]| AB191
            "INT2"         IR61 |[ 26 ]| AB201
            "INT3"         IR91 |[ 27 ]| AB211
            "INT4"  IR101/IR111 |[ 28 ]| AB221
            "INT5"        IR121 |[ 29 ]| AB231
            "INT6"        IR131 |[ 30 ]| INT0
                            GND |[ 31 ]| GND
                          -12 V |[ 32 ]| IOCHK0
                          -12 V |[ 33 ]| IOR0
                         RESET0 |[ 34 ]| IOW0
                         DACK00 |[ 35 ]| MRC0
                  DACK30/DACK20 |[ 36 ]| MWC0
                          DRQ00 |[ 37 ]| S00        (INTA0)
                    DRQ30/DRQ20 |[ 38 ]| S10        (NOWAIT0)
                          WORD0 |[ 39 ]| S20        (SALE1)
            (EXHRQ10)   CPKILL0 |[ 40 ]| LOCK       (MACS0)
                            GND |[ 41 ]| GND
            (EXHLA10)     RQGT0 |[ 42 ]| CPUENB10
                         DMATC0 |[ 43 ]| RFSH0
                           NMI0 |[ 44 ]| BHE0
                           MWE0 |[ 45 ]| IORDY1
            (EXHLA20)    HLDA00 |[ 46 ]| SCLK1
            (EXHRQ20)     HRQ00 |[ 47 ]| S18CLK1    = 307.2 kHz
            (SUBSRQ1)   DMAHLD0 |[ 48 ]| POWER0
                           +5 V |[ 49 ]| +5 V
                           +5 V |[ 50 ]| +5 V
                                +------+
                            <B>          <A>

**********************************************************************/
#ifndef MAME_MACHINE_PC9801_CBUS_H
#define MAME_MACHINE_PC9801_CBUS_H

#pragma once


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




//class pc9801_slot_device;

#if 0
class device_pc9801_slot_card_interface : public device_slot_card_interface
{
	friend class pc9801_slot_device;

public:
	// construction/destruction
	device_pc9801_slot_card_interface(const machine_config &mconfig, device_t &device);
	virtual ~device_pc9801_card_interface();
};
#endif

// ======================> pc9801_slot_device

class pc9801_slot_device : public device_t, public device_slot_interface
{
public:
	// construction/destruction
	template <typename T>
	pc9801_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
		: pc9801_slot_device(mconfig, tag, owner, (uint32_t)0)
	{
		option_reset();
		opts(*this);
		set_default_option(dflt);
		set_fixed(false);
	}
	pc9801_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);

	template <typename T> void set_memspace(T &&tag, int spacenum) { m_memspace.set_tag(std::forward<T>(tag), spacenum); }
	template <typename T> void set_iospace(T &&tag, int spacenum) { m_iospace.set_tag(std::forward<T>(tag), spacenum); }

	// configuration access
	template<std::size_t Line> auto int_cb() { return m_int_callback[Line].bind(); }

	address_space &program_space() const { return *m_memspace; }
	address_space &io_space() const { return *m_iospace; }
	template<int I> void int_w(bool state) { m_int_callback[I](state); }
	void install_io(offs_t start, offs_t end, read8_delegate rhandler, write8_delegate whandler);

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

private:
//  device_pc9801_slot_card_interface *m_card;
	required_address_space m_memspace;
	required_address_space m_iospace;
	devcb_write_line::array<7> m_int_callback;
};


// device type definition
DECLARE_DEVICE_TYPE(PC9801CBUS_SLOT, pc9801_slot_device)

#endif // MAME_MACHINE_PC9801_CBUS_H