1 // license:BSD-3-Clause
2 // copyright-holders:Miodrag Milanovic
3 /*
4     DataEast/Sega Version 1 and 2
5 
6     Main CPU: 6808 @ 4MHz (internally divided by 4)
7     Audio CPU: 68B09E @ 2MHz
8     Audio: YM2151 @ 3.58MHz, MSM5205 @ 384kHz
9 */
10 
11 #include "emu.h"
12 
13 #include "machine/decopincpu.h"
14 #include "machine/genpin.h"
15 
16 #include "cpu/m6800/m6800.h"
17 #include "cpu/m6809/m6809.h"
18 #include "machine/6821pia.h"
19 #include "sound/msm5205.h"
20 #include "sound/ym2151.h"
21 #include "speaker.h"
22 
23 #include "de2.lh"
24 #include "de2a3.lh"
25 
26 
27 // To start Secret Service, hold I, O and Left ALT while pressing Start.
28 // To start Laser War, hold S, D, and F while pressing Start.
29 // To start Back to the Future, hold D and F while pressing Start.
30 // To start The Simpsons, hold D, F and G while pressing Start (can be tempremental)
31 
32 // Data East CPU board is similar to Williams System 11, but without the generic audio board.
33 // For now, we'll presume the timings are the same.
34 
35 class de_2_state : public genpin_class
36 {
37 public:
de_2_state(const machine_config & mconfig,device_type type,const char * tag)38 	de_2_state(const machine_config &mconfig, device_type type, const char *tag)
39 		: genpin_class(mconfig, type, tag)
40 		, m_ym2151(*this, "ym2151")
41 		, m_audiocpu(*this, "audiocpu")
42 		, m_msm5205(*this, "msm5205")
43 		, m_sample_bank(*this, "sample_bank")
44 		, m_digits(*this, "digit%u", 0U)
45 		, m_diag_digit(*this, "digit60")
46 	{ }
47 
48 	void de_type1(machine_config &config);
49 	void de_type2(machine_config &config);
50 	void de_type2_alpha3(machine_config &config);
51 	void de_type3(machine_config &config);
52 
53 private:
54 	virtual void machine_start() override;
55 	virtual void machine_reset() override;
56 
57 	void de_bg_audio(machine_config &config);
58 	void de_2_map(address_map &map);
59 	void de_2_audio_map(address_map &map);
60 
61 	void sample_w(uint8_t data);
62 	void pia34_pa_w(uint8_t data);
63 	void type2alpha3_pia34_pa_w(uint8_t data);
64 	void alpha3_pia34_pa_w(uint8_t data);
65 	uint8_t switch_r();
66 	void switch_w(uint8_t data);
67 	void pia2c_pa_w(uint8_t data);
68 	void pia2c_pb_w(uint8_t data);
DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w)69 	DECLARE_WRITE_LINE_MEMBER(pia28_ca2_w) { } // comma3&4
DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w)70 	DECLARE_WRITE_LINE_MEMBER(pia28_cb2_w) { } // comma1&2
71 	uint8_t pia28_w7_r();
72 	void dig0_w(uint8_t data);
73 	void dig1_w(uint8_t data);
74 	void type2alpha3_dig1_w(uint8_t data);
75 	void alpha3_dig1_w(uint8_t data);
76 	void lamp0_w(uint8_t data);
lamp1_w(uint8_t data)77 	void lamp1_w(uint8_t data) { }
78 	DECLARE_WRITE_LINE_MEMBER(ym2151_irq_w);
79 	DECLARE_WRITE_LINE_MEMBER(msm5205_irq_w);
sol2_w(uint8_t data)80 	void sol2_w(uint8_t data) { } // solenoids 8-15
81 	void sol3_w(uint8_t data);
82 	void sound_w(uint8_t data);
83 	DECLARE_WRITE_LINE_MEMBER(pia21_ca2_w);
84 
85 	uint8_t sound_latch_r();
86 	void sample_bank_w(uint8_t data);
87 
88 	// devcb callbacks
89 	uint8_t display_r(offs_t offset);
90 	void display_w(offs_t offset, uint8_t data);
91 	void type2alpha3_display_w(offs_t offset, uint8_t data);
92 	void type3_display_w(offs_t offset, uint8_t data);
93 	void lamps_w(offs_t offset, uint8_t data);
94 
95 	// devices
96 	required_device<ym2151_device> m_ym2151;
97 	required_device<cpu_device> m_audiocpu;
98 	required_device<msm5205_device> m_msm5205;
99 	required_memory_bank m_sample_bank;
100 	output_finder<32> m_digits;
101 	output_finder<> m_diag_digit;
102 
103 	uint8_t m_sample_data;
104 	bool m_more_data;
105 	bool m_nmi_enable;
106 
107 	uint32_t m_segment1;
108 	uint32_t m_segment2;
109 	uint8_t m_strobe;
110 	uint8_t m_kbdrow;
111 	uint8_t m_diag;
112 	bool m_ca1;
113 	uint8_t m_sound_data;
114 
115 	uint8_t m_sample_bank_num;
116 	uint8_t m_msm_prescaler;
117 };
118 
119 
de_2_map(address_map & map)120 void de_2_state::de_2_map(address_map &map)
121 {
122 	map(0x0000, 0x1fff).ram().share("nvram");
123 	map(0x2100, 0x2103).rw("pia21", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // sound+solenoids
124 	map(0x2200, 0x2200).w(FUNC(de_2_state::sol3_w)); // solenoids
125 	map(0x2400, 0x2403).rw("pia24", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // lamps
126 	map(0x2800, 0x2803).rw("pia28", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // display
127 	map(0x2c00, 0x2c03).rw("pia2c", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // alphanumeric display
128 	map(0x3000, 0x3003).rw("pia30", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // inputs
129 	map(0x3400, 0x3403).rw("pia34", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); // widget
130 	map(0x4000, 0xffff).rom();
131 }
132 
de_2_audio_map(address_map & map)133 void de_2_state::de_2_audio_map(address_map &map)
134 {
135 	map(0x0000, 0x1fff).ram();
136 	map(0x2000, 0x2001).rw(m_ym2151, FUNC(ym2151_device::read), FUNC(ym2151_device::write));
137 	map(0x2400, 0x2400).r(FUNC(de_2_state::sound_latch_r));
138 	map(0x2800, 0x2800).w(FUNC(de_2_state::sample_bank_w));
139 	// 0x2c00        - 4052(?)
140 	map(0x3000, 0x3000).w(FUNC(de_2_state::sample_w));
141 	// 0x3800        - Watchdog reset
142 	map(0x4000, 0x7fff).bankr("sample_bank");
143 	map(0x8000, 0xffff).rom();
144 }
145 
146 static INPUT_PORTS_START( de_2 )
147 	PORT_START("INP0")
148 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
149 
150 	PORT_START("INP1")
151 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_TILT )
152 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER )
153 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START )
154 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN3 )
155 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN2 )
156 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
157 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER )
158 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER )
159 
160 	PORT_START("INP2")
PORT_CODE(KEYCODE_A)161 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_A)
162 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_S)
163 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D)
164 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F)
165 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G)
166 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H)
167 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J)
168 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K)
169 
170 	PORT_START("INP4")
171 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L)
172 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Z)
173 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_C)
174 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_V)
175 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_B)
176 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_N)
177 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_M)
178 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COMMA)
179 
180 	PORT_START("INP8")
181 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_STOP)
182 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_SLASH)
183 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_COLON)
184 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_QUOTE)
185 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_X)
186 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_MINUS)
187 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_EQUALS)
188 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSPACE)
189 
190 	PORT_START("INP10")
191 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_OPENBRACE)
192 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_CLOSEBRACE)
193 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_BACKSLASH)
194 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_ENTER)
195 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LEFT)
196 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_RIGHT)
197 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_UP)
198 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_DOWN)
199 
200 	PORT_START("INP20")
201 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Q)
202 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_W)
203 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_E)
204 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_R)
205 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y)
206 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U)
207 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I)
208 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_O)
209 
210 	PORT_START("INP40")
211 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_LALT)
212 	PORT_BIT( 0xfe, IP_ACTIVE_LOW, IPT_UNKNOWN )
213 
214 	PORT_START("INP80")
215 	PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNKNOWN )
216 
217 INPUT_PORTS_END
218 
219 
220 void de_2_state::machine_reset()
221 {
222 	genpin_class::machine_reset();
223 
224 	m_sample_bank->set_entry(0);
225 	m_more_data = false;
226 }
227 
machine_start()228 void de_2_state::machine_start()
229 {
230 	genpin_class::machine_start();
231 
232 	m_digits.resolve();
233 	m_diag_digit.resolve();
234 
235 	uint8_t *const ROM = memregion("sound1")->base();
236 	m_sample_bank->configure_entries(0, 16, &ROM[0x0000], 0x4000);
237 	m_sample_bank->set_entry(0);
238 }
239 
WRITE_LINE_MEMBER(de_2_state::ym2151_irq_w)240 WRITE_LINE_MEMBER(de_2_state::ym2151_irq_w)
241 {
242 	m_audiocpu->set_input_line(M6809_IRQ_LINE,state);
243 }
244 
WRITE_LINE_MEMBER(de_2_state::msm5205_irq_w)245 WRITE_LINE_MEMBER(de_2_state::msm5205_irq_w)
246 {
247 	m_msm5205->data_w(m_sample_data >> 4);
248 	if(m_more_data)
249 	{
250 		if(m_nmi_enable)
251 			m_audiocpu->pulse_input_line(INPUT_LINE_NMI, attotime::zero);  // generate NMI when we need more data
252 		m_more_data = false;
253 	}
254 	else
255 	{
256 		m_more_data = true;
257 		m_sample_data <<= 4;
258 	}
259 }
260 
261 // 6821 PIA at 0x2100
sol3_w(uint8_t data)262 void de_2_state::sol3_w(uint8_t data)
263 {
264 }
265 
sound_w(uint8_t data)266 void de_2_state::sound_w(uint8_t data)
267 {
268 	m_sound_data = data;
269 	m_audiocpu->set_input_line(M6809_FIRQ_LINE, ASSERT_LINE);
270 }
271 
WRITE_LINE_MEMBER(de_2_state::pia21_ca2_w)272 WRITE_LINE_MEMBER( de_2_state::pia21_ca2_w )
273 {
274 // sound ns
275 	m_ca1 = state;
276 }
277 
278 // 6821 PIA at 0x2400
lamp0_w(uint8_t data)279 void de_2_state::lamp0_w(uint8_t data)
280 {
281 }
282 
283 // 6821 PIA at 0x2800
dig0_w(uint8_t data)284 void de_2_state::dig0_w(uint8_t data)
285 {
286 	static const uint8_t patterns[16] = { 0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7c, 0x07, 0x7f, 0x67, 0x58, 0x4c, 0x62, 0x69, 0x78, 0 }; // 7447
287 	data &= 0x7f;
288 	m_strobe = data & 15;
289 	m_diag = (data & 0x70) >> 4;
290 	m_diag_digit = patterns[data>>4]; // diag digit
291 	m_segment1 = 0;
292 	m_segment2 = 0;
293 }
294 
dig1_w(uint8_t data)295 void de_2_state::dig1_w(uint8_t data)
296 {
297 	m_segment2 |= data;
298 	m_segment2 |= 0x30000;
299 	if ((m_segment2 & 0x70000) == 0x30000)
300 	{
301 		m_digits[m_strobe+16] = bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0);
302 		m_segment2 |= 0x40000;
303 	}
304 }
305 
type2alpha3_dig1_w(uint8_t data)306 void de_2_state::type2alpha3_dig1_w(uint8_t data)
307 {
308 	m_segment2 |= data;
309 	m_segment2 |= 0x20000;
310 	if ((m_segment2 & 0x70000) == 0x30000)
311 	{
312 		m_digits[m_strobe+16] = bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0);
313 		m_segment2 |= 0x40000;
314 	}
315 }
316 
alpha3_dig1_w(uint8_t data)317 void de_2_state::alpha3_dig1_w(uint8_t data)
318 {
319 	m_segment2 |= data;
320 	m_segment2 |= 0x20000;
321 	if ((m_segment2 & 0x70000) == 0x30000)
322 	{
323 		m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
324 		m_segment2 |= 0x40000;
325 	}
326 }
327 
pia28_w7_r()328 uint8_t de_2_state::pia28_w7_r()
329 {
330 	uint8_t ret = 0x80;
331 
332 	ret |= m_strobe;
333 	ret |= m_diag << 4;
334 
335 	return ret;
336 }
337 
338 // 6821 PIA at 0x2c00
pia2c_pa_w(uint8_t data)339 void de_2_state::pia2c_pa_w(uint8_t data)
340 {
341 	m_segment1 |= (data<<8);
342 	m_segment1 |= 0x10000;
343 	if ((m_segment1 & 0x70000) == 0x30000)
344 	{
345 		m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
346 		m_segment1 |= 0x40000;
347 	}
348 }
349 
pia2c_pb_w(uint8_t data)350 void de_2_state::pia2c_pb_w(uint8_t data)
351 {
352 	m_segment1 |= data;
353 	m_segment1 |= 0x20000;
354 	if ((m_segment1 & 0x70000) == 0x30000)
355 	{
356 		m_digits[m_strobe] = bitswap<16>(m_segment1, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
357 		m_segment1 |= 0x40000;
358 	}
359 }
360 
361 
362 // 6821 PIA at 0x3000
switch_r()363 uint8_t de_2_state::switch_r()
364 {
365 	char kbdrow[8];
366 	sprintf(kbdrow,"INP%X",m_kbdrow);
367 	return ~ioport(kbdrow)->read();
368 }
369 
switch_w(uint8_t data)370 void de_2_state::switch_w(uint8_t data)
371 {
372 	int x;
373 	// about every second, 0xFF is written here, but it would be impossible to select more than one set of switches
374 	// at once, so just return the first bit set.  Maybe 0xFF has special meaning, or is just a disable?
375 	for(x=0;x<8;x++)
376 	{
377 		if(data & (1<<x))
378 			break;
379 	}
380 	m_kbdrow = data & (1<<x);
381 }
382 
383 // 6821 PIA at 0x3400
pia34_pa_w(uint8_t data)384 void de_2_state::pia34_pa_w(uint8_t data)
385 {
386 	// Not connected on alphanumeric type 2 boards
387 }
388 
type2alpha3_pia34_pa_w(uint8_t data)389 void de_2_state::type2alpha3_pia34_pa_w(uint8_t data)
390 {
391 	m_segment2 |= (data<<8);
392 	m_segment2 |= 0x10000;
393 	if ((m_segment2 & 0x70000) == 0x30000)
394 	{
395 		m_digits[m_strobe+16] = bitswap<16>(m_segment2, 7, 15, 12, 10, 8, 14, 13, 9, 11, 6, 5, 4, 3, 2, 1, 0);
396 		m_segment2 |= 0x40000;
397 	}
398 }
399 
alpha3_pia34_pa_w(uint8_t data)400 void de_2_state::alpha3_pia34_pa_w(uint8_t data)
401 {
402 	m_segment2 |= (data<<8);
403 	m_segment2 |= 0x10000;
404 	if ((m_segment2 & 0x70000) == 0x30000)
405 	{
406 		m_digits[m_strobe+16] = bitswap<16>(m_segment2, 11, 15, 12, 10, 8, 14, 13, 9, 7, 6, 5, 4, 3, 2, 1, 0);
407 		m_segment2 |= 0x40000;
408 	}
409 }
410 
411 
412 // Sound board
sample_w(uint8_t data)413 void de_2_state::sample_w(uint8_t data)
414 {
415 	m_sample_data = data;
416 }
417 
sound_latch_r()418 uint8_t de_2_state::sound_latch_r()
419 {
420 	m_audiocpu->set_input_line(M6809_FIRQ_LINE, CLEAR_LINE);
421 	return m_sound_data;
422 }
423 
sample_bank_w(uint8_t data)424 void de_2_state::sample_bank_w(uint8_t data)
425 {
426 	static constexpr uint8_t prescale[4] = { msm5205_device::S96_4B, msm5205_device::S48_4B, msm5205_device::S64_4B, 0 };
427 
428 	m_sample_bank_num = (data & 0x07);
429 	m_sample_bank->set_entry(m_sample_bank_num);
430 	m_msm_prescaler = (data & 0x30) >> 4;
431 	m_nmi_enable = (~data & 0x80);
432 	m_msm5205->playmode_w(prescale[m_msm_prescaler]);
433 	m_msm5205->reset_w(data & 0x40);
434 }
435 
display_r(offs_t offset)436 uint8_t de_2_state::display_r(offs_t offset)
437 {
438 	uint8_t ret = 0x00;
439 
440 	switch(offset)
441 	{
442 	case 0:
443 		ret = pia28_w7_r();
444 		break;
445 	}
446 
447 	return ret;
448 }
449 
display_w(offs_t offset,uint8_t data)450 void de_2_state::display_w(offs_t offset, uint8_t data)
451 {
452 	switch(offset)
453 	{
454 	case 0:
455 		dig0_w(data);
456 		break;
457 	case 1:
458 		dig1_w(data);
459 		break;
460 	case 2:
461 		pia2c_pa_w(data);
462 		break;
463 	case 3:
464 		pia2c_pb_w(data);
465 		break;
466 	case 4:
467 		pia34_pa_w(data);
468 		break;
469 	}
470 }
471 
type2alpha3_display_w(offs_t offset,uint8_t data)472 void de_2_state::type2alpha3_display_w(offs_t offset, uint8_t data)
473 {
474 	switch(offset)
475 	{
476 	case 0:
477 		dig0_w(data);
478 		break;
479 	case 1:
480 		type2alpha3_dig1_w(data);
481 		break;
482 	case 2:
483 		pia2c_pa_w(data);
484 		break;
485 	case 3:
486 		pia2c_pb_w(data);
487 		break;
488 	case 4:
489 		type2alpha3_pia34_pa_w(data);
490 		break;
491 	}
492 }
493 
type3_display_w(offs_t offset,uint8_t data)494 void de_2_state::type3_display_w(offs_t offset, uint8_t data)
495 {
496 	switch(offset)
497 	{
498 	case 0:
499 		dig0_w(data);
500 		break;
501 	case 1:
502 		alpha3_dig1_w(data);
503 		break;
504 	case 2:
505 		pia2c_pa_w(data);
506 		break;
507 	case 3:
508 		pia2c_pb_w(data);
509 		break;
510 	case 4:
511 		alpha3_pia34_pa_w(data);
512 		break;
513 	}
514 }
515 
lamps_w(offs_t offset,uint8_t data)516 void de_2_state::lamps_w(offs_t offset, uint8_t data)
517 {
518 	switch(offset)
519 	{
520 	case 0:
521 		lamp0_w(data);
522 		break;
523 	case 1:
524 		lamp1_w(data);
525 		break;
526 	}
527 }
528 
529 
de_bg_audio(machine_config & config)530 void de_2_state::de_bg_audio(machine_config &config)
531 {
532 	/* sound CPU */
533 	MC6809E(config, m_audiocpu, XTAL(8'000'000) / 4); // MC68B09E
534 	m_audiocpu->set_addrmap(AS_PROGRAM, &de_2_state::de_2_audio_map);
535 
536 	SPEAKER(config, "bg").front_center();
537 
538 	YM2151(config, m_ym2151, XTAL(3'579'545));
539 	m_ym2151->irq_handler().set(FUNC(de_2_state::ym2151_irq_w));
540 	m_ym2151->add_route(ALL_OUTPUTS, "bg", 0.50);
541 
542 	MSM5205(config, m_msm5205, XTAL(384'000));
543 	m_msm5205->vck_legacy_callback().set(FUNC(de_2_state::msm5205_irq_w));
544 	m_msm5205->set_prescaler_selector(msm5205_device::S96_4B);
545 	m_msm5205->add_route(ALL_OUTPUTS, "bg", 0.50);
546 }
547 
de_type1(machine_config & config)548 void de_2_state::de_type1(machine_config &config)
549 {
550 	/* basic machine hardware */
551 	decocpu_type1_device &decocpu(DECOCPU1(config, "decocpu", XTAL(8'000'000) / 2, "maincpu"));
552 	decocpu.display_read_callback().set(FUNC(de_2_state::display_r));
553 	decocpu.display_write_callback().set(FUNC(de_2_state::display_w));
554 	decocpu.soundlatch_write_callback().set(FUNC(de_2_state::sound_w));
555 	decocpu.switch_read_callback().set(FUNC(de_2_state::switch_r));
556 	decocpu.switch_write_callback().set(FUNC(de_2_state::switch_w));
557 	decocpu.lamp_write_callback().set(FUNC(de_2_state::lamps_w));
558 
559 	/* Video */
560 	config.set_default_layout(layout_de2);
561 
562 	genpin_audio(config);
563 	de_bg_audio(config);
564 }
565 
de_type2(machine_config & config)566 void de_2_state::de_type2(machine_config &config)
567 {
568 	/* basic machine hardware */
569 	decocpu_type2_device &decocpu(DECOCPU2(config, "decocpu", XTAL(8'000'000) / 2, "maincpu"));
570 	decocpu.display_read_callback().set(FUNC(de_2_state::display_r));
571 	decocpu.display_write_callback().set(FUNC(de_2_state::display_w));
572 	decocpu.soundlatch_write_callback().set(FUNC(de_2_state::sound_w));
573 	decocpu.switch_read_callback().set(FUNC(de_2_state::switch_r));
574 	decocpu.switch_write_callback().set(FUNC(de_2_state::switch_w));
575 	decocpu.lamp_write_callback().set(FUNC(de_2_state::lamps_w));
576 
577 	/* Video */
578 	config.set_default_layout(layout_de2);
579 
580 	genpin_audio(config);
581 	de_bg_audio(config);
582 }
583 
de_type2_alpha3(machine_config & config)584 void de_2_state::de_type2_alpha3(machine_config &config)
585 {
586 	/* basic machine hardware */
587 	de_type2(config);
588 	subdevice<decocpu_type2_device>("decocpu")->display_write_callback().set(FUNC(de_2_state::type2alpha3_display_w));
589 
590 	/* Video */
591 	config.set_default_layout(layout_de2a3);
592 }
593 
de_type3(machine_config & config)594 void de_2_state::de_type3(machine_config &config)
595 {
596 	/* basic machine hardware */
597 	decocpu_type3_device &decocpu(DECOCPU3(config, "decocpu", XTAL(8'000'000) / 2, "maincpu"));
598 	decocpu.display_read_callback().set(FUNC(de_2_state::display_r));
599 	decocpu.display_write_callback().set(FUNC(de_2_state::type3_display_w));
600 	decocpu.soundlatch_write_callback().set(FUNC(de_2_state::sound_w));
601 	decocpu.switch_read_callback().set(FUNC(de_2_state::switch_r));
602 	decocpu.switch_write_callback().set(FUNC(de_2_state::switch_w));
603 	decocpu.lamp_write_callback().set(FUNC(de_2_state::lamps_w));
604 
605 	/* Video */
606 	config.set_default_layout(layout_de2a3);
607 
608 	genpin_audio(config);
609 	de_bg_audio(config);
610 }
611 
612 
613 /*--------------------------------------------------------------------------------
614 / Back To the Future - CPU Rev 3 /Alpha Type 3 - 32K Roms - 32/64K Sound Roms
615 /--------------------------------------------------------------------------------*/
616 ROM_START(bttf_a28)
617 	ROM_REGION(0x10000, "maincpu", 0)
618 	ROM_LOAD("bttfb5.2-8", 0x4000, 0x4000, CRC(a7dafa3c) SHA1(a29b8986d1886aa7bb7dea2521c3d7143ab75320))
619 	ROM_LOAD("bttfc5.2-8", 0x8000, 0x8000, CRC(5dc9928f) SHA1(03de05ed7b04ba86d695f03b1a3d65788faf2d4f))
620 	ROM_REGION(0x10000, "audiocpu", 0)
621 	ROM_LOAD("bttfsf7.rom", 0x8000, 0x8000, CRC(7673146e) SHA1(d6bd7cf39c78c8aff0b1a0b6cfd46a2a8ce9e086))
622 	ROM_REGION(0x1000000, "sound1", 0)
623 	ROM_LOAD("bttfsf6.rom", 0x00000, 0x10000, CRC(468a8d9c) SHA1(713cf84cc5f0531e2e9f7aaa58ebeb53c28ba395))
624 	ROM_LOAD("bttfsf5.rom", 0x10000, 0x10000, CRC(37a6f6b8) SHA1(ebd603d36527a2af25dcda1fde5cdf9a34d1f9cd))
625 ROM_END
626 
627 ROM_START(bttf_a27)
628 	ROM_REGION(0x10000, "maincpu", 0)
629 	ROM_LOAD("bttfb5.2-7", 0x4000, 0x4000, CRC(24b53174) SHA1(00a5e47e70ce4244873980c946479f0bbc414f2e))
630 	ROM_LOAD("bttfc5.2-7", 0x8000, 0x8000, CRC(c4d85d7e) SHA1(88bb91f9ed50335fc402b68983b49319c7dd4e99))
631 	ROM_REGION(0x10000, "audiocpu", 0)
632 	ROM_LOAD("bttfsf7.rom", 0x8000, 0x8000, CRC(7673146e) SHA1(d6bd7cf39c78c8aff0b1a0b6cfd46a2a8ce9e086))
633 	ROM_REGION(0x1000000, "sound1", 0)
634 	ROM_LOAD("bttfsf6.rom", 0x00000, 0x10000, CRC(468a8d9c) SHA1(713cf84cc5f0531e2e9f7aaa58ebeb53c28ba395))
635 	ROM_LOAD("bttfsf5.rom", 0x10000, 0x10000, CRC(37a6f6b8) SHA1(ebd603d36527a2af25dcda1fde5cdf9a34d1f9cd))
636 ROM_END
637 
638 ROM_START(bttf_a20)
639 	ROM_REGION(0x10000, "maincpu", 0)
640 	ROM_LOAD("bttfb5.2-0", 0x0000, 0x8000, CRC(c0d4df6b) SHA1(647d0d0a5af04f4255a588da41a6cdb2cf522875))
641 	ROM_LOAD("bttfc5.2-0", 0x8000, 0x8000, CRC(a189a189) SHA1(9669653280c78c811931ea3944817c717f3b5b77))
642 	ROM_REGION(0x10000, "audiocpu", 0)
643 	ROM_LOAD("bttfsf7.rom", 0x8000, 0x8000, CRC(7673146e) SHA1(d6bd7cf39c78c8aff0b1a0b6cfd46a2a8ce9e086))
644 	ROM_REGION(0x1000000, "sound1", 0)
645 	ROM_LOAD("bttfsf6.rom", 0x00000, 0x10000, CRC(468a8d9c) SHA1(713cf84cc5f0531e2e9f7aaa58ebeb53c28ba395))
646 	ROM_LOAD("bttfsf5.rom", 0x10000, 0x10000, CRC(37a6f6b8) SHA1(ebd603d36527a2af25dcda1fde5cdf9a34d1f9cd))
647 ROM_END
648 
649 ROM_START(bttf_a21)
650 	ROM_REGION(0x10000, "maincpu", 0)
651 	ROM_LOAD("bktofutr.b5", 0x4000, 0x4000, CRC(a651f867) SHA1(99cff09a06a99abac505c7732bb4ed985f0946e4))
652 	ROM_LOAD("bktofutr.c5", 0x8000, 0x8000, CRC(118ae58e) SHA1(a17e4cc3c12ca770e6e0674cfbeb55482739f735))
653 	ROM_REGION(0x10000, "audiocpu", 0)
654 	ROM_LOAD("bttfsf7.rom", 0x8000, 0x8000, CRC(7673146e) SHA1(d6bd7cf39c78c8aff0b1a0b6cfd46a2a8ce9e086))
655 	ROM_REGION(0x1000000, "sound1", 0)
656 	ROM_LOAD("bttfsf6.rom", 0x00000, 0x10000, CRC(468a8d9c) SHA1(713cf84cc5f0531e2e9f7aaa58ebeb53c28ba395))
657 	ROM_LOAD("bttfsf5.rom", 0x10000, 0x10000, CRC(37a6f6b8) SHA1(ebd603d36527a2af25dcda1fde5cdf9a34d1f9cd))
658 ROM_END
659 
660 ROM_START(bttf_g27)
661 	ROM_REGION(0x10000, "maincpu", 0)
662 	ROM_LOAD("bttfb5g.2-7", 0x4000, 0x4000, CRC(5e3e3cfa) SHA1(2d489c48463c7d28614d56aa566ffbc745bf6a8b))
663 	ROM_LOAD("bttfc5g.2-7", 0x8000, 0x8000, CRC(31dec6d0) SHA1(b0f9323ace3f6d96790be7fe2df67b974c291a29))
664 	ROM_REGION(0x10000, "audiocpu", 0)
665 	ROM_LOAD("bttfsf7.rom", 0x8000, 0x8000, CRC(7673146e) SHA1(d6bd7cf39c78c8aff0b1a0b6cfd46a2a8ce9e086))
666 	ROM_REGION(0x1000000, "sound1", 0)
667 	ROM_LOAD("bttfsf6.rom", 0x00000, 0x10000, CRC(468a8d9c) SHA1(713cf84cc5f0531e2e9f7aaa58ebeb53c28ba395))
668 	ROM_LOAD("bttfsf5.rom", 0x10000, 0x10000, CRC(37a6f6b8) SHA1(ebd603d36527a2af25dcda1fde5cdf9a34d1f9cd))
669 ROM_END
670 
671 /*-------------------------------------------------------------------------------
672 / King Kong - CPU Rev 3 /Alpha Type 3 16/32K Roms - 32/64K Sound Roms
673 /-------------------------------------------------------------------------------*/
674 ROM_START(kiko_a10)
675 	ROM_REGION(0x10000, "maincpu", 0)
676 	ROM_LOAD("kkcpu_b5.bin", 0x4000, 0x4000, CRC(97b80fd2) SHA1(a704bda771bd44676a0de2f698a713d10feb01f3))
677 	ROM_LOAD("kkcpu_c5.bin", 0x8000, 0x8000, CRC(d42cab64) SHA1(ca4ceac34384804395b3e3035a430560f194846b))
678 	ROM_REGION(0x10000, "audiocpu", 0)
679 	ROM_LOAD("kksnd_f7.bin", 0x8000, 0x8000, CRC(fb1b3e11) SHA1(3c9a6958749d7e4dc5a1a57d6683e3cb3dc34890))
680 	ROM_REGION(0x1000000, "sound1", 0)
681 	ROM_LOAD("kkvoi_f5.bin", 0x00000, 0x10000, CRC(415f814c) SHA1(27e5b6b7f7ce2e5548ee9bf30966fa4f276bdc4d))
682 	ROM_LOAD("kkvoi_f4.bin", 0x10000, 0x10000, CRC(bbdc836c) SHA1(825a02b4f058d9dbc387035eb6533547d1766396))
683 ROM_END
684 
685 /*-------------------------------------------------------------------
686 / Laser War - CPU Rev 1 /Alpha Type 1 - 32K ROM - 32/64K Sound Roms
687 /-------------------------------------------------------------------*/
688 ROM_START(lwar_a83)
689 	ROM_REGION(0x10000, "maincpu", 0)
690 	ROM_LOAD("lwar8-3.c5", 0x8000, 0x8000, CRC(eee158ee) SHA1(54db2342bdd15b16fee906dc65f183a957fd0012))
691 	ROM_REGION(0x10000, "audiocpu", 0)
692 	ROM_LOAD("lwar_e9.snd", 0x8000, 0x8000, CRC(9a6c834d) SHA1(c6e2c4658db4bd8dfcbb0351793837cdff30ba28))
693 	ROM_REGION(0x40000, "sound1", 0)
694 	ROM_LOAD("lwar_e6.snd", 0x00000, 0x10000, CRC(7307d795) SHA1(5d88b8d883a2f17ca9fa30c7e7ac29c9f236ac4d))
695 	ROM_LOAD("lwar_e7.snd", 0x10000, 0x10000, CRC(0285cff9) SHA1(2c5e3de649e419ec7944059f2a226aaf58fe2af5))
696 ROM_END
697 
698 ROM_START(lwar_a81)
699 	ROM_REGION(0x10000, "maincpu", 0)
700 	ROM_LOAD("c100_g8.256", 0x8000, 0x8000, CRC(fe63ef04) SHA1(edab4b7fab4a016e653a546110a4bc8c563e7cb7))
701 	ROM_REGION(0x10000, "audiocpu", 0)
702 	ROM_LOAD("lwar_e9.snd", 0x8000, 0x8000, CRC(9a6c834d) SHA1(c6e2c4658db4bd8dfcbb0351793837cdff30ba28))
703 	ROM_REGION(0x40000, "sound1", 0)
704 	ROM_LOAD("lwar_e6.snd", 0x00000, 0x10000, CRC(7307d795) SHA1(5d88b8d883a2f17ca9fa30c7e7ac29c9f236ac4d))
705 	ROM_LOAD("lwar_e7.snd", 0x10000, 0x10000, CRC(0285cff9) SHA1(2c5e3de649e419ec7944059f2a226aaf58fe2af5))
706 ROM_END
707 
708 ROM_START(lwar_e90)
709 	ROM_REGION(0x10000, "maincpu", 0)
710 	ROM_LOAD("lwar9-0.e5", 0x8000, 0x8000, CRC(b596151f) SHA1(10dade79ded71625770ec7e21ea50b7aa64023d0))
711 	ROM_REGION(0x10000, "audiocpu", 0)
712 	ROM_LOAD("lwar_e9.snd", 0x8000, 0x8000, CRC(9a6c834d) SHA1(c6e2c4658db4bd8dfcbb0351793837cdff30ba28))
713 	ROM_REGION(0x40000, "sound1", 0)
714 	ROM_LOAD("lwar_e6.snd", 0x00000, 0x10000, CRC(7307d795) SHA1(5d88b8d883a2f17ca9fa30c7e7ac29c9f236ac4d))
715 	ROM_LOAD("lwar_e7.snd", 0x10000, 0x10000, CRC(0285cff9) SHA1(2c5e3de649e419ec7944059f2a226aaf58fe2af5))
716 ROM_END
717 
718 
719 /*-----------------------------------------------------------------------------------
720 / Monday Night Football - CPU Rev 2 /Alpha Type 3 16/32K Roms - 32/64K Sound Roms
721 /----------------------------------------------------------------------------------*/
722 ROM_START(mnfb_c29)
723 	ROM_REGION(0x10000, "maincpu", 0)
724 	ROM_LOAD("mnfb2-9.b5", 0x4000, 0x4000, BAD_DUMP CRC(2d6805d1) SHA1(f222cbf30d07975279eea210738f7d4f73b3fcf4)) // patched by PINMAME dev
725 	ROM_LOAD("mnfb2-9.c5", 0x8000, 0x8000, CRC(98d50cf5) SHA1(59d3b16f8195ab95cece71a12dab3349dfeb2c2b))
726 	ROM_REGION(0x10000, "audiocpu", 0)
727 	ROM_LOAD("mnf-f7.256", 0x8000, 0x8000, CRC(fbc2d6f6) SHA1(33173c081de776d32e926481e94b265ec48d770b))
728 	ROM_REGION(0x40000, "sound1", 0)
729 	ROM_LOAD("mnf-f5-6.512", 0x00000, 0x10000, CRC(0c6ea963) SHA1(8c88fa588222ef8a6c872b8c5b49639b108384d4))
730 	ROM_LOAD("mnf-f4-5.512", 0x10000, 0x10000, CRC(efca5d80) SHA1(9655c885dd64aa170205170b6a0c052bd9367379))
731 ROM_END
732 
733 ROM_START(mnfb_c27)
734 	ROM_REGION(0x10000, "maincpu", 0)
735 	ROM_LOAD("mnfb2-7.b5", 0x4000, 0x4000, CRC(995eb9b8) SHA1(d05d74393fda59ffd8d7b5546313779cdb10d23e))
736 	ROM_LOAD("mnfb2-7.c5", 0x8000, 0x8000, CRC(579d81df) SHA1(9c96da34d37d3369513003e208222bd6e8698638))
737 	ROM_REGION(0x10000, "audiocpu", 0)
738 	ROM_LOAD("mnf-f7.256", 0x8000, 0x8000, CRC(fbc2d6f6) SHA1(33173c081de776d32e926481e94b265ec48d770b))
739 	ROM_REGION(0x40000, "sound1", 0)
740 	ROM_LOAD("mnf-f5-6.512", 0x00000, 0x10000, CRC(0c6ea963) SHA1(8c88fa588222ef8a6c872b8c5b49639b108384d4))
741 	ROM_LOAD("mnf-f4-5.512", 0x10000, 0x10000, CRC(efca5d80) SHA1(9655c885dd64aa170205170b6a0c052bd9367379))
742 ROM_END
743 
744 /*-------------------------------------------------------------------------------
745 / Phantom of the Opera - CPU Rev 3 /Alpha Type 3 16/32K Roms - 32/64K Sound Roms
746 /-------------------------------------------------------------------------------*/
747 // Display LED inputs are in the same order as for Monday Night Football, is this actually CPU type 2?
748 ROM_START(poto_a32)
749 	ROM_REGION(0x10000, "maincpu", 0)
750 	ROM_LOAD("potob5.3-2", 0x4000, 0x4000, CRC(bdc39205) SHA1(67b3f56655ef2cc056912ab6e351cf83352abaa9))
751 	ROM_LOAD("potoc5.3-2", 0x8000, 0x8000, CRC(e6026455) SHA1(c1441fda6181e9014a8a6f93b7405998a952f508))
752 	ROM_REGION(0x10000, "audiocpu", 0)
753 	ROM_LOAD("potof7.rom", 0x8000, 0x8000, CRC(2e60b2e3) SHA1(0be89fc9b2c6548392febb35c1ace0eb912fc73f))
754 	ROM_REGION(0x40000, "sound1", 0)
755 	ROM_LOAD("potof6.rom", 0x00000, 0x10000, CRC(62b8f74b) SHA1(f82c706b88f49341bab9014bd83371259eb53b47))
756 	ROM_LOAD("potof5.rom", 0x10000, 0x10000, CRC(5a0537a8) SHA1(26724441d7e2edd7725337b262d95448499151ad))
757 ROM_END
758 
759 ROM_START(poto_a31)
760 	ROM_REGION(0x10000, "maincpu", 0)
761 	ROM_LOAD("potob5.3-1", 0x4000, 0x4000, CRC(b7be6fa8) SHA1(3ef77daafaf31e2388ac207275aa060f854bd4b9))
762 	ROM_LOAD("potoc5.3-1", 0x8000, 0x8000, CRC(4ce1d254) SHA1(4d24a230ae3a37674cc25ab5ae40c57acbdf5f04))
763 	ROM_REGION(0x10000, "audiocpu", 0)
764 	ROM_LOAD("potof7.rom", 0x8000, 0x8000, CRC(2e60b2e3) SHA1(0be89fc9b2c6548392febb35c1ace0eb912fc73f))
765 	ROM_REGION(0x40000, "sound1", 0)
766 	ROM_LOAD("potof6.rom", 0x00000, 0x10000, CRC(62b8f74b) SHA1(f82c706b88f49341bab9014bd83371259eb53b47))
767 	ROM_LOAD("potof5.rom", 0x10000, 0x10000, CRC(5a0537a8) SHA1(26724441d7e2edd7725337b262d95448499151ad))
768 ROM_END
769 
770 ROM_START(poto_a29)
771 	ROM_REGION(0x10000, "maincpu", 0)
772 	ROM_LOAD("potob5.2-9", 0x4000, 0x4000, CRC(f01b5510) SHA1(90c632ee74a2dbf877cfe013a69067b1771f1d67))
773 	ROM_LOAD("potoc5.2-9", 0x8000, 0x8000, CRC(c34975b3) SHA1(c9c57126a5da6d78b4066b1d316ffc840660689d))
774 	ROM_REGION(0x10000, "audiocpu", 0)
775 	ROM_LOAD("potof7.rom", 0x8000, 0x8000, CRC(2e60b2e3) SHA1(0be89fc9b2c6548392febb35c1ace0eb912fc73f))
776 	ROM_REGION(0x40000, "sound1", 0)
777 	ROM_LOAD("potof6.rom", 0x00000, 0x10000, CRC(62b8f74b) SHA1(f82c706b88f49341bab9014bd83371259eb53b47))
778 	ROM_LOAD("potof5.rom", 0x10000, 0x10000, CRC(5a0537a8) SHA1(26724441d7e2edd7725337b262d95448499151ad))
779 ROM_END
780 
781 /*-----------------------------------------------------------------------------------
782 / Playboy 35th Anniversary - CPU Rev 2 /Alpha Type 2 - 32K Roms - 32/64K Sound Roms
783 /-----------------------------------------------------------------------------------*/
784 ROM_START(play_a24)
785 	ROM_REGION(0x10000, "maincpu", 0)
786 	ROM_LOAD("play2-4.b5", 0x0000, 0x8000, CRC(bc8d7b32) SHA1(3b57dea2feb12315586283548e0bffdc8173b8fb))
787 	ROM_LOAD("play2-4.c5", 0x8000, 0x8000, CRC(47c30bc2) SHA1(c62e192ec01f4884226e9628baa2cad10cc57bd9))
788 	ROM_REGION(0x10000, "audiocpu", 0)
789 	ROM_LOAD("pbsnd7.dat", 0x8000, 0x8000, CRC(c2cf2cc5) SHA1(1277704b1b38558c341b52da5e06ffa9f07942ad))
790 	ROM_REGION(0x40000, "sound1", 0)
791 	ROM_LOAD("pbsnd6.dat", 0x00000, 0x10000, CRC(c2570631) SHA1(135db5b923689884c73aa5ce48f566db7f1cf831))
792 	ROM_LOAD("pbsnd5.dat", 0x10000, 0x10000, CRC(0fd30569) SHA1(0bf53fe4b5dffb5e15212c3371f51e98ad14e258))
793 ROM_END
794 
795 /*------------------------------------------------------------------
796 / Robocop - CPU Rev 3 /Alpha Type 3 - 32K Roms - 32/64K Sound Roms
797 /-----------------------------------------------------------------*/
798 ROM_START(robo_a34)
799 	ROM_REGION(0x10000, "maincpu", 0)
800 	ROM_LOAD("robob5.a34", 0x0000, 0x8000, CRC(5a611004) SHA1(08722f8f4386bbc467cfbe8854f0d45c4537bdc6))
801 	ROM_LOAD("roboc5.a34", 0x8000, 0x8000, CRC(c8705f47) SHA1(a29ad9e4e0269ab19dae77b1e70ff84c8c8d9e85))
802 	ROM_REGION(0x10000, "audiocpu", 0)
803 	ROM_LOAD("robof7.rom", 0x8000, 0x8000, CRC(fa0891bd) SHA1(332d03c7802989abf717564230993b54819ebc0d))
804 	ROM_REGION(0x40000, "sound1", 0)
805 	ROM_LOAD("robof6.rom", 0x00000, 0x10000, CRC(9246e107) SHA1(e8e72c0d099b17ea9e59ea7794011bad4c072c5e))
806 	ROM_LOAD("robof4.rom", 0x10000, 0x10000, CRC(27d31df3) SHA1(1611a508ce74eb62a07296d69782ea4fa14503fc))
807 ROM_END
808 
809 ROM_START(robo_a30)
810 	ROM_REGION(0x10000, "maincpu", 0)
811 	ROM_LOAD("b5.256", 0x0000, 0x8000, CRC(6870f3ae) SHA1(f02cace5f1d1922aed52c84efe60a46e5297865c))
812 	ROM_LOAD("c5.256", 0x8000, 0x8000, CRC(f2de58cf) SHA1(0b5dd14761b4c64c1b01faad923ab671573499c5))
813 	ROM_REGION(0x10000, "audiocpu", 0)
814 	ROM_LOAD("robof7.rom", 0x8000, 0x8000, CRC(fa0891bd) SHA1(332d03c7802989abf717564230993b54819ebc0d))
815 	ROM_REGION(0x40000, "sound1", 0)
816 	ROM_LOAD("robof6.rom", 0x00000, 0x10000, CRC(9246e107) SHA1(e8e72c0d099b17ea9e59ea7794011bad4c072c5e))
817 	ROM_LOAD("robof4.rom", 0x10000, 0x10000, CRC(27d31df3) SHA1(1611a508ce74eb62a07296d69782ea4fa14503fc))
818 ROM_END
819 
820 ROM_START(robo_a29)
821 	ROM_REGION(0x10000, "maincpu", 0)
822 	ROM_LOAD("robob5.a29", 0x0000, 0x8000, CRC(72497d0b) SHA1(8a970c879cd0aaef5970a77778f71c0f3d6da049))
823 	ROM_LOAD("roboc5.a29", 0x8000, 0x8000, CRC(b251b0b6) SHA1(3d340070494b102703e282ae3a7970f6f8aaede9))
824 	ROM_REGION(0x10000, "audiocpu", 0)
825 	ROM_LOAD("robof7.rom", 0x8000, 0x8000, CRC(fa0891bd) SHA1(332d03c7802989abf717564230993b54819ebc0d))
826 	ROM_REGION(0x40000, "sound1", 0)
827 	ROM_LOAD("robof6.rom", 0x00000, 0x10000, CRC(9246e107) SHA1(e8e72c0d099b17ea9e59ea7794011bad4c072c5e))
828 	ROM_LOAD("robof4.rom", 0x10000, 0x10000, CRC(27d31df3) SHA1(1611a508ce74eb62a07296d69782ea4fa14503fc))
829 ROM_END
830 
831 /*-------------------------------------------------------------------------
832 / Secret Service - CPU Rev 2 /Alpha Type 2 - 32K Roms - 32K/64K Sound Roms
833 /-------------------------------------------------------------------------*/
834 ROM_START(ssvc_a26)
835 	ROM_REGION(0x10000, "maincpu", 0)
836 	ROM_LOAD("ssvc2-6.b5", 0x0000, 0x8000, CRC(e5eab8cd) SHA1(63cb678084d4fb2131ba64ed9de1294830057960))
837 	ROM_LOAD("ssvc2-6.c5", 0x8000, 0x8000, CRC(171b97ae) SHA1(9d678b7b91a5d50ea3cf4f2352094c2355f917b2))
838 	ROM_REGION(0x10000, "audiocpu", 0)
839 	ROM_LOAD("sssndf7.rom", 0x8000, 0x8000, CRC(980778d0) SHA1(7c1f14d327b6d0e6d0fef058f96bb1cb440c9330))
840 	ROM_REGION(0x40000, "sound1", 0)
841 	ROM_LOAD("ssv1f6.rom", 0x00000, 0x10000, CRC(ccbc72f8) SHA1(c5c13fb8d05d7fb4005636655073d88b4d12d65e))
842 	ROM_LOAD("ssv2f4.rom", 0x10000, 0x10000, CRC(53832d16) SHA1(2227eb784e0221f1bf2bdf7ea48ecd122433f1ea))
843 ROM_END
844 
845 ROM_START(ssvc_b26)
846 	ROM_REGION(0x10000, "maincpu", 0)
847 	ROM_LOAD("ssvc2-6.b5", 0x0000, 0x8000, CRC(e5eab8cd) SHA1(63cb678084d4fb2131ba64ed9de1294830057960))
848 	ROM_LOAD("ssvc2-6.c5", 0x8000, 0x8000, CRC(171b97ae) SHA1(9d678b7b91a5d50ea3cf4f2352094c2355f917b2))
849 	ROM_REGION(0x10000, "audiocpu", 0)
850 	ROM_LOAD("sssndf7b.rom", 0x8000, 0x8000, CRC(4bd6b16a) SHA1(b9438a16cd35820628fe6eb82287b2c39fe4b1c6))
851 	ROM_REGION(0x40000, "sound1", 0)
852 	ROM_LOAD("ssv1f6.rom", 0x00000, 0x10000, CRC(ccbc72f8) SHA1(c5c13fb8d05d7fb4005636655073d88b4d12d65e))
853 	ROM_LOAD("ssv2f4.rom", 0x10000, 0x10000, CRC(53832d16) SHA1(2227eb784e0221f1bf2bdf7ea48ecd122433f1ea))
854 ROM_END
855 
856 ROM_START(ssvc_a42)
857 	ROM_REGION(0x10000, "maincpu", 0)
858 	ROM_LOAD("ss-b5.256", 0x0000, 0x8000, CRC(e7d27ea1) SHA1(997412f62c95cffc0cf9eba065fbc020574c7ad5))
859 	ROM_LOAD("ss-c5.256", 0x8000, 0x8000, CRC(eceab834) SHA1(d946adac7ec8688709fd75108674a82f2f5c7b53))
860 	ROM_REGION(0x10000, "audiocpu", 0)
861 	ROM_LOAD("sssndf7b.rom", 0x8000, 0x8000, CRC(4bd6b16a) SHA1(b9438a16cd35820628fe6eb82287b2c39fe4b1c6))
862 	ROM_REGION(0x40000, "sound1", 0)
863 	ROM_LOAD("ssv1f6.rom", 0x00000, 0x10000, CRC(ccbc72f8) SHA1(c5c13fb8d05d7fb4005636655073d88b4d12d65e))
864 	ROM_LOAD("ssv2f4.rom", 0x10000, 0x10000, CRC(53832d16) SHA1(2227eb784e0221f1bf2bdf7ea48ecd122433f1ea))
865 ROM_END
866 
867 /*------------------------------------------------------------------------
868 / The Simpsons - CPU Rev 3 /Alpha Type 3 16/32K Roms - 32/128K Sound Roms
869 /------------------------------------------------------------------------*/
870 ROM_START(simp_a27)
871 	ROM_REGION(0x10000, "maincpu", 0)
872 	ROM_LOAD("simpb5.2-7", 0x4000, 0x4000, CRC(701c4a4b) SHA1(2a19e2340d119e8813df27a9455aefb599c20a61))
873 	ROM_LOAD("simpc5.2-7", 0x8000, 0x8000, CRC(400a98b2) SHA1(8d11063712dd718ff8badc29586c700208e7442c))
874 	ROM_REGION(0x10000, "audiocpu", 0)
875 	ROM_LOAD("simpf7.rom", 0x8000, 0x8000, CRC(a36febbc) SHA1(3b96e05f797dd0dc0d4d52544ed995d477991a9f))
876 	ROM_REGION(0x1000000, "sound1", 0)
877 	ROM_LOAD("simpf6.rom", 0x00000, 0x20000, CRC(2eb32ed0) SHA1(e7bc3291cb88bf70010865f64496a3ca393257e7))
878 	ROM_LOAD("simpf5.rom", 0x20000, 0x20000, CRC(bd0671ae) SHA1(b116a23db956a3dd9fc138ec25af250885ba4ef5))
879 ROM_END
880 
881 ROM_START(simp_a20)
882 	ROM_REGION(0x10000, "maincpu", 0)
883 	ROM_LOAD("simpa2-0.b5", 0x4000, 0x4000, CRC(e67038d1) SHA1(f3eae2ed45caca97a1eb53d847366c52ea68bbee))
884 	ROM_LOAD("simpa2-0.c5", 0x8000, 0x8000, CRC(43662bc3) SHA1(d8171a5c083eb8bffa61353b74db6b3ebab96923))
885 	ROM_REGION(0x10000, "audiocpu", 0)
886 	ROM_LOAD("simpf7.rom", 0x8000, 0x8000, CRC(a36febbc) SHA1(3b96e05f797dd0dc0d4d52544ed995d477991a9f))
887 	ROM_REGION(0x1000000, "sound1", 0)
888 	ROM_LOAD("simpf6.rom", 0x00000, 0x20000, CRC(2eb32ed0) SHA1(e7bc3291cb88bf70010865f64496a3ca393257e7))
889 	ROM_LOAD("simpf5.rom", 0x20000, 0x20000, CRC(bd0671ae) SHA1(b116a23db956a3dd9fc138ec25af250885ba4ef5))
890 ROM_END
891 
892 /*--------------------------------------------------------------------------
893 / Time Machine - CPU Rev 2 /Alpha Type 2 16/32K Roms - 32/64K Sound Roms
894 /--------------------------------------------------------------------------*/
895 ROM_START(tmac_a24)
896 	ROM_REGION(0x10000, "maincpu", 0)
897 	ROM_LOAD("tmach2-4.b5", 0x4000, 0x4000, CRC(6ef3cf07) SHA1(3fabfbb2166273bf5bfab06d92fff094d3331d1a))
898 	ROM_LOAD("tmach2-4.c5", 0x8000, 0x8000, CRC(b61035f5) SHA1(08436b68f37323f50c1fec86aba303a1690af653))
899 	ROM_REGION(0x10000, "audiocpu", 0)
900 	ROM_LOAD("tmachf7.rom", 0x8000, 0x8000, CRC(0f518bd4) SHA1(05e24ca0e76d576c65d9d2a01417f1ad2aa984bb))
901 	ROM_REGION(0x40000, "sound1", 0)
902 	ROM_LOAD("tmachf6.rom", 0x00000, 0x10000, CRC(47e61641) SHA1(93cd946ebc9f69d82512429a9ae5f2754499b00a))
903 	ROM_LOAD("tmachf4.rom", 0x10000, 0x10000, CRC(51e3aade) SHA1(38fc0f3a9c727bfd07fbcb16c3ca6d0560dc65c3))
904 ROM_END
905 
906 ROM_START(tmac_a18)
907 	ROM_REGION(0x10000, "maincpu", 0)
908 	ROM_LOAD("tmach1-8.b5", 0x4000, 0x4000, CRC(5dabdc4c) SHA1(67fe261888ddaa088abe2f8a331eaa5ac34be92e))
909 	ROM_LOAD("tmach1-8.c5", 0x8000, 0x8000, CRC(5a348def) SHA1(bf2b9a69d516d38e6f87c5886e0ba768c2dc28ab))
910 	ROM_REGION(0x10000, "audiocpu", 0)
911 	ROM_LOAD("tmachf7.rom", 0x8000, 0x8000, CRC(0f518bd4) SHA1(05e24ca0e76d576c65d9d2a01417f1ad2aa984bb))
912 	ROM_REGION(0x40000, "sound1", 0)
913 	ROM_LOAD("tmachf6.rom", 0x00000, 0x10000, CRC(47e61641) SHA1(93cd946ebc9f69d82512429a9ae5f2754499b00a))
914 	ROM_LOAD("tmachf4.rom", 0x10000, 0x10000, CRC(51e3aade) SHA1(38fc0f3a9c727bfd07fbcb16c3ca6d0560dc65c3))
915 ROM_END
916 
917 ROM_START(tmac_g18)
918 	ROM_REGION(0x10000, "maincpu", 0)
919 	ROM_LOAD("tmachg18.b5", 0x4000, 0x4000, CRC(513d70ad) SHA1(dacdfc77956b1b5fb9bebca59fdb705aefa1b5b2))
920 	ROM_LOAD("tmachg18.c5", 0x8000, 0x8000, CRC(5a348def) SHA1(bf2b9a69d516d38e6f87c5886e0ba768c2dc28ab))
921 	ROM_REGION(0x10000, "audiocpu", 0)
922 	ROM_LOAD("tmachf7.rom", 0x8000, 0x8000, CRC(0f518bd4) SHA1(05e24ca0e76d576c65d9d2a01417f1ad2aa984bb))
923 	ROM_REGION(0x40000, "sound1", 0)
924 	ROM_LOAD("tmachf6.rom", 0x00000, 0x10000, CRC(47e61641) SHA1(93cd946ebc9f69d82512429a9ae5f2754499b00a))
925 	ROM_LOAD("tmachf4.rom", 0x10000, 0x10000, CRC(51e3aade) SHA1(38fc0f3a9c727bfd07fbcb16c3ca6d0560dc65c3))
926 ROM_END
927 
928 /*-----------------------------------------------------------------------
929 / Torpedo Alley - CPU Rev 2 /Alpha Type 2 - 32K Roms - 32/64K Sound Roms
930 /------------------------------------------------------------------------*/
931 ROM_START(torp_e21)
932 	ROM_REGION(0x10000, "maincpu", 0)
933 	ROM_LOAD("torpe2-1.b5", 0x0000, 0x8000, CRC(ac0b03e3) SHA1(0ac57b2fec29cdc90ab35cba49844f0cf545d959))
934 	ROM_LOAD("torpe2-1.c5", 0x8000, 0x8000, CRC(9ad33882) SHA1(c4504d8e136f667652f79b54d4e8d775169c6ac3))
935 	ROM_REGION(0x10000, "audiocpu", 0)
936 	ROM_LOAD("torpef7.rom", 0x8000, 0x8000, CRC(26f4c33e) SHA1(114f85e93e7b699c4cd6ce1298f95228d439deba))
937 	ROM_REGION(0x40000, "sound1", 0)
938 	ROM_LOAD("torpef6.rom", 0x00000, 0x10000, CRC(b214a7ea) SHA1(d972148395581844e3eaed08f755f3e2217dbbc0))
939 	ROM_LOAD("torpef4.rom", 0x10000, 0x10000, CRC(83a4e7f3) SHA1(96deac9251fe68cc0319ac009becd424c4e444c5))
940 ROM_END
941 
942 ROM_START(torp_a16)
943 	ROM_REGION(0x10000, "maincpu", 0)
944 	ROM_LOAD("b5.256", 0x0000, 0x8000, CRC(89711a7c) SHA1(b976b32b287d6cbaf4c448697f8aa12452db1f0b))
945 	ROM_LOAD("c5.256", 0x8000, 0x8000, CRC(3b3d754f) SHA1(c5d4a09f4daf92af78d778148377fa0d2a550761))
946 	ROM_REGION(0x10000, "audiocpu", 0)
947 	ROM_LOAD("torpef7.rom", 0x8000, 0x8000, CRC(26f4c33e) SHA1(114f85e93e7b699c4cd6ce1298f95228d439deba))
948 	ROM_REGION(0x40000, "sound1", 0)
949 	ROM_LOAD("torpef6.rom", 0x00000, 0x10000, CRC(b214a7ea) SHA1(d972148395581844e3eaed08f755f3e2217dbbc0))
950 	ROM_LOAD("torpef4.rom", 0x10000, 0x10000, CRC(83a4e7f3) SHA1(96deac9251fe68cc0319ac009becd424c4e444c5))
951 ROM_END
952 
953 
954 GAME( 1990, bttf_a28, 0,        de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Back to the Future - The Pinball (2.8)",          MACHINE_IS_SKELETON_MECHANICAL)
955 GAME( 1990, bttf_a27, bttf_a28, de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Back to the Future - The Pinball (2.7)",          MACHINE_IS_SKELETON_MECHANICAL)
956 GAME( 1990, bttf_a20, bttf_a28, de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Back to the Future - The Pinball (2.0)",          MACHINE_IS_SKELETON_MECHANICAL)
957 GAME( 1990, bttf_a21, bttf_a28, de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Back to the Future - The Pinball (2.1)",          MACHINE_IS_SKELETON_MECHANICAL)
958 GAME( 199?, bttf_g27, bttf_a28, de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Back to the Future - The Pinball (2.7, Germany)", MACHINE_IS_SKELETON_MECHANICAL)
959 GAME( 1990, kiko_a10, 0,        de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "King Kong (1.0)",                      MACHINE_IS_SKELETON_MECHANICAL)
960 GAME( 1987, lwar_a83, 0,        de_type1,        de_2, de_2_state, empty_init, ROT0, "Data East", "Laser War (8.3)",                      MACHINE_IS_SKELETON_MECHANICAL)
961 GAME( 1987, lwar_a81, lwar_a83, de_type1,        de_2, de_2_state, empty_init, ROT0, "Data East", "Laser War (8.1)",                      MACHINE_IS_SKELETON_MECHANICAL)
962 GAME( 1987, lwar_e90, lwar_a83, de_type1,        de_2, de_2_state, empty_init, ROT0, "Data East", "Laser War (9.0 Europe)",               MACHINE_IS_SKELETON_MECHANICAL)
963 GAME( 1989, mnfb_c29, 0,        de_type2_alpha3, de_2, de_2_state, empty_init, ROT0, "Data East", "Monday Night Football (2.9, 50cts)",   MACHINE_IS_SKELETON_MECHANICAL)
964 GAME( 1989, mnfb_c27, mnfb_c29, de_type2_alpha3, de_2, de_2_state, empty_init, ROT0, "Data East", "Monday Night Football (2.7, 50cts)",   MACHINE_IS_SKELETON_MECHANICAL)
965 GAME( 1990, poto_a32, 0,        de_type2_alpha3, de_2, de_2_state, empty_init, ROT0, "Data East", "The Phantom of the Opera (3.2)",       MACHINE_IS_SKELETON_MECHANICAL)
966 GAME( 1990, poto_a31, poto_a32, de_type2_alpha3, de_2, de_2_state, empty_init, ROT0, "Data East", "The Phantom of the Opera (3.1)",       MACHINE_IS_SKELETON_MECHANICAL)
967 GAME( 1990, poto_a29, poto_a32, de_type2_alpha3, de_2, de_2_state, empty_init, ROT0, "Data East", "The Phantom of the Opera (2.9)",       MACHINE_IS_SKELETON_MECHANICAL)
968 GAME( 1989, play_a24, 0,        de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Playboy 35th Anniversary (2.4)",       MACHINE_IS_SKELETON_MECHANICAL)
969 GAME( 1989, robo_a34, 0,        de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Robocop (3.4)",                        MACHINE_IS_SKELETON_MECHANICAL)
970 GAME( 1989, robo_a30, robo_a34, de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Robocop (3.0)",                        MACHINE_IS_SKELETON_MECHANICAL)
971 GAME( 1989, robo_a29, robo_a34, de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "Robocop (2.9)",                        MACHINE_IS_SKELETON_MECHANICAL)
972 GAME( 1988, ssvc_a26, 0,        de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Secret Service (2.6)",                 MACHINE_IS_SKELETON_MECHANICAL)
973 GAME( 1988, ssvc_b26, ssvc_a26, de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Secret Service (2.6 alternate sound)", MACHINE_IS_SKELETON_MECHANICAL)
974 GAME( 1988, ssvc_a42, ssvc_a26, de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Secret Service (4.2 alternate sound)", MACHINE_IS_SKELETON_MECHANICAL)
975 GAME( 1990, simp_a27, 0,        de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "The Simpsons (2.7)",                   MACHINE_IS_SKELETON_MECHANICAL)
976 GAME( 1990, simp_a20, simp_a27, de_type3,        de_2, de_2_state, empty_init, ROT0, "Data East", "The Simpsons (2.0)",                   MACHINE_IS_SKELETON_MECHANICAL)
977 GAME( 1988, tmac_a24, 0,        de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Time Machine (2.4)",                   MACHINE_IS_SKELETON_MECHANICAL)
978 GAME( 1988, tmac_a18, tmac_a24, de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Time Machine (1.8)",                   MACHINE_IS_SKELETON_MECHANICAL)
979 GAME( 1988, tmac_g18, tmac_a24, de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Time Machine (1.8, Germany)",          MACHINE_IS_SKELETON_MECHANICAL)
980 GAME( 1988, torp_e21, 0,        de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Torpedo Alley (2.1, Europe)",          MACHINE_IS_SKELETON_MECHANICAL)
981 GAME( 1988, torp_a16, torp_e21, de_type2,        de_2, de_2_state, empty_init, ROT0, "Data East", "Torpedo Alley (1.6)",                  MACHINE_IS_SKELETON_MECHANICAL)
982