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:David Haywood
// UIO seems to be a different IO module to the vt1682_io.cpp one, 8-bit ports instead of 4-bit
#include "emu.h"
#include "machine/vt1682_uio.h"
#define LOG_UIO (1U << 1)
#define LOG_ALL ( LOG_UIO )
#define VERBOSE (0)
#include "logmacro.h"
DEFINE_DEVICE_TYPE(VT_VT1682_UIO, vrt_vt1682_uio_device, "vt1682uio", "VRT VT1682 UIO")
vrt_vt1682_uio_device::vrt_vt1682_uio_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock) :
device_t(mconfig, VT_VT1682_UIO, tag, owner, clock),
m_porta_out(*this),
m_porta_in(*this),
m_portb_out(*this),
m_portb_in(*this)
{
}
uint8_t vrt_vt1682_uio_device::inteact_2129_uio_a_data_r()
{
// TODO, use direction register etc.
uint8_t dat = m_porta_in();
//logerror("%s: bankswitch inteact_2129_uio_a_data_r %02x\n", machine().describe_context(), m_2129_uio_a_data);
return dat;
}
void vrt_vt1682_uio_device::inteact_2129_uio_a_data_w(uint8_t data)
{
// TODO, use direction register etc.
LOGMASKED(LOG_UIO, "%s: inteact_2129_uio_a_data_w %02x\n", machine().describe_context(), data);
m_2129_uio_a_data = data;
m_porta_out(m_2129_uio_a_data);
}
uint8_t vrt_vt1682_uio_device::inteact_212a_uio_a_direction_r()
{
return m_212a_uio_a_direction;
}
void vrt_vt1682_uio_device::inteact_212a_uio_a_direction_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_212a_uio_a_direction_w %02x\n", machine().describe_context(), data);
m_212a_uio_a_direction = data;
}
uint8_t vrt_vt1682_uio_device::inteact_212b_uio_a_attribute_r()
{
return m_212b_uio_a_attribute;
}
void vrt_vt1682_uio_device::inteact_212b_uio_a_attribute_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_212b_uio_a_attribute_w %02x\n", machine().describe_context(), data);
m_212b_uio_a_attribute = data;
}
uint8_t vrt_vt1682_uio_device::inteact_2149_uio_b_data_r()
{
// TODO, use direction register etc.
uint8_t dat = m_portb_in();
//logerror("%s: bankswitch inteact_2149_uio_b_data_r %02x\n", machine().describe_context(), m_2149_uio_b_data);
return dat;
}
void vrt_vt1682_uio_device::inteact_2149_uio_b_data_w(uint8_t data)
{
// TODO, use direction register etc.
LOGMASKED(LOG_UIO, "%s: inteact_2149_uio_b_data_w %02x\n", machine().describe_context(), data);
m_2149_uio_b_data = data;
m_portb_out(m_2149_uio_b_data);
}
uint8_t vrt_vt1682_uio_device::inteact_214a_uio_b_direction_r()
{
return m_214a_uio_b_direction;
}
void vrt_vt1682_uio_device::inteact_214a_uio_b_direction_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_214a_uio_b_direction_w %02x\n", machine().describe_context(), data);
m_214a_uio_b_direction = data;
}
uint8_t vrt_vt1682_uio_device::inteact_214b_uio_b_attribute_r()
{
return m_214b_uio_b_attribute;
}
void vrt_vt1682_uio_device::inteact_214b_uio_b_attribute_w(uint8_t data)
{
LOGMASKED(LOG_UIO, "%s: inteact_214b_uio_b_attribute_w %02x\n", machine().describe_context(), data);
m_214b_uio_b_attribute = data;
}
void vrt_vt1682_uio_device::device_start()
{
m_porta_out.resolve_safe();
m_porta_in.resolve_safe(0);
m_portb_out.resolve_safe();
m_portb_in.resolve_safe(0);
save_item(NAME(m_2129_uio_a_data));
save_item(NAME(m_212a_uio_a_direction));
save_item(NAME(m_212b_uio_a_attribute));
save_item(NAME(m_2149_uio_b_data));
save_item(NAME(m_214a_uio_b_direction));
save_item(NAME(m_214b_uio_b_attribute));
}
void vrt_vt1682_uio_device::device_reset()
{
m_2129_uio_a_data = 0;
m_212a_uio_a_direction = 0;
m_212b_uio_a_attribute = 0;
m_2149_uio_b_data = 0;
m_214a_uio_b_direction = 0;
m_214b_uio_b_attribute = 0;
}
|