1 // license:BSD-3-Clause
2 // copyright-holders:Curt Coder
3 /*
4 
5 Telmac TMC-600
6 
7 PCB Layout
8 ----------
9 
10 HP14782-1
11 
12             CN2                    CN3
13         |---------|     |------------------------|
14 |-------|---------|-----|------------------------|------------------------------------------|
15 |  CN1                                                  CN4 SW1       CN5 CN6 P1 SW2 CN7    |
16 |         |-------|                                4049         T3                          |
17 | T1 K1   |CDP1852|         4050  4050  4050            40107 T2         C1  C2 8.867238MHz |
18 |         |-------|         |-------|                                     5.6260MHz T4      |
19 | MC1374                    |CDP1852|                               ROM5    |---------|     |
20 |                           |-------|                                       | CDP1870 |     |
21 |    K2                                                             ROM4    |---------|     |
22 |                       |-------------|       4050   5114   5114                            |
23 |           4013        |   CDP1802   |       4050   5114   5114    ROM3    4030  ROM6  4060|
24 |           4013 3.57MHz|-------------|       4050   5114   5114                            |
25 |           4081  40106                       4051   5114   5114    ROM2    4076  5114  4011|
26 |                                             4556   5114   5114          CDP1856 5114      |
27 |                   |-------|                        5114   5114    ROM1  CDP1856 5114  4076|
28 |           LS1     |CDP1852| CDP1853       CDP1856  5114   5114                            |
29 |                   |-------|               CDP1856  5114   5114    ROM0    |---------| 4011|
30 |                                                                           | CDP1869 |     |
31 |   7805            4051      4051                                          |---------|     |
32 |                                                                                           |
33 |                     |--CN8--|                                                             |
34 |-------------------------------------------------------------------------------------------|
35 
36 Notes:
37     All IC's shown. TMCP-300 and TMC-700 expansions have been installed.
38 
39     ROM0-5  - Toshiba TMM2732DI 4Kx8 EPROM
40     ROM6    - Hitachi HN462732G 4Kx8 EPROM
41     5114    - RCA MWS5114E1 1024-Word x 4-Bit LSI Static RAM
42     MC1374  - Motorola MC1374P TV Modulator
43     CDP1802 - RCA CDP1802BE CMOS 8-Bit Microprocessor running at 3.57MHz
44     CDP1852 - RCA CDP1852CE Byte-Wide Input/Output Port
45     CDP1853 - RCA CDP1853CE N-Bit 1 of 8 Decoder
46     CDP1856 - RCA CDP1856CE 4-Bit Memory Buffer
47     CDP1869 - RCA CDP1869CE Video Interface System (VIS) Address and Sound Generator
48     CDP1870 - RCA CDP1870CE Video Interface System (VIS) Color Video (DOT XTAL at 5.6260MHz, CHROM XTAL at 8.867238MHz)
49     CN1     - RF connector [TMC-700]
50     CN2     - 10x2 pin printer connector [TMC-700]
51     CN3     - 32x3 pin EURO connector
52     CN4     - DIN5D tape connector
53                 1   input (500 mV / 47 Kohm)
54                 2   GND
55                 3   output (580 mV / 47 Kohm)
56                 4   input (500 mV / 47 Kohm)
57                 5   output (580 mV / 47 Kohm)
58     CN5     - DIN5X video connector
59                 1   GND
60                 2   GND
61                 3   composite video output (75 ohm)
62                 4   GND
63                 5   composite video output (75 ohm)
64     CN6     - DIN2 power connector
65                 1   input 8..12V DC..400Hz 300mA
66                 2   GND
67     CN7     - DIN5D audio connector [TMCP-300]
68                 1   N/C
69                 2   GND
70                 3   mono audio output
71                 4   N/C
72                 5   mono audio output
73     CN8     - 10x2 pin keyboard connector
74     SW1     - RUN/STOP switch (left=run, right=stop)
75     SW2     - internal speaker/external audio switch [TMCP-300]
76     P1      - color phase lock adjustment potentiometer
77     C1      - dot oscillator adjustment variable capacitor
78     C2      - chroma oscillator adjustment variable capacitor
79     T1      - RF signal strength adjustment potentiometer [TMC-700]
80     T2      - tape recording level adjustment potentiometer (0.57 V p-p)
81     T3      - video output level adjustment potentiometer (1 V p-p)
82     T4      - video synchronization pulse adjustment potentiometer
83     K1      - RF signal quality adjustment variable inductor [TMC-700]
84     K2      - RF channel adjustment variable inductor (VHF I) [TMC-700]
85     LS1     - loudspeaker
86 
87 */
88 
89 /*
90 
91     TODO
92 
93     - connect expansion bus
94 
95 */
96 
97 #include "emu.h"
98 #include "includes/tmc600.h"
99 
rtc_r()100 uint8_t tmc600_state::rtc_r()
101 {
102 	m_rtc_int = m_vismac_reg_latch >> 3;
103 
104 	return 0;
105 }
106 
printer_w(uint8_t data)107 void tmc600_state::printer_w(uint8_t data)
108 {
109 	m_centronics->write_data0(BIT(data, 0));
110 	m_centronics->write_data1(BIT(data, 1));
111 	m_centronics->write_data2(BIT(data, 2));
112 	m_centronics->write_data3(BIT(data, 3));
113 	m_centronics->write_data4(BIT(data, 4));
114 	m_centronics->write_data5(BIT(data, 5));
115 	m_centronics->write_data6(BIT(data, 6));
116 	m_centronics->write_data7(BIT(data, 7));
117 
118 	m_centronics->write_strobe(0);
119 	m_centronics->write_strobe(1);
120 }
121 
122 /* Memory Maps */
123 
tmc600_map(address_map & map)124 void tmc600_state::tmc600_map(address_map &map)
125 {
126 	map(0x0000, 0x5fff).rom();
127 	map(0x6000, 0x7fff).ram();
128 	map(0xf400, 0xf7ff).m(m_vis, FUNC(cdp1869_device::char_map));
129 	map(0xf800, 0xffff).m(m_vis, FUNC(cdp1869_device::page_map));
130 }
131 
tmc600_io_map(address_map & map)132 void tmc600_state::tmc600_io_map(address_map &map)
133 {
134 	map(0x03, 0x03).w(m_bwio, FUNC(cdp1852_device::write));
135 	map(0x04, 0x04).w(CDP1852_TMC700_TAG, FUNC(cdp1852_device::write));
136 	map(0x05, 0x05).rw(FUNC(tmc600_state::rtc_r), FUNC(tmc600_state::vismac_data_w));
137 //  map(0x06, 0x06).w(FUNC(tmc600_state::floppy_w);
138 	map(0x07, 0x07).w(FUNC(tmc600_state::vismac_register_w));
139 }
140 
141 /* Input Ports */
142 
143 static INPUT_PORTS_START( tmc600 )
144 	PORT_START("Y0")
PORT_CODE(KEYCODE_0)145 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_0) PORT_CODE(KEYCODE_0_PAD) PORT_CHAR('0') PORT_CHAR('_')
146 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_1) PORT_CODE(KEYCODE_1_PAD) PORT_CHAR('1') PORT_CHAR('!')
147 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_2) PORT_CODE(KEYCODE_2_PAD) PORT_CHAR('2') PORT_CHAR('"')
148 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_3) PORT_CODE(KEYCODE_3_PAD) PORT_CHAR('3') PORT_CHAR('#')
149 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_4) PORT_CODE(KEYCODE_4_PAD) PORT_CHAR('4') PORT_CHAR('$')
150 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_5) PORT_CODE(KEYCODE_5_PAD) PORT_CHAR('5') PORT_CHAR('%')
151 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_6) PORT_CODE(KEYCODE_6_PAD) PORT_CHAR('6') PORT_CHAR('&')
152 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_7) PORT_CODE(KEYCODE_7_PAD) PORT_CHAR('7') PORT_CHAR('\'')
153 
154 	PORT_START("Y1")
155 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_8) PORT_CODE(KEYCODE_8_PAD) PORT_CHAR('8') PORT_CHAR('(')
156 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_9) PORT_CODE(KEYCODE_9_PAD) PORT_CHAR('9') PORT_CHAR(')')
157 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_BACKSLASH) PORT_CHAR(':') PORT_CHAR('*')
158 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_CLOSEBRACE) PORT_CHAR(';') PORT_CHAR('+')
159 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_COMMA) PORT_CHAR(',') PORT_CHAR('<')
160 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_MINUS) PORT_CHAR('-') PORT_CHAR('=')
161 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_STOP) PORT_CHAR('.') PORT_CHAR('>')
162 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_SLASH) PORT_CHAR('/') PORT_CHAR('?')
163 
164 	PORT_START("Y2")
165 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_TILDE) PORT_CHAR('@')
166 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_A) PORT_CHAR('A')
167 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_B) PORT_CHAR('B')
168 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_C) PORT_CHAR('C')
169 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_D) PORT_CHAR('D')
170 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_E) PORT_CHAR('E')
171 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_F) PORT_CHAR('F')
172 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_G) PORT_CHAR('G')
173 
174 	PORT_START("Y3")
175 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_H) PORT_CHAR('H')
176 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_I) PORT_CHAR('I')
177 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_J) PORT_CHAR('J')
178 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_K) PORT_CHAR('K')
179 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_L) PORT_CHAR('L')
180 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_M) PORT_CHAR('M')
181 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_N) PORT_CHAR('N')
182 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_O) PORT_CHAR('O')
183 
184 	PORT_START("Y4")
185 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_P) PORT_CHAR('P')
186 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Q) PORT_CHAR('Q')
187 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_R) PORT_CHAR('R')
188 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_S) PORT_CHAR('S')
189 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_T) PORT_CHAR('T')
190 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_U) PORT_CHAR('U')
191 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_V) PORT_CHAR('V')
192 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_W) PORT_CHAR('W')
193 
194 	PORT_START("Y5")
195 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_X) PORT_CHAR('X')
196 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Y) PORT_CHAR('Y')
197 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_Z) PORT_CHAR('Z')
198 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xC3\x85") PORT_CODE(KEYCODE_OPENBRACE) PORT_CHAR(0x00C5)
199 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xC3\x84") PORT_CODE(KEYCODE_QUOTE) PORT_CHAR(0x00C4)
200 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("\xC3\x96") PORT_CODE(KEYCODE_COLON) PORT_CHAR(0x00D6)
201 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_CODE(KEYCODE_EQUALS) PORT_CHAR('^')
202 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("BREAK") PORT_CODE(KEYCODE_END) PORT_CHAR(UCHAR_MAMEKEY(END),3)
203 
204 	PORT_START("Y6")
205 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SPACE") PORT_CODE(KEYCODE_SPACE) PORT_CHAR(' ')
206 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("DEL") PORT_CODE(KEYCODE_BACKSPACE) PORT_CHAR(8)
207 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("ESC") PORT_CODE(KEYCODE_ESC) PORT_CHAR(UCHAR_MAMEKEY(ESC),27)
208 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E2") PORT_CODE(KEYCODE_RALT) PORT_CHAR(UCHAR_MAMEKEY(RALT))
209 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL1") PORT_CODE(KEYCODE_LCONTROL) PORT_CHAR(UCHAR_MAMEKEY(LCONTROL))
210 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("CTRL2") PORT_CODE(KEYCODE_RCONTROL) PORT_CHAR(UCHAR_MAMEKEY(RCONTROL))
211 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("E1") PORT_CODE(KEYCODE_LALT) PORT_CHAR(UCHAR_MAMEKEY(LALT))
212 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT") PORT_CODE(KEYCODE_LSHIFT) PORT_CODE(KEYCODE_RSHIFT) PORT_CHAR(UCHAR_SHIFT_1)
213 
214 	PORT_START("Y7")
215 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("SHIFT LOCK") PORT_CODE(KEYCODE_CAPSLOCK) PORT_CHAR(UCHAR_MAMEKEY(CAPSLOCK))
216 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("(unknown)") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1))
217 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("LINE FEED") PORT_CODE(KEYCODE_HOME) PORT_CHAR(UCHAR_MAMEKEY(HOME)) PORT_CHAR(10)
218 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_UP) PORT_CODE(KEYCODE_UP) PORT_CHAR(UCHAR_MAMEKEY(UP))
219 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_RIGHT) PORT_CODE(KEYCODE_RIGHT) PORT_CHAR(UCHAR_MAMEKEY(RIGHT))
220 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME("RETURN") PORT_CODE(KEYCODE_ENTER) PORT_CODE(KEYCODE_ENTER_PAD) PORT_CHAR(13)
221 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_DOWN) PORT_CODE(KEYCODE_DOWN) PORT_CHAR(UCHAR_MAMEKEY(DOWN))
222 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_KEYBOARD ) PORT_NAME(UTF8_LEFT) PORT_CODE(KEYCODE_LEFT) PORT_CHAR(UCHAR_MAMEKEY(LEFT))
223 
224 	PORT_START("RUN")
225 	PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Run/Stop") PORT_CODE(KEYCODE_F3) PORT_CHAR(UCHAR_MAMEKEY(F3)) PORT_TOGGLE PORT_WRITE_LINE_DEVICE_MEMBER(CDP1802_TAG, cosmac_device, clear_w)
226 INPUT_PORTS_END
227 
228 /* CDP1802 Interface */
229 
230 READ_LINE_MEMBER( tmc600_state::ef2_r )
231 {
232 	return m_cassette->input() < 0;
233 }
234 
READ_LINE_MEMBER(tmc600_state::ef3_r)235 READ_LINE_MEMBER( tmc600_state::ef3_r )
236 {
237 	return !BIT(m_key_row[(m_out3 >> 3) & 0x07]->read(), m_out3 & 0x07);
238 }
239 
WRITE_LINE_MEMBER(tmc600_state::q_w)240 WRITE_LINE_MEMBER( tmc600_state::q_w )
241 {
242 	m_cassette->output(state ? +1.0 : -1.0);
243 }
244 
sc_w(uint8_t data)245 void tmc600_state::sc_w(uint8_t data)
246 {
247 	if (data == COSMAC_STATE_CODE_S3_INTERRUPT) {
248 		m_maincpu->int_w(CLEAR_LINE);
249 	}
250 }
251 
out3_w(uint8_t data)252 void tmc600_state::out3_w(uint8_t data)
253 {
254 	m_out3 = data;
255 }
256 
257 /* Machine Drivers */
258 
tmc600(machine_config & config)259 void tmc600_state::tmc600(machine_config &config)
260 {
261 	// CPU
262 	cdp1802_device &cpu(CDP1802(config, CDP1802_TAG, 3.57_MHz_XTAL));
263 	cpu.set_addrmap(AS_PROGRAM, &tmc600_state::tmc600_map);
264 	cpu.set_addrmap(AS_IO, &tmc600_state::tmc600_io_map);
265 	cpu.wait_cb().set_constant(1);
266 	cpu.ef2_cb().set(FUNC(tmc600_state::ef2_r));
267 	cpu.ef3_cb().set(FUNC(tmc600_state::ef3_r));
268 	cpu.q_cb().set(FUNC(tmc600_state::q_w));
269 	cpu.sc_cb().set(FUNC(tmc600_state::sc_w));
270 	cpu.tpb_cb().set(CDP1852_KB_TAG, FUNC(cdp1852_device::clock_w));
271 	cpu.tpb_cb().append(CDP1852_TMC700_TAG, FUNC(cdp1852_device::clock_w));
272 
273 	// sound and video hardware
274 	tmc600_video(config);
275 
276 	// keyboard output latch
277 	CDP1852(config, m_bwio); // clock is CDP1802 TPB
278 	m_bwio->mode_cb().set_constant(1);
279 	m_bwio->do_cb().set(FUNC(tmc600_state::out3_w));
280 
281 #if 0
282 	// address bus demux for expansion bus
283 	cdp1852_device &demux(CDP1852(config, CDP1852_BUS_TAG)); // clock is expansion bus TPA
284 	demux.mode_cb().set_constant(0);
285 #endif
286 
287 	// printer output latch
288 	cdp1852_device &prtout(CDP1852(config, CDP1852_TMC700_TAG)); // clock is CDP1802 TPB
289 	prtout.mode_cb().set_constant(1);
290 	prtout.do_cb().set(FUNC(tmc600_state::printer_w));
291 
292 	// printer connector
293 	CENTRONICS(config, m_centronics, centronics_devices, "printer");
294 	m_centronics->busy_handler().set(CDP1802_TAG, FUNC(cosmac_device::ef4_w)).exor(1);
295 
296 	// cassette
297 	CASSETTE(config, m_cassette);
298 	m_cassette->set_default_state(CASSETTE_STOPPED | CASSETTE_MOTOR_ENABLED | CASSETTE_SPEAKER_ENABLED);
299 
300 	// expansion bus connector
301 	TMC600_EUROBUS_SLOT(config, m_bus, tmc600_eurobus_cards, nullptr);
302 
303 	// internal RAM
304 	RAM(config, RAM_TAG).set_default_size("8K");
305 }
306 
307 /* ROMs */
308 
309 #if 0
310 ROM_START( tmc600s1 )
311 	ROM_REGION( 0x6000, CDP1802_TAG, 0 )
312 	ROM_LOAD( "sb20",       0x0000, 0x1000, NO_DUMP )
313 	ROM_LOAD( "sb21",       0x1000, 0x1000, NO_DUMP )
314 	ROM_LOAD( "sb22",       0x2000, 0x1000, NO_DUMP )
315 	ROM_LOAD( "sb23",       0x3000, 0x1000, NO_DUMP )
316 	ROM_SYSTEM_BIOS( 0, "sb040282", "SB040282" )
317 	ROMX_LOAD( "190482",    0x4000, 0x1000, NO_DUMP, ROM_BIOS(0) )
318 	ROM_SYSTEM_BIOS( 1, "sbdos", "SBDOS" )
319 	ROMX_LOAD( "190482_",   0x4000, 0x1000, NO_DUMP, ROM_BIOS(1) )
320 	ROMX_LOAD( "190482_v",  0x5000, 0x1000, NO_DUMP, ROM_BIOS(1) )
321 
322 	ROM_REGION( 0x1000, "chargen", 0 )
323 	ROM_LOAD( "chargen",    0x0000, 0x1000, CRC(93f92cbf) SHA1(371156fb38fa5319c6fde537ccf14eed94e7adfb) )
324 ROM_END
325 #endif
326 
327 ROM_START( tmc600s2 )
328 	ROM_REGION( 0x6000, CDP1802_TAG, 0 )
329 	ROM_LOAD( "sb30",       0x0000, 0x1000, CRC(95d1292a) SHA1(1fa52d59d3005f8ac74a32c2164fdb22947c2748) )
330 	ROM_LOAD( "sb31",       0x1000, 0x1000, CRC(2c8f3d17) SHA1(f14e8adbcddeaeaa29b1e7f3dfa741f4e230f599) )
331 	ROM_LOAD( "sb32",       0x2000, 0x1000, CRC(dd58a128) SHA1(be9bdb0fc5e0cc3dcc7f2fb7ccab69bf5b043803) )
332 	ROM_LOAD( "sb33",       0x3000, 0x1000, CRC(b7d241fa) SHA1(6f3eadf86c4e3aaf93d123e302a18dc4d9db964b) )
333 	ROM_SYSTEM_BIOS( 0, "sb040282", "SB040282" )
334 	ROMX_LOAD( "151182",    0x4000, 0x1000, CRC(c1a8d9d8) SHA1(4552e1f06d0e338ba7b0f1c3a20b8a51c27dafde), ROM_BIOS(0) )
335 	ROM_SYSTEM_BIOS( 1, "sbdos", "SBDOS" )
336 	ROMX_LOAD( "151182_",   0x4000, 0x1000, NO_DUMP, ROM_BIOS(1) )
337 	ROMX_LOAD( "151182_v",  0x5000, 0x1000, NO_DUMP, ROM_BIOS(1) )
338 
339 	ROM_REGION( 0x1000, "chargen", 0 )
340 	ROM_LOAD( "chargen",    0x0000, 0x1000, CRC(93f92cbf) SHA1(371156fb38fa5319c6fde537ccf14eed94e7adfb) )
341 ROM_END
342 
343 /* System Drivers */
344 //    YEAR  NAME      PARENT  COMPAT  MACHINE  INPUT   CLASS         INIT        COMPANY        FULLNAME                     FLAGS
345 //COMP( 1982, tmc600s1, 0,      0,      tmc600,  tmc600, tmc600_state, empty_init, "Telercas Oy", "Telmac TMC-600 (Sarja I)",  MACHINE_NOT_WORKING )
346 COMP( 1982, tmc600s2, 0,      0,      tmc600,  tmc600, tmc600_state, empty_init, "Telercas Oy", "Telmac TMC-600 (Sarja II)", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
347