1 // license:BSD-3-Clause
2 // copyright-holders:Ernesto Corvi, Jarek Parchanski, Nicola Salmoria, hap
3 /***************************************************************************
4 
5 Talbot                     - (c) 1982 Alpha Denshi Co.
6 Champion Base Ball         - (c) 1983 Alpha Denshi Co.
7 Champion Base Ball Part-2  - (c) 1983 Alpha Denshi Co.
8 Exciting Soccer            - (c) 1983 Alpha Denshi Co.
9 Exciting Soccer II         - (c) 1984 Alpha Denshi Co.
10 
11 Note: the Champion Baseball II unofficial schematics show a 8302 instead of
12 the 8201, however the MCU is used like a plain 8201, 830x extra instructions
13 are not used.
14 
15 champbbj and champbb2 has Alpha8201 mcu for protection.
16 champbja is a patched version of champbbj with different protection.
17 exctsccr has Alpha8302 MCU for protection.
18 
19 main CPU
20 
21 0000-5fff ROM
22 6000-63ff MCU shared RAM
23 7800-7fff ROM (Champion Baseball 2 only)
24 8000-83ff Video RAM
25 8400-87ff Color RAM
26 8800-8fff RAM
27 
28 read:
29 a000      IN0
30 a040      IN1
31 a080      DSW
32 a0a0      ?(same as DSW)
33 a0c0      COIN
34 
35 write:
36 7000      8910 write
37 7001      8910 control
38 8ff0-8fff sprites
39 a000      irq enable
40 a006      MCU HALT control
41 a007      NOP (MCU shared RAM switch)
42 a060-a06f sprites
43 a080      command for the sound CPU
44 a0c0      watchdog reset (watchdog time = 16xvblank)
45 
46 sub CPU (speech DAC)
47 
48 read:
49 0000-5fff   ROM
50 6000(-7fff) sound latch
51 e000-e3ff   RAM
52 
53 write:
54 
55 8000(-9fff) 4bit status for main CPU
56 a000(-bfff) clear sound latch
57 c000(-dfff) DAC
58 e000-e3ff   RAM
59 
60 
61 Notes:
62 ------
63 - Bit 2 of the watchdog counter can be read through an input port. The games check
64   it on boot and hang if it is not 0. Also, the Talbot MCU does a security check
65   and crashes if the bit doesn't match bit 2 of RAM location 0x8c00.
66 
67 - The Exciting Soccer bootleg runs on a modified Champion Baseball board. The
68   original board has vastly improved sound hardware which is therefore missing
69   from the bootleg.
70 
71 TODO:
72 -----
73 - Exciting Soccer: interrupt source for sound CPU is unknown.
74 
75 - Exciting Soccer: sound CPU writes to unknown ports on startup. Timer configure?
76 
77 - Exciting Soccer: Unknown writes to 8910 I/O ports (filters?)
78 
79 ***************************************************************************/
80 
81 #include "emu.h"
82 #include "includes/champbas.h"
83 #include "cpu/z80/z80.h"
84 #include "cpu/m6805/m68705.h"
85 #include "machine/gen_latch.h"
86 #include "machine/watchdog.h"
87 #include "sound/ay8910.h"
88 #include "sound/dac.h"
89 #include "screen.h"
90 #include "speaker.h"
91 
92 
93 
94 /*************************************
95  *
96  *  Memory handlers
97  *
98  *************************************/
99 
READ_LINE_MEMBER(champbas_state::watchdog_bit2)100 READ_LINE_MEMBER(champbas_state::watchdog_bit2)
101 {
102 	return (0x10 - m_watchdog->get_vblank_counter()) >> 2 & 1;
103 }
104 
WRITE_LINE_MEMBER(champbas_state::irq_enable_w)105 WRITE_LINE_MEMBER(champbas_state::irq_enable_w)
106 {
107 	m_irq_mask = state;
108 
109 	if (!m_irq_mask)
110 		m_maincpu->set_input_line(0, CLEAR_LINE);
111 }
112 
TIMER_DEVICE_CALLBACK_MEMBER(exctsccr_state::exctsccr_sound_irq)113 TIMER_DEVICE_CALLBACK_MEMBER(exctsccr_state::exctsccr_sound_irq)
114 {
115 	m_audiocpu->set_input_line_and_vector(0, HOLD_LINE, 0xff); // Z80
116 }
117 
118 
119 
120 /*************************************
121  *
122  *  Protection handling
123  *
124  *************************************/
125 
126 /* champbja another protection */
champbja_protection_r(offs_t offset)127 uint8_t champbas_state::champbja_protection_r(offs_t offset)
128 {
129 	uint8_t data = 0;
130 	/*
131 	(68BA) & 0x99 == 0x00
132 	(6867) & 0x99 == 0x99
133 	(68AB) & 0x80 == 0x80
134 	(6854) & 0x99 == 0x19
135 
136 	BA 1011_1010
137 	00 0--0_0--0
138 
139 	54 0101_0100
140 	19 0--1_1--1
141 
142 	67 0110_0111
143 	99 1--1_1--1
144 
145 	AB 1010_1011
146 	80 1--0_0--0
147 	*/
148 
149 	/* bit7 =  bit0 */
150 	if ((offset & 0x01))
151 		data |= 0x80;
152 
153 	/* bit4,3,0 =  bit6 */
154 	if ((offset & 0x40))
155 		data |= 0x19;
156 
157 	return data;
158 }
159 
160 
161 
162 /*************************************
163  *
164  *  Address maps
165  *
166  *************************************/
167 
168 // maincpu
169 
170 // base map
champbas_map(address_map & map)171 void champbas_state::champbas_map(address_map &map)
172 {
173 	map(0x0000, 0x5fff).rom();
174 	map(0x7000, 0x7001).mirror(0x0ffe).w("ay1", FUNC(ay8910_device::data_address_w));
175 	map(0x8000, 0x87ff).ram().w(FUNC(champbas_state::tilemap_w)).share("vram");
176 	map(0x8800, 0x8fff).ram().share("mainram");
177 
178 	map(0xa000, 0xa000).portr("P1");
179 	map(0xa040, 0xa040).portr("P2");
180 	map(0xa080, 0xa080).mirror(0x0020).portr("DSW");
181 	map(0xa0c0, 0xa0c0).portr("SYSTEM");
182 
183 	map(0xa000, 0xa007).w(m_mainlatch, FUNC(ls259_device::write_d0));
184 
185 	map(0xa060, 0xa06f).writeonly().share("spriteram");
186 	map(0xa080, 0xa080).w("soundlatch", FUNC(generic_latch_8_device::write));
187 	map(0xa0c0, 0xa0c0).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
188 }
189 
190 // base map + ALPHA-8x0x protection
champbasj_map(address_map & map)191 void champbas_state::champbasj_map(address_map &map)
192 {
193 	champbas_map(map);
194 	map(0x6000, 0x63ff).rw(m_alpha_8201, FUNC(alpha_8201_device::ext_ram_r), FUNC(alpha_8201_device::ext_ram_w));
195 }
196 
197 // different protection for champbasja
champbasja_map(address_map & map)198 void champbas_state::champbasja_map(address_map &map)
199 {
200 	champbas_map(map);
201 	map(0x6000, 0x63ff).ram();
202 	map(0x6800, 0x68ff).r(FUNC(champbas_state::champbja_protection_r));
203 }
204 
205 // champbasjb appears to have no protection
champbasjb_map(address_map & map)206 void champbas_state::champbasjb_map(address_map &map)
207 {
208 	champbas_map(map);
209 	map(0x6000, 0x63ff).ram();
210 }
211 
212 // champbb2
champbb2_map(address_map & map)213 void champbas_state::champbb2_map(address_map &map)
214 {
215 	champbasj_map(map);
216 	map(0x7800, 0x7fff).rom();
217 }
218 
219 // champbb2j appears to have AY select inverted
champbb2j_map(address_map & map)220 void champbas_state::champbb2j_map(address_map &map)
221 {
222 	champbb2_map(map);
223 	map(0x7000, 0x7001).mirror(0x0ffe).w("ay1", FUNC(ay8910_device::address_data_w));
224 }
225 
tbasebal_map(address_map & map)226 void champbas_state::tbasebal_map(address_map &map)
227 {
228 	champbas_map(map);
229 	map(0x7800, 0x7fff).rom();
230 }
231 
232 // more sprites in exctsccr
exctsccr_map(address_map & map)233 void exctsccr_state::exctsccr_map(address_map &map)
234 {
235 	champbasj_map(map);
236 	map(0x7000, 0x7001).unmaprw(); // aysnd is controlled by audiocpu
237 	map(0x7c00, 0x7fff).ram();
238 	map(0xa040, 0xa04f).writeonly().share("spriteram2");
239 }
240 
241 // exctsccrb
exctsccrb_map(address_map & map)242 void exctsccr_state::exctsccrb_map(address_map &map)
243 {
244 	champbasj_map(map);
245 	map(0xa040, 0xa04f).writeonly().share("spriteram2");
246 }
247 
248 
249 // audiocpu
250 
251 // champbas/champbb2 (note: talbot doesn't have audiocpu)
champbas_sound_map(address_map & map)252 void champbas_state::champbas_sound_map(address_map &map)
253 {
254 	map(0x0000, 0x5fff).rom();
255 	map(0x6000, 0x6000).mirror(0x1fff).r("soundlatch", FUNC(generic_latch_8_device::read));
256 	map(0x8000, 0x8000).mirror(0x1fff).nopw(); // 4-bit return code to main CPU (not used)
257 	map(0xa000, 0xa000).mirror(0x1fff).w("soundlatch", FUNC(generic_latch_8_device::clear_w));
258 	map(0xc000, 0xc000).mirror(0x1fff).w("dac", FUNC(dac_byte_interface::data_w));
259 	map(0xe000, 0xe3ff).mirror(0x1c00).ram();
260 }
261 
262 // exctsccr
exctsccr_sound_map(address_map & map)263 void exctsccr_state::exctsccr_sound_map(address_map &map)
264 {
265 	map(0x0000, 0x8fff).rom();
266 	map(0xa000, 0xa7ff).ram();
267 	map(0xc008, 0xc008).w("dac1", FUNC(dac_byte_interface::data_w));
268 	map(0xc009, 0xc009).w("dac2", FUNC(dac_byte_interface::data_w));
269 	map(0xc00c, 0xc00c).w("soundlatch", FUNC(generic_latch_8_device::clear_w));
270 	map(0xc00d, 0xc00d).r("soundlatch", FUNC(generic_latch_8_device::read));
271 //  map(0xc00f, 0xc00f).nopw(); // ?
272 }
273 
exctsccr_sound_io_map(address_map & map)274 void exctsccr_state::exctsccr_sound_io_map(address_map &map)
275 {
276 	map.global_mask(0x00ff);
277 	map(0x82, 0x83).w("ay1", FUNC(ay8910_device::data_address_w));
278 	map(0x86, 0x87).w("ay2", FUNC(ay8910_device::data_address_w));
279 	map(0x8a, 0x8b).w("ay3", FUNC(ay8910_device::data_address_w));
280 	map(0x8e, 0x8f).w("ay4", FUNC(ay8910_device::data_address_w));
281 }
282 
exctscc2_sound_io_map(address_map & map)283 void exctsccr_state::exctscc2_sound_io_map(address_map &map)
284 {
285 	map.global_mask(0x00ff);
286 	map(0x8a, 0x8b).w("ay1", FUNC(ay8910_device::data_address_w));
287 	map(0x8e, 0x8f).w("ay2", FUNC(ay8910_device::data_address_w));
288 }
289 
290 
291 
292 /*************************************
293  *
294  *  Input ports
295  *
296  *************************************/
297 
298 static INPUT_PORTS_START( talbot )
299 	PORT_START("P1")
300 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
301 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
302 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
303 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 )
304 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
305 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
306 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
307 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
308 
309 	PORT_START("P2")
310 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
311 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
312 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
313 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
314 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_COCKTAIL
315 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_COCKTAIL
316 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_COCKTAIL
317 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_COCKTAIL
318 
319 	PORT_START("DSW")
320 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
321 	PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C ) )
322 	PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
323 	PORT_DIPSETTING(    0x01, DEF_STR( 1C_3C ) )
324 	PORT_DIPSETTING(    0x00, DEF_STR( Free_Play ) )
325 	PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Lives ) )
326 	PORT_DIPSETTING(    0x00, "3" )
327 	PORT_DIPSETTING(    0x04, "4" )
328 	PORT_DIPSETTING(    0x08, "5" )
329 	PORT_DIPSETTING(    0x0c, "6" )
330 	PORT_DIPUNKNOWN( 0x10, 0x10 )
331 	PORT_DIPUNKNOWN( 0x20, 0x20 )
332 	PORT_DIPNAME( 0x40, 0x00, DEF_STR( Cabinet ) )
333 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
334 	PORT_DIPSETTING(    0x40, DEF_STR( Cocktail ) )
335 	PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_CUSTOM ) PORT_READ_LINE_MEMBER(champbas_state, watchdog_bit2) // bit 2 of the watchdog counter
336 
337 	PORT_START("SYSTEM")
338 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
339 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
340 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
341 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
342 	PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
343 	PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
344 	PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
345 	PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
346 INPUT_PORTS_END
347 
348 static INPUT_PORTS_START( champbas )
349 	PORT_INCLUDE( talbot )
350 
351 	PORT_MODIFY("P1")
352 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 ) // throw (red)
353 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNUSED )
354 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON3 ) // changes (blue)
355 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 ) // steal (yellow)
356 
357 	PORT_MODIFY("P2")
358 	PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL // steal (yellow)
359 	PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_COCKTAIL // changes (blue)
360 	PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED ) PORT_COCKTAIL
361 	PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL // throw (red)
362 
363 	PORT_MODIFY("DSW")
364 	PORT_DIPNAME( 0x03, 0x02, DEF_STR( Coinage ) )
365 	PORT_DIPSETTING(    0x03, "A 2/1 B 3/2" )
366 	PORT_DIPSETTING(    0x02, "A 1/1 B 2/1")
367 	PORT_DIPSETTING(    0x01, "A 1/2 B 1/6" )
368 	PORT_DIPSETTING(    0x00, "A 1/3 B 1/6")
369 	PORT_DIPNAME( 0x04, 0x04, DEF_STR( Flip_Screen ) )
370 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
371 	PORT_DIPSETTING(    0x00, DEF_STR( On ))
372 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) )
373 	PORT_DIPSETTING(    0x08, DEF_STR( Off ))
374 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
375 	PORT_DIPNAME( 0x10, 0x00, DEF_STR( Cabinet ) )
376 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ))
377 	PORT_DIPSETTING(    0x10, DEF_STR( Cocktail ) )
378 	PORT_DIPNAME( 0x20, 0x20, DEF_STR( Difficulty ) )
379 	PORT_DIPSETTING(    0x20, DEF_STR( Easy ) )
380 	PORT_DIPSETTING(    0x00, DEF_STR( Hard ))
381 	PORT_DIPUNKNOWN( 0x40, 0x00 )
382 INPUT_PORTS_END
383 
384 static INPUT_PORTS_START( exctsccr )
385 	PORT_INCLUDE( talbot )
386 
387 	PORT_MODIFY("DSW")
388 	PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
389 	PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) )
390 	PORT_DIPSETTING(    0x03, "A 1C/1C B 3C/1C" )
391 	PORT_DIPSETTING(    0x01, "A 1C/2C B 1C/4C" )
392 	PORT_DIPSETTING(    0x00, "A 1C/3C B 1C/6C" )
393 	PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) )
394 	PORT_DIPSETTING(    0x04, DEF_STR( Off ) )
395 	PORT_DIPSETTING(    0x00, DEF_STR( On ) )
396 	PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
397 	PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
398 	PORT_DIPSETTING(    0x08, DEF_STR( Cocktail ) )
399 	PORT_DIPNAME( 0x10, 0x10, DEF_STR( Difficulty ) )
400 	PORT_DIPSETTING(    0x10, DEF_STR( Easy ) )
401 	PORT_DIPSETTING(    0x00, DEF_STR( Hard ) )
402 	PORT_DIPNAME( 0x60, 0x00, DEF_STR( Game_Time ) )
403 	PORT_DIPSETTING(    0x20, "1 Min." )
404 	PORT_DIPSETTING(    0x00, "2 Min." )
405 	PORT_DIPSETTING(    0x60, "3 Min." )
406 	PORT_DIPSETTING(    0x40, "4 Min." )
407 INPUT_PORTS_END
408 
409 
410 
411 /*************************************
412  *
413  *  Graphics definitions
414  *
415  *************************************/
416 
417 static const gfx_layout charlayout =
418 {
419 	8,8,
420 	RGN_FRAC(1,1),
421 	2,
422 	{ 0, 4 },
423 	{ STEP4(8*8,1), STEP4(0,1) },
424 	{ STEP8(0,8) },
425 	16*8
426 };
427 
428 static const gfx_layout spritelayout =
429 {
430 	16,16,
431 	RGN_FRAC(1,1),
432 	2,
433 	{ 0, 4 },
434 	{ STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0,1) },
435 	{ STEP8(0,8), STEP8(32*8,8) },
436 	64*8
437 };
438 
439 static GFXDECODE_START( gfx_talbot )
440 	GFXDECODE_ENTRY( "gfx1", 0, charlayout,   0x100, 0x100>>2 )
441 	GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0x000, 0x100>>2 )
442 GFXDECODE_END
443 
444 static GFXDECODE_START( gfx_champbas )
445 	GFXDECODE_ENTRY( "gfx1", 0, charlayout,   0, 0x200>>2 )
446 	GFXDECODE_ENTRY( "gfx2", 0, spritelayout, 0, 0x200>>2 )
447 GFXDECODE_END
448 
449 
450 static const gfx_layout charlayout_3bpp =
451 {
452 	8,8,
453 	RGN_FRAC(1,2),
454 	3,
455 	{ RGN_FRAC(1,2)+4, 0, 4 },
456 	{ STEP4(8*8,1), STEP4(0,1) },
457 	{ STEP8(0,8) },
458 	16*8
459 };
460 
461 static const gfx_layout spritelayout_3bpp =
462 {
463 	16,16,
464 	RGN_FRAC(1,2),
465 	3,
466 	{ RGN_FRAC(1,2)+4, 0, 4 },
467 	{ STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0,1) },
468 	{ STEP8(0,8), STEP8(32*8,8) },
469 	64*8
470 };
471 
472 static const gfx_layout spritelayout_4bpp =
473 {
474 	16,16,
475 	RGN_FRAC(1,2),
476 	4,
477 	{ RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4, 0, 4 },
478 	{ STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0,1) },
479 	{ STEP8(0,8), STEP8(32*8,8) },
480 	64*8
481 };
482 
483 static GFXDECODE_START( gfx_exctsccr )
484 	GFXDECODE_ENTRY( "gfx1", 0, charlayout_3bpp,   0x000, 0x080>>3 ) /* chars */
485 	GFXDECODE_ENTRY( "gfx2", 0, spritelayout_3bpp, 0x080, 0x080>>3 ) /* sprites */
486 	GFXDECODE_ENTRY( "gfx3", 0, spritelayout_4bpp, 0x100, 0x100>>4 ) /* sprites */
487 GFXDECODE_END
488 
489 
490 
491 /*************************************
492  *
493  *  Machine drivers
494  *
495  *************************************/
496 
machine_start()497 void champbas_state::machine_start()
498 {
499 	// zerofill
500 	m_irq_mask = 0;
501 	m_palette_bank = 0;
502 	m_gfx_bank = 0;
503 
504 	// register for savestates
505 	save_item(NAME(m_irq_mask));
506 	save_item(NAME(m_palette_bank));
507 	save_item(NAME(m_gfx_bank));
508 }
509 
WRITE_LINE_MEMBER(champbas_state::vblank_irq)510 WRITE_LINE_MEMBER(champbas_state::vblank_irq)
511 {
512 	if (state && m_irq_mask)
513 		m_maincpu->set_input_line(0, ASSERT_LINE);
514 }
515 
516 
talbot(machine_config & config)517 void champbas_state::talbot(machine_config &config)
518 {
519 	/* basic machine hardware */
520 	Z80(config, m_maincpu, XTAL(18'432'000)/6);
521 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasj_map);
522 
523 	LS259(config, m_mainlatch);
524 	m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w));
525 	m_mainlatch->q_out_cb<1>().set_nop(); // !WORK board output (no use?)
526 	m_mainlatch->q_out_cb<2>().set_nop(); // no gfxbank
527 	m_mainlatch->q_out_cb<3>().set(FUNC(champbas_state::flipscreen_w));
528 	m_mainlatch->q_out_cb<4>().set_nop(); // no palettebank
529 	m_mainlatch->q_out_cb<5>().set_nop(); // n.c.
530 	m_mainlatch->q_out_cb<6>().set(m_alpha_8201, FUNC(alpha_8201_device::mcu_start_w));
531 	m_mainlatch->q_out_cb<7>().set(m_alpha_8201, FUNC(alpha_8201_device::bus_dir_w));
532 
533 	ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8);
534 	config.set_perfect_quantum("alpha_8201:mcu");
535 
536 	WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
537 
538 	/* video hardware */
539 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
540 	screen.set_refresh_hz(60);
541 	screen.set_size(32*8, 32*8);
542 	screen.set_visarea(0, 32*8-1, 2*8, 30*8-1);
543 	screen.set_screen_update(FUNC(champbas_state::screen_update_champbas));
544 	screen.set_palette(m_palette);
545 	screen.screen_vblank().set(FUNC(champbas_state::vblank_irq));
546 
547 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_talbot);
548 	PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32);
549 
550 	/* sound hardware */
551 	SPEAKER(config, "speaker").front_center();
552 
553 	GENERIC_LATCH_8(config, "soundlatch");
554 
555 	AY8910(config, "ay1", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.5);
556 }
557 
558 
champbas(machine_config & config)559 void champbas_state::champbas(machine_config &config)
560 {
561 	/* basic machine hardware */
562 	Z80(config, m_maincpu, XTAL(18'432'000)/6);
563 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbas_map);
564 
565 	LS259(config, m_mainlatch); // 9D; 8G on Champion Baseball II Double Board Configuration
566 	m_mainlatch->q_out_cb<0>().set(FUNC(champbas_state::irq_enable_w));
567 	m_mainlatch->q_out_cb<1>().set_nop(); // !WORK board output (no use?)
568 	m_mainlatch->q_out_cb<2>().set(FUNC(champbas_state::gfxbank_w));
569 	m_mainlatch->q_out_cb<3>().set(FUNC(champbas_state::flipscreen_w));
570 	m_mainlatch->q_out_cb<4>().set(FUNC(champbas_state::palette_bank_w));
571 	m_mainlatch->q_out_cb<5>().set_nop(); // n.c.
572 	m_mainlatch->q_out_cb<6>().set_nop(); // no MCU
573 	m_mainlatch->q_out_cb<7>().set_nop(); // no MCU
574 
575 	z80_device &audiocpu(Z80(config, "audiocpu", XTAL(18'432'000)/6));
576 	audiocpu.set_addrmap(AS_PROGRAM, &champbas_state::champbas_sound_map);
577 
578 	WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
579 
580 	/* video hardware */
581 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
582 	screen.set_refresh_hz(60);
583 	screen.set_size(32*8, 32*8);
584 	screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
585 	screen.set_screen_update(FUNC(champbas_state::screen_update_champbas));
586 	screen.set_palette(m_palette);
587 	screen.screen_vblank().set(FUNC(champbas_state::vblank_irq));
588 
589 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_champbas);
590 	PALETTE(config, m_palette, FUNC(champbas_state::champbas_palette), 512, 32);
591 
592 	/* sound hardware */
593 	SPEAKER(config, "speaker").front_center();
594 
595 	GENERIC_LATCH_8(config, "soundlatch");
596 
597 	AY8910(config, "ay1", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.3);
598 
599 	DAC_6BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.7); // unknown DAC
600 }
601 
champbasj(machine_config & config)602 void champbas_state::champbasj(machine_config &config)
603 {
604 	champbas(config);
605 
606 	/* basic machine hardware */
607 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasj_map);
608 
609 	m_mainlatch->q_out_cb<6>().set(m_alpha_8201, FUNC(alpha_8201_device::mcu_start_w));
610 	m_mainlatch->q_out_cb<7>().set(m_alpha_8201, FUNC(alpha_8201_device::bus_dir_w));
611 
612 	ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // note: 8302 rom on champbb2 (same device!)
613 	config.set_perfect_quantum("alpha_8201:mcu");
614 }
615 
616 
champbasja(machine_config & config)617 void champbas_state::champbasja(machine_config &config)
618 {
619 	champbas(config);
620 
621 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasja_map);
622 }
623 
champbasjb(machine_config & config)624 void champbas_state::champbasjb(machine_config &config)
625 {
626 	champbas(config);
627 
628 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbasjb_map);
629 }
630 
champbb2(machine_config & config)631 void champbas_state::champbb2(machine_config &config)
632 {
633 	champbasj(config);
634 
635 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbb2_map);
636 }
637 
champbb2j(machine_config & config)638 void champbas_state::champbb2j(machine_config &config)
639 {
640 	champbb2(config);
641 
642 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::champbb2j_map);
643 }
644 
645 
tbasebal(machine_config & config)646 void champbas_state::tbasebal(machine_config &config)
647 {
648 	champbas(config);
649 
650 	/* basic machine hardware */
651 	m_maincpu->set_addrmap(AS_PROGRAM, &champbas_state::tbasebal_map);
652 
653 	M68705P3(config, "mcu", XTAL(18'432'000)/6); // ?Mhz
654 }
655 
656 
657 
exctsccr(machine_config & config)658 void exctsccr_state::exctsccr(machine_config &config)
659 {
660 	/* basic machine hardware */
661 	Z80(config, m_maincpu, XTAL(18'432'000)/6);
662 	m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccr_map);
663 
664 	LS259(config, m_mainlatch);
665 	m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w));
666 	m_mainlatch->q_out_cb<1>().set_nop(); // !WORK board output (no use?)
667 	m_mainlatch->q_out_cb<2>().set(FUNC(exctsccr_state::gfxbank_w));
668 	m_mainlatch->q_out_cb<3>().set(FUNC(exctsccr_state::flipscreen_w));
669 	m_mainlatch->q_out_cb<4>().set_nop(); // no palettebank
670 	m_mainlatch->q_out_cb<5>().set_nop(); // n.c.
671 	m_mainlatch->q_out_cb<6>().set(m_alpha_8201, FUNC(alpha_8201_device::mcu_start_w));
672 	m_mainlatch->q_out_cb<7>().set(m_alpha_8201, FUNC(alpha_8201_device::bus_dir_w));
673 
674 	Z80(config, m_audiocpu, XTAL(14'318'181)/4);
675 	m_audiocpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccr_sound_map);
676 	m_audiocpu->set_addrmap(AS_IO, &exctsccr_state::exctsccr_sound_io_map);
677 	m_audiocpu->set_periodic_int(FUNC(exctsccr_state::nmi_line_pulse), attotime::from_hz(4000)); // 4 kHz, updates the dac
678 
679 	timer_device &exc_snd_irq(TIMER(config, "exc_snd_irq"));
680 	exc_snd_irq.configure_periodic(FUNC(exctsccr_state::exctsccr_sound_irq), attotime::from_hz(75)); // irq source unknown, determines music tempo
681 	exc_snd_irq.set_start_delay(attotime::from_hz(75));
682 
683 	ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // note: 8302 rom, or 8303 on exctscc2 (same device!)
684 	config.set_perfect_quantum("alpha_8201:mcu");
685 
686 	WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
687 
688 	/* video hardware */
689 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
690 	screen.set_refresh_hz(60.54);
691 	screen.set_size(32*8, 32*8);
692 	screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
693 	screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr));
694 	screen.set_palette(m_palette);
695 	screen.screen_vblank().set(FUNC(exctsccr_state::vblank_irq));
696 
697 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr);
698 	PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32);
699 
700 	/* sound hardware */
701 	SPEAKER(config, "speaker").front_center();
702 
703 	GENERIC_LATCH_8(config, "soundlatch");
704 
705 	/* AY (melody) clock is specified by a VR (0.9 - 3.9 MHz) */
706 	AY8910(config, "ay1", 1940000).add_route(ALL_OUTPUTS, "speaker", 0.08); /* VR has a factory mark and this is the value read */
707 
708 	AY8910(config, "ay2", XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "speaker", 0.08);
709 
710 	AY8910(config, "ay3", XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "speaker", 0.08);
711 
712 	AY8910(config, "ay4", XTAL(14'318'181)/8).add_route(ALL_OUTPUTS, "speaker", 0.08);
713 
714 	DAC_6BIT_R2R(config, "dac1", 0).add_route(ALL_OUTPUTS, "speaker", 0.3); // unknown DAC
715 	DAC_6BIT_R2R(config, "dac2", 0).add_route(ALL_OUTPUTS, "speaker", 0.3); // unknown DAC
716 }
717 
exctscc2(machine_config & config)718 void exctsccr_state::exctscc2(machine_config &config)
719 {
720 	exctsccr(config);
721 
722 	m_audiocpu->set_addrmap(AS_IO, &exctsccr_state::exctscc2_sound_io_map);
723 
724 	subdevice<ay8910_device>("ay1")->set_clock(XTAL(14'318'181)/8); // measured on PCB
725 
726 	// Exciting Soccer II only has two AYs
727 	config.device_remove("ay3");
728 	config.device_remove("ay4");
729 }
730 
731 /* Bootleg running on a modified Champion Baseball board */
exctsccrb(machine_config & config)732 void exctsccr_state::exctsccrb(machine_config &config)
733 {
734 	/* basic machine hardware */
735 	Z80(config, m_maincpu, XTAL(18'432'000)/6);
736 	m_maincpu->set_addrmap(AS_PROGRAM, &exctsccr_state::exctsccrb_map);
737 
738 	LS259(config, m_mainlatch);
739 	m_mainlatch->q_out_cb<0>().set(FUNC(exctsccr_state::irq_enable_w));
740 	m_mainlatch->q_out_cb<1>().set_nop(); // !WORK board output (no use?)
741 	m_mainlatch->q_out_cb<2>().set(FUNC(exctsccr_state::gfxbank_w));
742 	m_mainlatch->q_out_cb<3>().set(FUNC(exctsccr_state::flipscreen_w));
743 	m_mainlatch->q_out_cb<4>().set_nop(); // no palettebank
744 	m_mainlatch->q_out_cb<5>().set_nop(); // n.c.
745 	m_mainlatch->q_out_cb<6>().set(m_alpha_8201, FUNC(alpha_8201_device::mcu_start_w));
746 	m_mainlatch->q_out_cb<7>().set(m_alpha_8201, FUNC(alpha_8201_device::bus_dir_w));
747 
748 	Z80(config, m_audiocpu, XTAL(18'432'000)/6);
749 	m_audiocpu->set_addrmap(AS_PROGRAM, &exctsccr_state::champbas_sound_map);
750 
751 	ALPHA_8201(config, m_alpha_8201, XTAL(18'432'000)/6/8); // champbasj 8201 on pcb, though unused
752 	config.set_perfect_quantum("alpha_8201:mcu");
753 
754 	WATCHDOG_TIMER(config, m_watchdog).set_vblank_count("screen", 0x10);
755 
756 	/* video hardware */
757 	screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
758 	screen.set_refresh_hz(60);
759 	screen.set_size(32*8, 32*8);
760 	screen.set_visarea(0*8, 32*8-1, 2*8, 30*8-1);
761 	screen.set_screen_update(FUNC(exctsccr_state::screen_update_exctsccr));
762 	screen.set_palette(m_palette);
763 	screen.screen_vblank().set(FUNC(exctsccr_state::vblank_irq));
764 
765 	GFXDECODE(config, m_gfxdecode, m_palette, gfx_exctsccr);
766 	PALETTE(config, m_palette, FUNC(exctsccr_state::exctsccr_palette), 512, 32);
767 
768 	/* sound hardware */
769 	SPEAKER(config, "speaker").front_center();
770 
771 	GENERIC_LATCH_8(config, "soundlatch");
772 
773 	AY8910(config, "ay1", XTAL(18'432'000)/12).add_route(ALL_OUTPUTS, "speaker", 0.3);
774 
775 	DAC_6BIT_R2R(config, "dac", 0).add_route(ALL_OUTPUTS, "speaker", 0.7); // unknown DAC
776 }
777 
778 
779 
780 /*************************************
781  *
782  *  ROM definition(s)
783  *
784  *************************************/
785 
786 ROM_START( talbot )
787 	ROM_REGION( 0x10000, "maincpu", 0 )
788 	ROM_LOAD( "11.10g", 0x0000, 0x1000, CRC(0368607d) SHA1(275a29fb018bd327e64cf4fcc04590099c90290a) )
789 	ROM_LOAD( "12.11g", 0x1000, 0x1000, CRC(400e633b) SHA1(8d76df34174286e2b0c9341bbc141c9e77533f06) )
CRC(be575d9e)790 	ROM_LOAD( "13.10h", 0x2000, 0x1000, CRC(be575d9e) SHA1(17d3bbdc755920b5a6e1e81cbb7d51be20257ff1) )
791 	ROM_LOAD( "14.11h", 0x3000, 0x1000, CRC(56464614) SHA1(21cfcf3212e0a74c695ce1d6412d630a7141b2c9) )
792 	ROM_LOAD( "15.10i", 0x4000, 0x1000, CRC(0225b7ef) SHA1(9adee4831eb633b0a31580596205a655df94c2b2) )
793 	ROM_LOAD( "16.11i", 0x5000, 0x1000, CRC(1612adf5) SHA1(9adeb21d5d1692f6e31460062f03f2008076b307) )
794 
795 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
796 	ROM_LOAD( "alpha-8201_44801a75_2f25.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
797 
798 	ROM_REGION( 0x1000, "gfx1", 0 ) // chars
799 	ROM_LOAD( "7.6a", 0x0000, 0x1000, CRC(bde14194) SHA1(f8f569342a3094eb5450a30b8ab87901b98e6061) )
800 
801 	ROM_REGION( 0x1000, "gfx2", 0 ) // sprites
802 	ROM_LOAD( "8.6b", 0x0000, 0x1000, CRC(ddcd227a) SHA1(c44de36311cd173afb3eebf8487305b06e069c0f) )
803 
804 	ROM_REGION( 0x0120, "proms", 0 )
805 	ROM_LOAD( "mb7051.7h", 0x0000, 0x0020, CRC(7a153c60) SHA1(4b147c63e467cca7359acb5f3652ed9db9a36cc8) )
806 	ROM_LOAD( "mb7052.5e", 0x0020, 0x0100, CRC(a3189986) SHA1(f113c1253ba2f8f213c600e93a39c0957a933306) )
807 ROM_END
808 
809 ROM_START( champbas )
810 	ROM_REGION( 0x10000, "maincpu", 0 )
811 	ROM_LOAD( "champbb.1", 0x0000, 0x2000, CRC(218de21e) SHA1(7577fd04bdda4666c017f3b36e81ec23bcddd845) )
812 	ROM_LOAD( "champbb.2", 0x2000, 0x2000, CRC(5ddd872e) SHA1(68e21572e27707c991180b1bd0a6b31f7b64abf6) )
813 	ROM_LOAD( "champbb.3", 0x4000, 0x2000, CRC(f39a7046) SHA1(3097bffe84ac74ce9e6481028a0ebbe8b1d6eaf9) )
814 
815 	ROM_REGION( 0x10000, "audiocpu", 0 )
816 	ROM_LOAD( "champbb.6", 0x0000, 0x2000, CRC(26ab3e16) SHA1(019b9d34233a6b7a53e204154b782ceb42915d2b) )
817 	ROM_LOAD( "champbb.7", 0x2000, 0x2000, CRC(7c01715f) SHA1(b15b2001b8c110f2599eee3aeed79f67686ebd7e) )
818 	ROM_LOAD( "champbb.8", 0x4000, 0x2000, CRC(3c911786) SHA1(eea0c467e213d237b5bb9d04b19a418d6090c2dc) )
819 
820 	ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
821 	ROM_LOAD( "champbb.4", 0x0000, 0x2000, CRC(1930fb52) SHA1(cae0b2701c2b53b79e9df3a7496442ba3472e996) )
822 
823 	ROM_REGION( 0x2000, "gfx2", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only sprites
824 	ROM_LOAD( "champbb.5", 0x0000, 0x2000, CRC(a4cef5a1) SHA1(fa00ed0d075e00992a1ddce3c1327ed74770a735) )
825 
826 	ROM_REGION( 0x0120, "proms", 0 )
827 	ROM_LOAD( "champbb.pr2", 0x0000, 0x020, CRC(2585ffb0) SHA1(ce7f62f37955c2bbb4f82b139cc716978b084767) ) /* palette */
828 	ROM_LOAD( "champbb.pr1", 0x0020, 0x100, CRC(872dd450) SHA1(6c1e2c4a2fc072f4bf4996c731adb0b01b347506) ) /* look-up table */
829 ROM_END
830 
831 ROM_START( champbasj )
832 	ROM_REGION( 0x10000, "maincpu", 0 )
833 	ROM_LOAD( "11.2e", 0x0000, 0x2000, CRC(e2dfc166) SHA1(482e084d7d21b1cf2d17431699e6bab4c4b6ac15) )
834 	ROM_LOAD( "12.2g", 0x2000, 0x2000, CRC(7b4e5faa) SHA1(b7201816a819ef313ddc81f312d26982b83ef1c7) )
835 	ROM_LOAD( "13.2h", 0x4000, 0x2000, CRC(b201e31f) SHA1(bba3b611ff60ad8d5dd8484df4cfc2026f4fd344) )
836 
837 	ROM_REGION( 0x10000, "audiocpu", 0 )
838 	ROM_LOAD( "16.2k", 0x0000, 0x2000, CRC(24c482ee) SHA1(c25bdf77014e095fc11a9a6b17f16858f19db451) )
839 	ROM_LOAD( "17.2l", 0x2000, 0x2000, CRC(f10b148b) SHA1(d66516d509f6f16e51ee59d27c4867e276064c3f) )
840 	ROM_LOAD( "18.2n", 0x4000, 0x2000, CRC(2dc484dd) SHA1(28bd68c787d7e6989849ca52009948dbd5cdcc79) )
841 
842 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
843 	ROM_LOAD( "alpha-8201_44801a75_2f25.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
844 
845 	ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
846 	ROM_LOAD( "14.5e", 0x0000, 0x2000, CRC(1b8202b3) SHA1(889b77fc3d0cb029baf8c47be260f513f3ed59bd) )
847 
848 	ROM_REGION( 0x2000, "gfx2", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only sprites
849 	ROM_LOAD( "15.5g", 0x0000, 0x2000, CRC(a67c0c40) SHA1(3845839eff8c1624d26937f28ffde67a5fcb4805) )
850 
851 	ROM_REGION( 0x0120, "proms", 0 )
852 	ROM_LOAD( "1e.bpr", 0x0000, 0x0020, CRC(f5ce825e) SHA1(956f580840f1a7d24bfbd72b2929d14e9ee1b660) ) /* palette */
853 	ROM_LOAD( "5k.bpr", 0x0020, 0x0100, CRC(2e481ffa) SHA1(bc8979efd43bee8be0ce96ebdacc873a5821e06e) ) /* look-up table */
854 ROM_END
855 
856 ROM_START( champbasja )
857 	ROM_REGION( 0x10000, "maincpu", 0 )
858 	ROM_LOAD( "10", 0x0000, 0x2000, CRC(f7cdaf8e) SHA1(d4c840f2107394fadbcf822d64aaa381ac900367) )
859 	ROM_LOAD( "09", 0x2000, 0x2000, CRC(9d39e5b3) SHA1(11c1a1d2296c0bf16d7610eaa79b034bfd813740) )
860 	ROM_LOAD( "08", 0x4000, 0x2000, CRC(53468a0f) SHA1(d4b5ea48b27754eebe593c8b4fcf5bf117f27ae4) )
861 
862 	ROM_REGION( 0x10000, "audiocpu", 0 )
863 	ROM_LOAD( "16.2k", 0x0000, 0x2000, CRC(24c482ee) SHA1(c25bdf77014e095fc11a9a6b17f16858f19db451) )
864 	ROM_LOAD( "17.2l", 0x2000, 0x2000, CRC(f10b148b) SHA1(d66516d509f6f16e51ee59d27c4867e276064c3f) )
865 	ROM_LOAD( "18.2n", 0x4000, 0x2000, CRC(2dc484dd) SHA1(28bd68c787d7e6989849ca52009948dbd5cdcc79) )
866 
867 	ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
868 	ROM_LOAD( "14.5e", 0x0000, 0x2000, CRC(1b8202b3) SHA1(889b77fc3d0cb029baf8c47be260f513f3ed59bd) )
869 
870 	ROM_REGION( 0x2000, "gfx2", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only sprites
871 	ROM_LOAD( "15.5g", 0x0000, 0x2000, CRC(a67c0c40) SHA1(3845839eff8c1624d26937f28ffde67a5fcb4805) )
872 
873 	ROM_REGION( 0x0120, "proms", 0 )
874 	ROM_LOAD( "clr",    0x0000, 0x0020, CRC(8f989357) SHA1(d0916fb5ef4b43bdf84663cd403418ffc5e98c17) ) /* palette */
875 	ROM_LOAD( "5k.bpr", 0x0020, 0x0100, CRC(2e481ffa) SHA1(bc8979efd43bee8be0ce96ebdacc873a5821e06e) ) /* look-up table */
876 ROM_END
877 
878 ROM_START( champbasjb )
879 	ROM_REGION( 0x10000, "maincpu", 0 )
880 	ROM_LOAD( "1.2e",  0x0000, 0x2000, CRC(4dcf2e03) SHA1(2cdae2cc560d316bb651f8a92e4d6af6eaac8785) )
881 	ROM_LOAD( "2.2g",  0x2000, 0x2000, CRC(ccbd0eff) SHA1(5437e571b417fb162b36376fd26cab753ca178ff) )
882 	ROM_LOAD( "3.2h",  0x4000, 0x2000, CRC(4c7f1de4) SHA1(c5b4ad5f3e3f606e372fb5316ee875f8a299129c) )
883 
884 	ROM_REGION( 0x10000, "audiocpu", 0 )
885 	ROM_LOAD( "6.2k",  0x0000, 0x2000, CRC(24c482ee) SHA1(c25bdf77014e095fc11a9a6b17f16858f19db451) )
886 	ROM_LOAD( "7.2l",  0x2000, 0x2000, CRC(f10b148b) SHA1(d66516d509f6f16e51ee59d27c4867e276064c3f) )
887 	ROM_LOAD( "8.2n",  0x4000, 0x2000, CRC(2dc484dd) SHA1(28bd68c787d7e6989849ca52009948dbd5cdcc79) )
888 
889 	ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
890 	ROM_LOAD( "4.5e",  0x0000, 0x2000, CRC(1930fb52) SHA1(cae0b2701c2b53b79e9df3a7496442ba3472e996) )
891 
892 	ROM_REGION( 0x2000, "gfx2", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only sprites
893 	ROM_LOAD( "5.5g",  0x0000, 0x2000, CRC(a67c0c40) SHA1(3845839eff8c1624d26937f28ffde67a5fcb4805) )
894 
895 	ROM_REGION( 0x0120, "proms", 0 ) // palette + table missing in set, taken from champbasj
896 	ROM_LOAD( "1e.bpr", 0x0000, 0x0020, BAD_DUMP CRC(f5ce825e) SHA1(956f580840f1a7d24bfbd72b2929d14e9ee1b660) ) /* palette */
897 	ROM_LOAD( "5k.bpr", 0x0020, 0x0100, BAD_DUMP CRC(2e481ffa) SHA1(bc8979efd43bee8be0ce96ebdacc873a5821e06e) ) /* look-up table */
898 ROM_END
899 
900 ROM_START( champbb2 )
901 	ROM_REGION( 0x10000, "maincpu", 0 )
902 	ROM_LOAD( "epr5932", 0x0000, 0x2000, CRC(528e3c78) SHA1(ee300201580c1bace783f1340bd4f1ea2a00dffa) )
903 	ROM_LOAD( "epr5929", 0x2000, 0x2000, CRC(17b6057e) SHA1(67c5aed950acf4d045edf39019066af2896265e1) )
904 	ROM_LOAD( "epr5930", 0x4000, 0x2000, CRC(b6570a90) SHA1(5a2651aeac986000913b5854792b2d81df6b2fc6) )
905 	ROM_LOAD( "epr5931", 0x7800, 0x0800, CRC(0592434d) SHA1(a7f61546c39ffdbff46c4db485c9b3f6eefcf1ac) )
906 
907 	ROM_REGION( 0x10000, "audiocpu", 0 )
908 	ROM_LOAD( "epr5933", 0x0000, 0x2000, CRC(26ab3e16) SHA1(019b9d34233a6b7a53e204154b782ceb42915d2b) )
909 	ROM_LOAD( "epr5934", 0x2000, 0x2000, CRC(7c01715f) SHA1(b15b2001b8c110f2599eee3aeed79f67686ebd7e) )
910 	ROM_LOAD( "epr5935", 0x4000, 0x2000, CRC(3c911786) SHA1(eea0c467e213d237b5bb9d04b19a418d6090c2dc) )
911 
912 	// the pcb has a 8302 on it, though only the 8201 instructions are used
913 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
914 	ROM_LOAD( "alpha-8302_44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
915 
916 	ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
917 	ROM_LOAD( "epr5936", 0x0000, 0x2000, CRC(c4a4df75) SHA1(7b85dbf405697b0b8881f910c08f6db6c828b19a) )
918 
919 	ROM_REGION( 0x2000, "gfx2", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only sprites
920 	ROM_LOAD( "epr5937", 0x0000, 0x2000, CRC(5c80ec42) SHA1(9b79737577e48a6b2ec20ce145252545955e82c3) )
921 
922 	ROM_REGION( 0x0120, "proms", 0 )
923 	ROM_LOAD( "pr5957", 0x0000, 0x020, CRC(f5ce825e) SHA1(956f580840f1a7d24bfbd72b2929d14e9ee1b660) ) /* palette */
924 	ROM_LOAD( "pr5956", 0x0020, 0x100, CRC(872dd450) SHA1(6c1e2c4a2fc072f4bf4996c731adb0b01b347506) ) /* look-up table */
925 ROM_END
926 
927 ROM_START( tbasebal )
928 	ROM_REGION( 0x10000, "maincpu", 0 )
929 	ROM_LOAD( "1.2e.2764",     0x0000, 0x2000, CRC(9b75b44d) SHA1(35b67638a5e48cbe999907e3c9c3a33da9d76bba) )
930 	ROM_LOAD( "2_p9.2g.2764",  0x2000, 0x2000, CRC(736a1b62) SHA1(24c2d57506754ca789b378a595c03b7591eb5b5c) )
931 	ROM_LOAD( "3.2h.2764",     0x4000, 0x2000, CRC(cf5f28cb) SHA1(d553f2085c9c8c77b241b4239cc1ad1764b490d0) )
932 	ROM_LOAD( "ic2.2764",      0x6000, 0x2000, CRC(aacb9647) SHA1(4f3830ffc18f8578064babbc638efb5a59ef1a3d) ) // on sub-board with MCU
933 
934 	ROM_REGION( 0x10000, "audiocpu", 0 )
935 	ROM_LOAD( "6.2k.2764", 0x0000, 0x2000, CRC(24c482ee) SHA1(c25bdf77014e095fc11a9a6b17f16858f19db451) )
936 	ROM_LOAD( "7.2l.2764", 0x2000, 0x2000, CRC(f10b148b) SHA1(d66516d509f6f16e51ee59d27c4867e276064c3f) )
937 	ROM_LOAD( "8.2n.2764", 0x4000, 0x2000, CRC(2dc484dd) SHA1(28bd68c787d7e6989849ca52009948dbd5cdcc79) )
938 
939 	ROM_REGION( 0x0800, "mcu", 0 ) /* MC68705P5 */
940 	ROM_LOAD( "ic3_mc68705p3_rom.bin",    0x0000, 0x0800, CRC(6b477f5f) SHA1(c773a4bed22106346fb2347b6d5a32958be8213c) )
941 
942 	ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
943 	ROM_LOAD( "4.5e.2764", 0x0000, 0x2000, CRC(c4a4df75) SHA1(7b85dbf405697b0b8881f910c08f6db6c828b19a) )
944 
945 	ROM_REGION( 0x2000, "gfx2", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only sprites
946 	ROM_LOAD( "5.5g.2764", 0x0000, 0x2000, CRC(5c80ec42) SHA1(9b79737577e48a6b2ec20ce145252545955e82c3) )
947 
948 	ROM_REGION( 0x0120, "proms", 0 )
949 	ROM_LOAD( "1e.bpr",    0x0000, 0x0020, CRC(f5ce825e) SHA1(956f580840f1a7d24bfbd72b2929d14e9ee1b660) ) /* palette - wasn't dumped from this set, could be wrong */
950 	ROM_LOAD( "5k.82s129", 0x0020, 0x0100, CRC(2e481ffa) SHA1(bc8979efd43bee8be0ce96ebdacc873a5821e06e) ) /* look-up table */
951 ROM_END
952 
953 ROM_START( champbb2j )
954 	ROM_REGION( 0x10000, "maincpu", 0 )
955 	ROM_LOAD( "1.10g", 0x0000, 0x2000, CRC(c76056d5) SHA1(2aaec9ede0f85bf67f6cf04fabdba66f7e0d6004) )
956 	ROM_LOAD( "2.10h", 0x2000, 0x2000, CRC(7a1ea3ea) SHA1(ce2f61be4cc7cd7b739d89a4838408912c2e2784) )
957 	ROM_LOAD( "3.10i", 0x4000, 0x2000, CRC(4b2f6ac4) SHA1(367b25665fc37140dc38be8bb525859c20bd2529) )
958 	ROM_LOAD( "0.11g", 0x7800, 0x0800, CRC(be0e180d) SHA1(7a8915e00920faa08344d752404a6f98d8fb303b) )
959 
960 	/* not in this set, but probably the same */
961 	ROM_REGION( 0x10000, "audiocpu", 0 )
962 	ROM_LOAD( "6.15c", 0x0000, 0x2000, CRC(24c482ee) SHA1(c25bdf77014e095fc11a9a6b17f16858f19db451) )
963 	ROM_LOAD( "7.15d", 0x2000, 0x2000, CRC(f10b148b) SHA1(d66516d509f6f16e51ee59d27c4867e276064c3f) )
964 	ROM_LOAD( "8.15e", 0x4000, 0x2000, CRC(2dc484dd) SHA1(28bd68c787d7e6989849ca52009948dbd5cdcc79) )
965 
966 	// the pcb has a 8302 on it, though only the 8201 instructions are used
967 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
968 	ROM_LOAD( "alpha-8302_44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
969 
970 	ROM_REGION( 0x2000, "gfx1", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only chars
971 	ROM_LOAD( "4.6a", 0x0000, 0x2000, CRC(c4a4df75) SHA1(7b85dbf405697b0b8881f910c08f6db6c828b19a) )
972 
973 	ROM_REGION( 0x2000, "gfx2", 0 ) // chars + sprites: rearranged by DRIVER_INIT to leave only sprites
974 	ROM_LOAD( "5.6b", 0x0000, 0x2000, CRC(5c80ec42) SHA1(9b79737577e48a6b2ec20ce145252545955e82c3) )
975 
976 	ROM_REGION( 0x0120, "proms", 0 )
977 	ROM_LOAD( "bpr.7h", 0x0000, 0x020, CRC(500db3d9) SHA1(7317ba2c6ffef3561acb3b2adb811def846756cf) ) /* palette */
978 	ROM_LOAD( "bpr.5e", 0x0020, 0x100, CRC(2e481ffa) SHA1(bc8979efd43bee8be0ce96ebdacc873a5821e06e) ) /* look-up table */
979 ROM_END
980 
981 ROM_START( exctsccr ) /* Teams: ITA AUS GBR FRA FRG BRA */
982 	ROM_REGION( 0x10000, "maincpu", 0 )
983 	ROM_LOAD( "1_g10.bin",    0x0000, 0x2000, CRC(aa68df66) SHA1(f10cac5a4c5aad1e1eb8835174dc8d517bb2921a) )
984 	ROM_LOAD( "2_h10.bin",    0x2000, 0x2000, CRC(2d8f8326) SHA1(8809e7b081fa2a1966cb51ac969fd7b468d35be0) )
985 	ROM_LOAD( "3_j10.bin",    0x4000, 0x2000, CRC(dce4a04d) SHA1(9c015e4597ec8921bea213d9841fc69c776a4e6d) )
986 
987 	ROM_REGION( 0x10000, "audiocpu", 0 )
988 	ROM_LOAD( "0_h6.bin",     0x0000, 0x2000, CRC(3babbd6b) SHA1(b81bd47c4449f4f21f2d55d01eb9cb6db10664c7) )
989 	ROM_LOAD( "9_f6.bin",     0x2000, 0x2000, CRC(639998f5) SHA1(c4ff5e5e75d53dea38449f323186d08d5b57bf90) )
990 	ROM_LOAD( "8_d6.bin",     0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
991 	ROM_LOAD( "7_c6.bin",     0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
992 	ROM_LOAD( "1_a6.bin",     0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
993 
994 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
995 	ROM_LOAD( "alpha-8302_44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
996 
997 	ROM_REGION( 0x04000, "gfx1", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
998 	ROM_LOAD( "4_a5.bin",     0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
999 	ROM_LOAD( "6_c5.bin",     0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
1000 
1001 	ROM_REGION( 0x04000, "gfx2", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
1002 	ROM_LOAD( "5_b5.bin",     0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
1003 
1004 	ROM_REGION( 0x02000, "gfx3", 0 )    // 4bpp sprites
1005 	ROM_LOAD( "2.5k",     0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
1006 	ROM_LOAD( "3.5l",     0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
1007 
1008 	ROM_REGION( 0x0220, "proms", 0 )
1009 	ROM_LOAD( "prom1.e1",     0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
1010 	ROM_LOAD( "prom3.k5",     0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
1011 	ROM_LOAD( "prom2.8r",     0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
1012 ROM_END
1013 
1014 // CPU BOARD NO. 58AS50-1, DISPLAY BOARD NO. 58AS51-1, MUSIC & VOICE BOARD NO. 59MC02
1015 ROM_START( exctsccra ) /* Teams: ITA AUS GBR FRA FRG BRA */
1016 	ROM_REGION( 0x10000, "maincpu", 0 )
1017 	ROM_LOAD( "1_g10.bin",    0x0000, 0x2000, CRC(aa68df66) SHA1(f10cac5a4c5aad1e1eb8835174dc8d517bb2921a) )
1018 	ROM_LOAD( "2_h10.bin",    0x2000, 0x2000, CRC(2d8f8326) SHA1(8809e7b081fa2a1966cb51ac969fd7b468d35be0) )
1019 	ROM_LOAD( "3_j10.bin",    0x4000, 0x2000, CRC(dce4a04d) SHA1(9c015e4597ec8921bea213d9841fc69c776a4e6d) )
1020 
1021 	ROM_REGION( 0x10000, "audiocpu", 0 )
1022 	ROM_LOAD( "exctsccc.000", 0x0000, 0x2000, CRC(642fc42f) SHA1(cfc849d18e347e3e23fc31c1ce7f2580d5d9b2b0) )
1023 	ROM_LOAD( "exctsccc.009", 0x2000, 0x2000, CRC(d88b3236) SHA1(80f083fb15243e9e68978677caed8aee8e3109a0) )
1024 	ROM_LOAD( "8_d6.bin",     0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
1025 	ROM_LOAD( "7_c6.bin",     0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
1026 	ROM_LOAD( "1_a6.bin",     0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
1027 
1028 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
1029 	ROM_LOAD( "alpha-8302_44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
1030 
1031 	ROM_REGION( 0x04000, "gfx1", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
1032 	ROM_LOAD( "4_a5.bin",     0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
1033 	ROM_LOAD( "6_c5.bin",     0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
1034 
1035 	ROM_REGION( 0x04000, "gfx2", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
1036 	ROM_LOAD( "5_b5.bin",     0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
1037 
1038 	ROM_REGION( 0x02000, "gfx3", 0 )    // 4bpp sprites
1039 	ROM_LOAD( "2.5k",     0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
1040 	ROM_LOAD( "3.5l",     0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
1041 
1042 	ROM_REGION( 0x0220, "proms", 0 )
1043 	ROM_LOAD( "prom1.e1",     0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
1044 	ROM_LOAD( "prom3.k5",     0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
1045 	ROM_LOAD( "prom2.8r",     0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
1046 ROM_END
1047 
1048 ROM_START( exctsccru ) /* Teams: ITA USA GBR FRA FRG BRA */
1049 	ROM_REGION( 0x10000, "maincpu", 0 )
1050 	ROM_LOAD( "vr1u.g10",    0x0000, 0x2000, CRC(ef39676d) SHA1(f7728d86b2c68bb93a0fcf02931cda8cb65e6d48) ) /* Team USA in place of Austria */
1051 	ROM_LOAD( "vr2u.h10",    0x2000, 0x2000, CRC(37994b86) SHA1(681a27a009909cc8d26f8046c54532ec56145f97) )
1052 	ROM_LOAD( "vr3u.j10",    0x4000, 0x2000, CRC(2ed3c6bb) SHA1(d3bad24cbbb34eb6c43cb603cbf66ab35be2c845) )
1053 
1054 	ROM_REGION( 0x10000, "audiocpu", 0 )
1055 	ROM_LOAD( "vr0u.6h",      0x0000, 0x2000, CRC(cbb035c6) SHA1(e89e69678335edf1cadc7b7949f8cfe47dfabc46) )
1056 	ROM_LOAD( "9_f6.bin",     0x2000, 0x2000, CRC(639998f5) SHA1(c4ff5e5e75d53dea38449f323186d08d5b57bf90) )
1057 	ROM_LOAD( "8_d6.bin",     0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
1058 	ROM_LOAD( "7_c6.bin",     0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
1059 	ROM_LOAD( "1_a6.bin",     0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
1060 
1061 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
1062 	ROM_LOAD( "alpha-8302_44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
1063 
1064 	ROM_REGION( 0x04000, "gfx1", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
1065 	ROM_LOAD( "vr4u.a5",     0x0000, 0x2000, CRC(103bb739) SHA1(335d89b3a374daa3fd1bd3fd66a82e7310303051) ) /* planes 0,1 */
1066 	ROM_LOAD( "vr6u.c5",     0x2000, 0x2000, CRC(a5b2b303) SHA1(0dd1912baa8236cba2baa4bc3d2955fd19617be9) ) /* plane 3 */
1067 
1068 	ROM_REGION( 0x04000, "gfx2", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
1069 	ROM_LOAD( "5_b5.bin",     0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
1070 
1071 	ROM_REGION( 0x02000, "gfx3", 0 )    // 4bpp sprites
1072 	ROM_LOAD( "2.5k",     0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
1073 	ROM_LOAD( "3.5l",     0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
1074 
1075 	ROM_REGION( 0x0220, "proms", 0 )
1076 	ROM_LOAD( "prom1.e1",     0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
1077 	ROM_LOAD( "prom3.k5",     0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
1078 	ROM_LOAD( "prom2.8r",     0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
1079 ROM_END
1080 
1081 ROM_START( exctsccrj ) /* Teams: JPN USA GBR FRA FRG BRA */
1082 	ROM_REGION( 0x10000, "maincpu", 0 )
1083 	ROM_LOAD( "1_10g.bin",    0x0000, 0x2000, CRC(310298a2) SHA1(b05a697ec2ed1bf4947fcc5f823ed9cb8daeee15) ) /* Corrects "ENG" to GBR & "GFR" to FGR */
1084 	ROM_LOAD( "2_10h.bin",    0x2000, 0x2000, CRC(030fd0b7) SHA1(a4c57c5eb1c76dc7e5d9be48036f21331f9529d9) )
1085 	ROM_LOAD( "3_10j.bin",    0x4000, 0x2000, CRC(1a51ff1f) SHA1(2a657f95807bfbf172f7d22e20b9ce75f453d028) )
1086 
1087 	ROM_REGION( 0x10000, "audiocpu", 0 )
1088 	ROM_LOAD( "0_h6.bin",     0x0000, 0x2000, CRC(3babbd6b) SHA1(b81bd47c4449f4f21f2d55d01eb9cb6db10664c7) )
1089 	ROM_LOAD( "9_f6.bin",     0x2000, 0x2000, CRC(639998f5) SHA1(c4ff5e5e75d53dea38449f323186d08d5b57bf90) )
1090 	ROM_LOAD( "8_d6.bin",     0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
1091 	ROM_LOAD( "7_c6.bin",     0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
1092 	ROM_LOAD( "1_a6.bin",     0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
1093 
1094 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
1095 	ROM_LOAD( "alpha-8302_44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
1096 
1097 	ROM_REGION( 0x04000, "gfx1", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
1098 	ROM_LOAD( "4_5a.bin",     0x0000, 0x2000, CRC(74cc71d6) SHA1(ff3d59845bc66ec3335eadf81d799a684182c66f) ) /* planes 0,1 */
1099 	ROM_LOAD( "6_5c.bin",     0x2000, 0x2000, CRC(7c4cd1b6) SHA1(141e67fec9b6d6b4380cb941b4d79341787680e3) ) /* plane 3 */
1100 
1101 	ROM_REGION( 0x04000, "gfx2", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
1102 	ROM_LOAD( "5_5b.bin",     0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
1103 
1104 	ROM_REGION( 0x02000, "gfx3", 0 )    // 4bpp sprites
1105 	ROM_LOAD( "2.5k",         0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
1106 	ROM_LOAD( "3.5l",         0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
1107 
1108 	ROM_REGION( 0x0220, "proms", 0 )
1109 	ROM_LOAD( "prom1.e1",     0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
1110 	ROM_LOAD( "prom3.k5",     0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
1111 	ROM_LOAD( "prom2.8r",     0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
1112 ROM_END
1113 
1114 ROM_START( exctsccrjo ) /* Teams: JPN USA ENG FRA GFR BRA */
1115 	ROM_REGION( 0x10000, "maincpu", 0 )
1116 	ROM_LOAD( "1.10g",    0x0000, 0x2000, CRC(d1bfdf75) SHA1(a4a9bb340712401b1d24705c26d996a798776d4f) )
1117 	ROM_LOAD( "2.10h",    0x2000, 0x2000, CRC(5c61f0fe) SHA1(8c6751b80f89d8744d3eaa2a6da2cafdde968ed2) )
1118 	ROM_LOAD( "3.10j",    0x4000, 0x2000, CRC(8f213b10) SHA1(5bffaee2725fe34b0614fcf1b4dc1c9a2f2df36c) )
1119 
1120 	ROM_REGION( 0x10000, "audiocpu", 0 )
1121 	ROM_LOAD( "0.6h",     0x0000, 0x2000, CRC(548b08a2) SHA1(4cdcc67e34e56cbac5d07e9603650073de0bb5d1) )
1122 	ROM_LOAD( "9.f6",     0x2000, 0x2000, CRC(639998f5) SHA1(c4ff5e5e75d53dea38449f323186d08d5b57bf90) )
1123 	ROM_LOAD( "8.6d",     0x4000, 0x2000, CRC(b6b209a5) SHA1(e49a0db65b29337ac6b919237067b1990f2233ab) )
1124 	ROM_LOAD( "7.6c",     0x6000, 0x2000, CRC(8856452a) SHA1(4494c225c9df97da09c180caadb4dda49d0d5392) )
1125 
1126 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
1127 	ROM_LOAD( "alpha-8302_44801b35.bin", 0x0000, 0x2000, CRC(edabac6c) SHA1(eaf1c51b63023256df526b0d3fd53cffc919c901) )
1128 
1129 	ROM_REGION( 0x04000, "gfx1", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
1130 	ROM_LOAD( "4.5a",     0x0000, 0x2000, CRC(c4259307) SHA1(7bd4e229a5e1a5136826a57aa61810fcdf9c5027) ) /* planes 0,1 */
1131 	ROM_LOAD( "6.5c",     0x2000, 0x2000, CRC(cca53367) SHA1(f06ebf2ab8f8f10cfe118af490017972990e3073) ) /* plane 3 */
1132 
1133 	ROM_REGION( 0x04000, "gfx2", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
1134 	ROM_LOAD( "5.5b",     0x0000, 0x2000, CRC(851d1a18) SHA1(2cfad530c8f9d95094fd0aacd2e0965b0300898c) ) /* planes 0,1 */
1135 
1136 	ROM_REGION( 0x02000, "gfx3", 0 )    // 4bpp sprites
1137 	ROM_LOAD( "2.5k",     0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
1138 	ROM_LOAD( "3.5l",     0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
1139 
1140 	ROM_REGION( 0x0220, "proms", 0 )
1141 	ROM_LOAD( "prom1.e1",     0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
1142 	ROM_LOAD( "prom3.k5",     0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
1143 	ROM_LOAD( "prom2.8r",     0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
1144 ROM_END
1145 
1146 /*
1147 The Kazutomi bootleg board is a conversion from Champion Baseball:
1148 Alpha denshi co. LTD made in Japan
1149 cpu board 58AS1
1150 Display board 58AS2
1151 Voice board 58AS3
1152 KAZUTOMI board
1153 1x Alpha8201 (CPU board)
1154 1x AY-3-8910 (CPU board)
1155 1x Sharp Z80ACPU (CPU board)
1156 1x Sharp Z80ACPU (VOICE board)
1157 3x 2764 (CPU board) (1-2-3)
1158 3x 2764 (VOICE board) (a-b-c)
1159 2x 2764 (DISPLAY board) (4-5)
1160 1x 2764 (daughter board kazutomi) (6)
1161 2x 2732 (daughter board kazutomi) (7-8)
1162 */
1163 ROM_START( exctsccrb )
1164 	ROM_REGION( 0x10000, "maincpu", 0 )
1165 	ROM_LOAD( "es-1.e2",      0x0000, 0x2000, CRC(997c6a82) SHA1(60fe27a12eedd22c775b7e65c5ba692cfcf5ac74) )
1166 	ROM_LOAD( "es-2.g2",      0x2000, 0x2000, CRC(5c66e792) SHA1(f7a7f32806965fa926261217cee3159ccd198d49) )
1167 	ROM_LOAD( "es-3.h2",      0x4000, 0x2000, CRC(e0d504c0) SHA1(d9a9f37b3a44a05a3f3389aa9617c419a2cee661) )
1168 
1169 	ROM_REGION( 0x10000, "audiocpu", 0 ) /* sound */
1170 	ROM_LOAD( "es-a.k2",      0x0000, 0x2000, CRC(99e87b78) SHA1(f12006ff3f6f3c706e06288c97a1446141373432) )
1171 	ROM_LOAD( "es-b.l2",      0x2000, 0x2000, CRC(8b3db794) SHA1(dbfed2357c7631bfca6bbd63a23617bc3abf6ca3) )
1172 	ROM_LOAD( "es-c.m2",      0x4000, 0x2000, CRC(7bed2f81) SHA1(cbbb0480519cc04a99e8983228b18c9e49a9985d) )
1173 
1174 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 )
1175 	ROM_LOAD( "alpha-8201_44801a75_2f25.bin", 0x0000, 0x2000, CRC(b77931ac) SHA1(405b02585e80d95a2821455538c5c2c31ce262d1) )
1176 
1177 	/* the national flags are wrong. This happens on the real board */
1178 	ROM_REGION( 0x04000, "gfx1", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
1179 	ROM_LOAD( "4_a5.bin",     0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
1180 	ROM_LOAD( "6_c5.bin",     0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
1181 
1182 	ROM_REGION( 0x04000, "gfx2", 0 )    // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
1183 	ROM_LOAD( "5_b5.bin",     0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
1184 
1185 	ROM_REGION( 0x02000, "gfx3", 0 )    // 4bpp sprites
1186 	ROM_LOAD( "2_k5.bin",     0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
1187 	ROM_LOAD( "3_l5.bin",     0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
1188 
1189 	ROM_REGION( 0x0220, "proms", 0 )
1190 	ROM_LOAD( "prom1.e1",     0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
1191 	ROM_LOAD( "prom3.k5",     0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
1192 	ROM_LOAD( "prom2.8r",     0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
1193 ROM_END
1194 
1195 ROM_START( exctscc2 ) // 2-PCB stack: CPU & SOUND BOARD + DISPLAY BOARD N. 58AS51-1
1196 	ROM_REGION( 0x10000, "maincpu", 0 ) // on CPU & sound board
1197 	ROM_LOAD( "eprom_1_vr_b_alpha_denshi.3j",      0x0000, 0x2000, CRC(c6115362) SHA1(6a258631abd72ef6b8d7968bb4b2bc88e89e597d) ) // B handwritten
1198 	ROM_LOAD( "eprom_2_vr_alpha_denshi.3k",        0x2000, 0x2000, CRC(de36ba00) SHA1(0a0d92e710b8c749f145571bc8a204609456d19d) )
1199 	ROM_LOAD( "eprom_3_vr_v_alpha_denshi.3l",      0x4000, 0x2000, CRC(1ddfdf65) SHA1(313d0a7f13fc2de15aa32492c38a59fbafad9f01) ) // V handwritten
1200 
1201 	ROM_REGION( 0x10000, "audiocpu", 0 ) // on CPU & sound board
1202 	ROM_LOAD( "eprom_0_vr_alpha_denshi.7d",     0x0000, 0x2000, CRC(2c675a43) SHA1(aa0a8dbcae955e3da92c435202f2a1ed238c377e) ) // yes 0, not 10
1203 	ROM_LOAD( "eprom_9_vr_alpha_denshi.7e",     0x2000, 0x2000, CRC(e571873d) SHA1(2dfff24f5dac86e92612f40cf3642005c7f36ad3) )
1204 	ROM_LOAD( "eprom_8_vr_alpha_denshi.7f",     0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
1205 	ROM_LOAD( "eprom_7_vr_alpha_denshi.7h",     0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
1206 	ROM_LOAD( "eprom_1_vr_alpha_denshi.7k",     0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) ) // marked for a 2764 but populated with a 2732
1207 
1208 	ROM_REGION( 0x2000, "alpha_8201:mcu", 0 ) // on CPU & sound board
1209 	ROM_LOAD( "alpha-8303_44801b42.1d", 0x0000, 0x2000, CRC(66adcb37) SHA1(e1c72ecb161129dcbddc0b16dd90e716d0c79311) )
1210 
1211 	ROM_REGION( 0x04000, "gfx1", 0 )    // 3bpp chars + sprites: rearranged by init_exctsccr() to leave only chars, on display board
1212 	ROM_LOAD( "eprom_4_vr_alpha_denshi.5a",        0x0000, 0x2000, CRC(4ff1783d) SHA1(c45074864c3a4bcbf3a87d164027ae16dca53d9c) ) // planes 0,1
1213 	ROM_LOAD( "eprom_6_vr_alpha_denshi.5c",        0x2000, 0x2000, CRC(1fb84ee6) SHA1(56ceb86c509be783f806403ac21e7c9684760d5f) ) // plane 3
1214 
1215 	ROM_REGION( 0x04000, "gfx2", 0 )    // 3bpp chars + sprites: rearranged by init_exctsccr() to leave only sprites, on display board
1216 	ROM_LOAD( "eprom_5_vr_alpha_denshi.5b",        0x0000, 0x2000, CRC(5605b60b) SHA1(19d5909896ae4a3d7552225c369d30475c56793b) ) // planes 0,1
1217 
1218 	ROM_REGION( 0x02000, "gfx3", 0 )    // 4bpp sprites, on display board
1219 	ROM_LOAD( "eprom_7_vr_alpha_denshi.5k",        0x0000, 0x1000, CRC(1d37edfa) SHA1(184fa6dd7b1b3fff4c5fc19b42301ccb7979ac84) )
1220 	ROM_LOAD( "eprom_8_vr_alpha_denshi.5l",        0x1000, 0x1000, CRC(b97f396c) SHA1(4ffe512acf047230bd593911a615fc0ef66b481d) )
1221 
1222 	ROM_REGION( 0x0220, "proms", 0 ) // colors match video from PCB (even the field one)
1223 	ROM_LOAD( "tbp18s030.5j",     0x0000, 0x0020, CRC(899d153d) SHA1(669f1a2de387ae7cdce16c2714a384c9586ed255) ) // palette, marked as 7051 on CPU & sound board
1224 	ROM_LOAD( "tbp24s10.61d",     0x0020, 0x0100, CRC(75613784) SHA1(38dc1c1d2d0f33d58f035942e71665c9810fdab1) ) // lookup table, marked as 7052 on display board
1225 	ROM_LOAD( "tbp24s10.60h",     0x0120, 0x0100, CRC(1a52d6eb) SHA1(cd0c8cbaf5d8df14df34103cde2ec595039a6d51) ) // lookup table, marked as 7052 on display board
1226 ROM_END
1227 
1228 
1229 
1230 /*************************************
1231  *
1232  *  Driver initialization
1233  *
1234  *************************************/
1235 
1236 void champbas_state::init_champbas()
1237 {
1238 	// chars and sprites are mixed in the same ROMs, so rearrange them for easier decoding
1239 	uint8_t *rom1 = memregion("gfx1")->base();
1240 	uint8_t *rom2 = memregion("gfx2")->base();
1241 	int len = memregion("gfx1")->bytes();
1242 
1243 	for (int i = 0; i < len/2; i++)
1244 	{
1245 		uint8_t t = rom1[i + len/2];
1246 		rom1[i + len/2] = rom2[i];
1247 		rom2[i] = t;
1248 	}
1249 }
1250 
1251 
init_exctsccr()1252 void exctsccr_state::init_exctsccr()
1253 {
1254 	// chars and sprites are mixed in the same ROMs, so rearrange them for easier decoding
1255 	uint8_t *rom1 = memregion("gfx1")->base();
1256 	uint8_t *rom2 = memregion("gfx2")->base();
1257 
1258 	// planes 0,1
1259 	for (int i = 0; i < 0x1000; i++)
1260 	{
1261 		uint8_t t = rom1[i + 0x1000];
1262 		rom1[i + 0x1000] = rom2[i];
1263 		rom2[i] = t;
1264 	}
1265 
1266 	// plane 3
1267 	for (int i = 0; i < 0x1000; i++)
1268 	{
1269 		rom2[i + 0x3000] = rom1[i + 0x3000] >> 4;
1270 		rom2[i + 0x2000] = rom1[i + 0x3000] & 0x0f;
1271 	}
1272 	for (int i = 0; i < 0x1000; i++)
1273 	{
1274 		rom1[i + 0x3000] = rom1[i + 0x2000] >> 4;
1275 		rom1[i + 0x2000] &= 0x0f;
1276 	}
1277 }
1278 
1279 
1280 
1281 /*************************************
1282  *
1283  *  Game driver(s)
1284  *
1285  *************************************/
1286 
1287 /*    YEAR  NAME        PARENT    MACHINE     INPUT     INIT                      MONITOR COMPANY, FULLNAME, FLAGS */
1288 GAME( 1982, talbot,     0,        talbot,     talbot,   champbas_state, empty_init,    ROT270, "Alpha Denshi Co. (Volt Electronics license)", "Talbot", MACHINE_SUPPORTS_SAVE )
1289 
1290 GAME( 1983, champbas,   0,        champbas,   champbas, champbas_state, init_champbas, ROT0,   "Alpha Denshi Co. (Sega license)", "Champion Base Ball", MACHINE_SUPPORTS_SAVE ) // no protection
1291 GAME( 1983, champbasj,  champbas, champbasj,  champbas, champbas_state, init_champbas, ROT0,   "Alpha Denshi Co.", "Champion Base Ball (Japan set 1)", MACHINE_SUPPORTS_SAVE )
1292 GAME( 1983, champbasja, champbas, champbasja, champbas, champbas_state, init_champbas, ROT0,   "Alpha Denshi Co.", "Champion Base Ball (Japan set 2)", MACHINE_SUPPORTS_SAVE ) // simplified protection, no mcu
1293 GAME( 1983, champbasjb, champbas, champbasjb, champbas, champbas_state, init_champbas, ROT0,   "Alpha Denshi Co.", "Champion Base Ball (Japan set 3)", MACHINE_SUPPORTS_SAVE ) // no protection
1294 GAME( 1983, champbb2,   0,        champbb2,   champbas, champbas_state, init_champbas, ROT0,   "Alpha Denshi Co. (Sega license)", "Champion Base Ball Part-2 (set 1)", MACHINE_SUPPORTS_SAVE )
1295 GAME( 1983, champbb2j,  champbb2, champbb2j,  champbas, champbas_state, init_champbas, ROT0,   "Alpha Denshi Co.", "Champion Base Ball Part-2 (Japan)", MACHINE_SUPPORTS_SAVE )
1296 GAME( 1983, tbasebal,   champbb2, tbasebal,   champbas, champbas_state, init_champbas, ROT0,   "Alpha Denshi Co.", "Taikyoku Base Ball", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 68705 protection instead
1297 
1298 GAME( 1983, exctsccr,   0,        exctsccr,   exctsccr, exctsccr_state, init_exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer", MACHINE_SUPPORTS_SAVE )
1299 GAME( 1983, exctsccru,  exctsccr, exctsccr,   exctsccr, exctsccr_state, init_exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (US)", MACHINE_SUPPORTS_SAVE )
1300 GAME( 1983, exctsccra,  exctsccr, exctsccr,   exctsccr, exctsccr_state, init_exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (alternate music)", MACHINE_SUPPORTS_SAVE )
1301 GAME( 1983, exctsccrj,  exctsccr, exctsccr,   exctsccr, exctsccr_state, init_exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (Japan)", MACHINE_SUPPORTS_SAVE )
1302 GAME( 1983, exctsccrjo, exctsccr, exctsccr,   exctsccr, exctsccr_state, init_exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (Japan, older)", MACHINE_SUPPORTS_SAVE )
1303 GAME( 1983, exctsccrb,  exctsccr, exctsccrb,  exctsccr, exctsccr_state, init_exctsccr, ROT270, "bootleg (Kazutomi)", "Exciting Soccer (bootleg)", MACHINE_SUPPORTS_SAVE ) // on champbasj hardware
1304 GAME( 1984, exctscc2,   0,        exctscc2,   exctsccr, exctsccr_state, init_exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer II", MACHINE_SUPPORTS_SAVE )
1305