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