summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/mm2/exp.cpp
blob: dc5a0d95cb80cfafd1bd3c9ae7ed5351f4f7c331 (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
// license:BSD-3-Clause
// copyright-holders:Curt Coder
/***************************************************************************

    Nokia MikroMikko 2 expansion bus

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

#include "emu.h"
#include "exp.h"
#include "crtc186.h"
#include "meme186.h"
#include "mmc186.h"


DEFINE_DEVICE_TYPE(MIKROMIKKO2_EXPANSION_BUS, mikromikko2_expansion_bus_device, "mikromikko2_expansion_bus", "Nokia MikroMikko 2 expansion bus")
DEFINE_DEVICE_TYPE(MIKROMIKKO2_EXPANSION_BUS_SLOT, mikromikko2_expansion_bus_slot_device, "mikromikko2_expansion_bus_slot", "Nokia MikroMikko 2 expansion bus slot")


// ======================> mikromikko2_expansion_bus_device

mikromikko2_expansion_bus_device::mikromikko2_expansion_bus_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
	mikromikko2_expansion_bus_device(mconfig, MIKROMIKKO2_EXPANSION_BUS, tag, owner, clock)
{
}

mikromikko2_expansion_bus_device::mikromikko2_expansion_bus_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
	device_t(mconfig, type, tag, owner, clock),
	m_memspace(*this, finder_base::DUMMY_TAG, -1),
	m_iospace(*this, finder_base::DUMMY_TAG, -1),
	m_out_nmi_cb(*this),
	m_out_ir2_cb(*this),
	m_out_ir3_cb(*this),
	m_out_ir4_cb(*this),
	m_out_ir5_cb(*this),
	m_out_ir6_cb(*this),
	m_out_hold1_cb(*this),
	m_out_hold2_cb(*this),
	m_out_hold3_cb(*this),
	m_out_hold4_cb(*this),
	m_out_hold5_cb(*this)
{
}

void mikromikko2_expansion_bus_device::device_start()
{
}

void mikromikko2_expansion_bus_device::add_slot(const char *tag)
{
	device_t *dev = subdevice(tag);
	auto slot = dynamic_cast<device_slot_interface *>(dev);
	m_slot_list.push_front(slot);
}

void mikromikko2_expansion_bus_device::inta_w(int state)
{
	for (device_slot_interface *slot : m_slot_list)
	{
		device_t *dev = slot->get_card_device();
		if (dev) {
			auto *card = dynamic_cast<device_mikromikko2_expansion_bus_card_interface *>(dev);
			card->inta_w(state);
		}
	}
}

void mikromikko2_expansion_bus_device::bhlda_w(int state, int bcas)
{
	for (device_slot_interface *slot : m_slot_list)
	{
		device_t *dev = slot->get_card_device();
		if (dev) {
			auto *card = dynamic_cast<device_mikromikko2_expansion_bus_card_interface *>(dev);
			card->bhlda_w(state, bcas);
		}
	}
}


// ======================> mikromikko2_expansion_bus_slot_device

mikromikko2_expansion_bus_slot_device::mikromikko2_expansion_bus_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
	mikromikko2_expansion_bus_slot_device(mconfig, MIKROMIKKO2_EXPANSION_BUS_SLOT, tag, owner, clock)
{
}

mikromikko2_expansion_bus_slot_device::mikromikko2_expansion_bus_slot_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock) :
	device_t(mconfig, type, tag, owner, clock),
	device_slot_interface(mconfig, *this),
	m_bus(*this, finder_base::DUMMY_TAG)
{
}

void mikromikko2_expansion_bus_slot_device::device_start()
{
	auto *const dev = dynamic_cast<device_mikromikko2_expansion_bus_card_interface *>(get_card_device());

	if (dev) dev->set_bus(m_bus);

	m_bus->add_slot(tag());
}


// ======================> device_mikromikko2_expansion_bus_card_interface

device_mikromikko2_expansion_bus_card_interface::device_mikromikko2_expansion_bus_card_interface(const machine_config &mconfig, device_t &device) :
	device_interface(device, "mikromikko2_expansion_bus"),
	m_bus(nullptr),
	m_card(&device)
{
}


// ======================> mikromikko2_expansion_bus_cards

void mikromikko2_expansion_bus_cards(device_slot_interface &device)
{
	device.option_add("crtc186", NOKIA_CRTC186);
	device.option_add("meme186", NOKIA_MEME186);
	device.option_add("mmc186", NOKIA_MMC186);
}