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
|
// license:BSD-3-Clause
// copyright-holders:AJR
/***************************************************************************
Skeleton driver for Mera-Elzab VDM 79321/79322 terminals.
***************************************************************************/
#include "emu.h"
#include "cpu/z80/z80.h"
#include "cpu/mcs51/mcs51.h"
#include "machine/pit8253.h"
#include "machine/i8255.h"
#include "machine/z80ctc.h"
#include "machine/z80sio.h"
class vdm7932x_state : public driver_device
{
public:
vdm7932x_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_subcpu(*this, "subcpu")
{
}
void vdm7932x(machine_config &config);
private:
virtual void machine_start() override;
void scan_w(offs_t offset, u8 data);
u8 i8031_p3_r();
void ppi1_pc_w(u8 data);
void mem_map(address_map &map);
void io_map(address_map &map);
void sub_map(address_map &map);
void subx_map(address_map &map);
required_device<z80_device> m_maincpu;
required_device<i8031_device> m_subcpu;
bool m_obfa = false;
};
void vdm7932x_state::machine_start()
{
m_obfa = false;
save_item(NAME(m_obfa));
}
void vdm7932x_state::scan_w(offs_t offset, u8 data)
{
}
u8 vdm7932x_state::i8031_p3_r()
{
return m_obfa ? 0xfd : 0xff;
}
void vdm7932x_state::ppi1_pc_w(u8 data)
{
m_obfa = !BIT(data, 7);
}
void vdm7932x_state::mem_map(address_map &map)
{
map(0x0000, 0xbfff).rom().region("maincpu", 0);
map(0xc000, 0xdfff).ram();
}
void vdm7932x_state::io_map(address_map &map)
{
map.global_mask(0xff);
map(0x40, 0x40).nopw(); // ?
map(0x44, 0x47).rw("ctc", FUNC(z80ctc_device::read), FUNC(z80ctc_device::write));
map(0x48, 0x4b).w("pit", FUNC(pit8253_device::write));
map(0x54, 0x57).rw("ppi1", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x58, 0x5b).rw("sio", FUNC(z80sio_device::cd_ba_r), FUNC(z80sio_device::cd_ba_w));
map(0x80, 0x83).rw("ppi2", FUNC(i8255_device::read), FUNC(i8255_device::write));
}
void vdm7932x_state::sub_map(address_map &map)
{
map(0x0000, 0x3fff).rom().region("subcpu", 0);
}
void vdm7932x_state::subx_map(address_map &map)
{
map(0x00, 0x00).select(0xff00).w(FUNC(vdm7932x_state::scan_w));
map(0x49, 0x49).mirror(0xff00).r("ppi1", FUNC(i8255_device::acka_r));
}
static INPUT_PORTS_START(vdm7932x)
INPUT_PORTS_END
static const z80_daisy_config daisy_chain[] =
{
{ "sio" },
{ "ctc" },
{ nullptr }
};
void vdm7932x_state::vdm7932x(machine_config &config) // all clocks unverified
{
Z80(config, m_maincpu, 24.0734_MHz_XTAL / 8); // UA880D
m_maincpu->set_addrmap(AS_PROGRAM, &vdm7932x_state::mem_map);
m_maincpu->set_addrmap(AS_IO, &vdm7932x_state::io_map);
m_maincpu->set_daisy_config(daisy_chain);
I8031(config, m_subcpu, 24.0734_MHz_XTAL / 4); // Intel P8031AH (for keyboard?)
m_subcpu->port_in_cb<3>().set(FUNC(vdm7932x_state::i8031_p3_r));
m_subcpu->set_addrmap(AS_PROGRAM, &vdm7932x_state::sub_map);
m_subcpu->set_addrmap(AS_IO, &vdm7932x_state::subx_map);
PIT8253(config, "pit", 0); // UM8253-5
z80ctc_device &ctc(Z80CTC(config, "ctc", 24.0734_MHz_XTAL / 8)); // UA857D
ctc.intr_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
z80sio_device &sio(Z80SIO(config, "sio", 24.0734_MHz_XTAL / 8)); // UA8560D
sio.out_int_callback().set_inputline(m_maincpu, INPUT_LINE_IRQ0);
i8255_device &ppi1(I8255A(config, "ppi1")); // КР580ВВ55А (on separate card)
ppi1.out_pc_callback().set(FUNC(vdm7932x_state::ppi1_pc_w));
I8255A(config, "ppi2"); // КР580ВВ55А (on separate card)
}
ROM_START( vdm79322 ) // 8k ram // b&w (amber)
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "27512_m322.bin", 0x00000, 0x10000, CRC(24573079) SHA1(b81c17e99493302054d78fbee2e416ab6493b5f3) )
ROM_REGION( 0x04000, "subcpu", 0 )
ROM_LOAD( "27128_w322-3700.bin", 0x00000, 0x04000, CRC(e5e76ca2) SHA1(bb18c9fa29ef9fa0563aa07d2b856cf6594fc020) )
ROM_END
COMP(1992, vdm79322, 0, 0, vdm7932x, vdm7932x, vdm7932x_state, empty_init, "Mera-Elzab", "VDM 79322/CM 7233", MACHINE_IS_SKELETON)
|