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);
}
|