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
140
141
142
143
144
145
146
147
148
149
150
151
152
153
|
// license:BSD-3-Clause
// copyright-holders:Sandro Ronco
// thanks-to:rfka01
#ifndef MAME_BUS_DMV_K230_H
#define MAME_BUS_DMV_K230_H
#pragma once
#include "dmvbus.h"
#include "cpu/i86/i86.h"
// K234
#include "cpu/m68000/m68000.h"
// K235
#include "cpu/nec/nec.h"
#include "machine/pic8259.h"
//**************************************************************************
// TYPE DEFINITIONS
//**************************************************************************
// ======================> dmv_k230_device
class dmv_k230_device :
public device_t,
public device_dmvslot_interface
{
public:
// construction/destruction
dmv_k230_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
dmv_k230_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// optional information overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
// dmvcart_interface overrides
virtual void hold_w(int state) override;
virtual void switch16_w(int state) override;
virtual bool av16bit() override;
void k230_io(address_map &map);
void k230_mem(address_map &map);
required_device<cpu_device> m_maincpu;
optional_memory_region m_rom;
int m_switch16;
int m_hold;
uint8_t io_r(offs_t offset);
uint8_t program_r(offs_t offset);
void io_w(offs_t offset, uint8_t data);
void program_w(offs_t offset, uint8_t data);
private:
uint8_t rom_r(offs_t offset);
};
// ======================> dmv_k231_device
class dmv_k231_device :
public dmv_k230_device
{
public:
// construction/destruction
dmv_k231_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
// optional information overrides
virtual const tiny_rom_entry *device_rom_region() const override;
};
// ======================> dmv_k234_device
class dmv_k234_device :
public dmv_k230_device
{
public:
// construction/destruction
dmv_k234_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// optional information overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
// device-level overrides
virtual void device_start() override;
virtual void device_reset() override;
// dmvcart_interface overrides
virtual void hold_w(int state) override;
virtual void switch16_w(int state) override;
private:
int m_snr;
uint8_t snr_r();
void snr_w(uint8_t data);
void k234_mem(address_map &map);
};
// ======================> dmv_k235_device
class dmv_k235_device :
public dmv_k230_device
{
public:
// construction/destruction
dmv_k235_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
protected:
// optional information overrides
virtual const tiny_rom_entry *device_rom_region() const override;
virtual void device_add_mconfig(machine_config &config) override;
virtual ioport_constructor device_input_ports() const override;
void timint_w(int state) override { m_pic->ir0_w(state); }
void keyint_w(int state) override { m_pic->ir1_w(state); }
void busint_w(int state) override { m_pic->ir2_w(state); }
void flexint_w(int state) override { m_pic->ir6_w(state); }
void irq2a_w(int state) override { if (!(m_dsw->read() & 0x02)) m_pic->ir5_w(state); }
void irq2_w(int state) override { if ( (m_dsw->read() & 0x02)) m_pic->ir5_w(state); }
void irq3_w(int state) override { m_pic->ir3_w(state); }
void irq4_w(int state) override { m_pic->ir4_w(state); }
void irq5_w(int state) override { if (!(m_dsw->read() & 0x01)) m_pic->ir7_w(state); }
void irq6_w(int state) override { if ( (m_dsw->read() & 0x01)) m_pic->ir7_w(state); }
private:
required_device<pic8259_device> m_pic;
required_ioport m_dsw;
void k235_io(address_map &map);
};
// device type definition
DECLARE_DEVICE_TYPE(DMV_K230, dmv_k230_device)
DECLARE_DEVICE_TYPE(DMV_K231, dmv_k231_device)
DECLARE_DEVICE_TYPE(DMV_K234, dmv_k234_device)
DECLARE_DEVICE_TYPE(DMV_K235, dmv_k235_device)
#endif // MAME_BUS_DMV_K230_H
|