merged exctsccr.c into champbas.c

This commit is contained in:
Nicola Salmoria 2008-07-13 14:09:09 +00:00
parent dabae9787b
commit 4b6e06f175
6 changed files with 646 additions and 770 deletions

2
.gitattributes vendored
View File

@ -1427,7 +1427,6 @@ src/mame/drivers/esd16.c svneol=native#text/plain
src/mame/drivers/esh.c svneol=native#text/plain
src/mame/drivers/espial.c svneol=native#text/plain
src/mame/drivers/ettrivia.c svneol=native#text/plain
src/mame/drivers/exctsccr.c svneol=native#text/plain
src/mame/drivers/exedexes.c svneol=native#text/plain
src/mame/drivers/exerion.c svneol=native#text/plain
src/mame/drivers/exidy.c svneol=native#text/plain
@ -2843,7 +2842,6 @@ src/mame/video/eprom.c svneol=native#text/plain
src/mame/video/equites.c svneol=native#text/plain
src/mame/video/esd16.c svneol=native#text/plain
src/mame/video/espial.c svneol=native#text/plain
src/mame/video/exctsccr.c svneol=native#text/plain
src/mame/video/exedexes.c svneol=native#text/plain
src/mame/video/exerion.c svneol=native#text/plain
src/mame/video/exidy.c svneol=native#text/plain

View File

@ -1,17 +1,18 @@
/***************************************************************************
Championship Baseball
Talbot - (c) 1982 Alpha Denshi Co.
Champion Base Ball - (c) 1983 Alpha Denshi Co.
Champion Base Ball Part-2 - (c) 1983 Alpha Denshi Co.
Exciting Soccer - (c) 1983 Alpha Denshi Co.
Exciting Soccer II - (c) 1984 Alpha Denshi Co.
driver by Nicola Salmoria
driver by Ernesto Corvi, Jarek Parchanski, Nicola Salmoria
ALPHA 8201 MCU handling by Tatsuyuki satoh
Note: the Champion Baseball II unofficial schematics show a 8302 instead of
the 8201, however the MCU is used like a plain 8201, 830x extra instructions
are not used.
TODO:
champbb2 , sometime mcu err and ACCESS VIOLATION trap.
champbbj and champbb2 has Alpha8201 mcu for protection.
champbja is a patched version of champbbj with different protection.
@ -63,6 +64,20 @@ Notes:
it on boot and hang if it is not 0. Also, the Talbot MCU does a security check
and crashes if the bit doesn't match bit 2 of RAM location 0x8c00.
- The Exciting Soccer bootleg runs on a modified Champion Baseball board. The
original board has vastly improved sound hardware which is thereforew missing
from the bootleg.
TODO:
-----
- champbb2, sometime mcu err and ACCESS VIOLATION trap.
- Exciting Soccer: interrupt source for sound CPU is unknown.
- Exciting Soccer: sound CPU writes to unknown ports on startup. Timer configure?
- Exciting Soccer: Unknown writes to 8910 I/O ports (filters?)
***************************************************************************/
#include "driver.h"
@ -73,14 +88,18 @@ Notes:
#define CPUTAG_MCU "MCU"
extern UINT8 *champbas_bg_videoram;
WRITE8_HANDLER( champbas_bg_videoram_w );
WRITE8_HANDLER( champbas_gfxbank_w );
WRITE8_HANDLER( champbas_palette_bank_w );
WRITE8_HANDLER( champbas_flipscreen_w );
PALETTE_INIT( champbas );
VIDEO_START( champbas );
VIDEO_UPDATE( champbas );
extern WRITE8_HANDLER( champbas_bg_videoram_w );
extern WRITE8_HANDLER( champbas_gfxbank_w );
extern WRITE8_HANDLER( champbas_palette_bank_w );
extern WRITE8_HANDLER( champbas_flipscreen_w );
extern PALETTE_INIT( champbas );
extern PALETTE_INIT( exctsccr );
extern VIDEO_START( champbas );
extern VIDEO_START( exctsccr );
extern VIDEO_UPDATE( champbas );
extern VIDEO_UPDATE( exctsccr );
static int champbas_watchdog_count;
@ -115,11 +134,31 @@ static WRITE8_HANDLER( irq_enable_w )
}
static TIMER_CALLBACK( exctsccr_fm_callback )
{
cpunum_set_input_line_and_vector(machine, 1, 0, HOLD_LINE, 0xff );
}
static MACHINE_START( exctsccr )
{
// FIXME
timer_pulse(ATTOTIME_IN_HZ(75), NULL, 0, exctsccr_fm_callback); /* updates fm */
}
// Champion Baseball has only one DAC
static WRITE8_HANDLER( champbas_dac_w )
{
DAC_signed_data_w(0,data<<2);
DAC_signed_data_w(0, data << 2);
}
// Exciting Soccer has two
static WRITE8_HANDLER( exctsccr_DAC_data_w )
{
DAC_signed_data_w(offset, data << 2);
}
///////////////////////////////////////////////////////////////////////////
// protection handling
///////////////////////////////////////////////////////////////////////////
@ -142,6 +181,7 @@ static WRITE8_HANDLER( champbas_mcu_halt_w )
cpunum_set_input_line(machine, cpunum, INPUT_LINE_HALT, data ? ASSERT_LINE : CLEAR_LINE);
}
/* champbja another protection */
static READ8_HANDLER( champbja_alt_protection_r )
{
@ -174,7 +214,7 @@ AB 1010_1011
static ADDRESS_MAP_START( talbot_main_map, ADDRESS_SPACE_PROGRAM, 8 )
static ADDRESS_MAP_START( talbot_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE(1) /* MCU shared RAM */
AM_RANGE(0x7000, 0x7000) AM_WRITE(AY8910_write_port_0_w)
@ -183,6 +223,11 @@ static ADDRESS_MAP_START( talbot_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x8800, 0x8fef) AM_RAM
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa080, 0xa080) AM_READ(input_port_2_r)
AM_RANGE(0xa0c0, 0xa0c0) AM_READ(input_port_3_r)
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w)
AM_RANGE(0xa001, 0xa001) AM_WRITENOP // !WORK board output (no use?)
AM_RANGE(0xa002, 0xa002) AM_WRITENOP
@ -192,26 +237,27 @@ static ADDRESS_MAP_START( talbot_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w)
AM_RANGE(0xa007, 0xa007) AM_WRITE(champbas_mcu_switch_w)
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa060, 0xa06f) AM_WRITE(SMH_RAM) AM_BASE(&spriteram_2)
AM_RANGE(0xa080, 0xa080) AM_READ(input_port_2_r)
AM_RANGE(0xa0c0, 0xa0c0) AM_READWRITE(input_port_3_r, champbas_watchdog_reset_w)
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(champbas_watchdog_reset_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
static ADDRESS_MAP_START( champbas_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE(1)
AM_RANGE(0x7000, 0x7000) AM_WRITE(AY8910_write_port_0_w)
AM_RANGE(0x7001, 0x7001) AM_WRITE(AY8910_control_port_0_w)
AM_RANGE(0x7800, 0x7fff) AM_ROM // champbb2 only
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_BASE(&champbas_bg_videoram)
AM_RANGE(0x8800, 0x8fef) AM_RAM
AM_RANGE(0x8ff0, 0x8fff) AM_RAM AM_BASE(&spriteram) AM_SIZE(&spriteram_size)
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w) AM_READ(input_port_0_r)
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa080, 0xa080) AM_READ(input_port_2_r)
AM_RANGE(0xa0c0, 0xa0c0) AM_READ(input_port_3_r)
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w)
AM_RANGE(0xa001, 0xa001) AM_WRITENOP // !WORK board output (no use?)
AM_RANGE(0xa002, 0xa002) AM_WRITE(champbas_gfxbank_w)
AM_RANGE(0xa003, 0xa003) AM_WRITE(champbas_flipscreen_w)
@ -220,18 +266,69 @@ static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w) // MCU not present/not used in champbas
AM_RANGE(0xa007, 0xa007) AM_WRITE(champbas_mcu_switch_w) // MCU not present/not used in champbas
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa060, 0xa06f) AM_RAM AM_BASE(&spriteram_2)
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w) AM_READ(input_port_2_r)
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
/* AM_RANGE(0xa0a0, 0xa0a0) ???? */
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(champbas_watchdog_reset_w) AM_READ(input_port_3_r)
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(champbas_watchdog_reset_w)
/* champbja only */
AM_RANGE(0x6800, 0x68ff) AM_READ(champbja_alt_protection_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sub_map, ADDRESS_SPACE_PROGRAM, 8 )
static ADDRESS_MAP_START( exctsccb_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
// AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE(1) // MCU not used (though it's present on the board)
AM_RANGE(0x7000, 0x7000) AM_WRITE(AY8910_write_port_0_w)
AM_RANGE(0x7001, 0x7001) AM_WRITE(AY8910_control_port_0_w)
// AM_RANGE(0x7800, 0x7fff) AM_ROM // champbb2 only
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_BASE(&champbas_bg_videoram)
AM_RANGE(0x8800, 0x8fff) AM_RAM AM_BASE(&spriteram_2) /* ??? */
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa080, 0xa080) AM_READ(input_port_2_r)
AM_RANGE(0xa0c0, 0xa0c0) AM_READ(input_port_3_r)
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w)
AM_RANGE(0xa001, 0xa001) AM_WRITENOP /* ??? */
AM_RANGE(0xa002, 0xa002) AM_WRITE(champbas_gfxbank_w)
AM_RANGE(0xa003, 0xa003) AM_WRITE(champbas_flipscreen_w)
AM_RANGE(0xa006, 0xa006) AM_WRITENOP /* MCU is not used, but some leftover code still writes here */
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* MCU is not used, but some leftover code still writes here */
AM_RANGE(0xa040, 0xa06f) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) /* Sprite Pos */
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( exctsccr_main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE(1)
AM_RANGE(0x7c00, 0x7fff) AM_RAM
AM_RANGE(0x8000, 0x87ff) AM_RAM_WRITE(champbas_bg_videoram_w) AM_BASE(&champbas_bg_videoram)
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_BASE(&spriteram_2) /* ??? */
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa080, 0xa080) AM_READ(input_port_2_r)
AM_RANGE(0xa0c0, 0xa0c0) AM_READ(input_port_3_r)
AM_RANGE(0xa000, 0xa000) AM_WRITE(irq_enable_w)
// AM_RANGE(0xa001, 0xa001) AM_WRITENOP /* ??? */
AM_RANGE(0xa002, 0xa002) AM_WRITE(champbas_gfxbank_w)
AM_RANGE(0xa003, 0xa003) AM_WRITE(champbas_flipscreen_w)
AM_RANGE(0xa006, 0xa006) AM_WRITE(champbas_mcu_halt_w)
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but i dont need it */
AM_RANGE(0xa040, 0xa06f) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) /* Sprite pos */
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(watchdog_reset_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( champbas_sub_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x7fff) AM_READ(soundlatch_r)
AM_RANGE(0x8000, 0x9fff) AM_WRITENOP // 4-bit return code to main CPU (not used)
@ -240,6 +337,29 @@ static ADDRESS_MAP_START( sub_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0xe000, 0xe3ff) AM_MIRROR(0x1c00) AM_RAM
ADDRESS_MAP_END
static ADDRESS_MAP_START( exctsccr_sub_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x8fff) AM_ROM
AM_RANGE(0xa000, 0xa7ff) AM_RAM
AM_RANGE(0xc008, 0xc009) AM_WRITE(exctsccr_DAC_data_w)
AM_RANGE(0xc00c, 0xc00c) AM_WRITE(soundlatch_clear_w)
AM_RANGE(0xc00d, 0xc00d) AM_READ(soundlatch_r)
// AM_RANGE(0xc00f, 0xc00f) AM_WRITENOP /* ??? */
ADDRESS_MAP_END
static ADDRESS_MAP_START( exctsccr_sound_writeport, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK( 0x00ff )
AM_RANGE(0x82, 0x82) AM_WRITE(AY8910_write_port_0_w)
AM_RANGE(0x83, 0x83) AM_WRITE(AY8910_control_port_0_w)
AM_RANGE(0x86, 0x86) AM_WRITE(AY8910_write_port_1_w)
AM_RANGE(0x87, 0x87) AM_WRITE(AY8910_control_port_1_w)
AM_RANGE(0x8a, 0x8a) AM_WRITE(AY8910_write_port_2_w)
AM_RANGE(0x8b, 0x8b) AM_WRITE(AY8910_control_port_2_w)
AM_RANGE(0x8e, 0x8e) AM_WRITE(AY8910_write_port_3_w)
AM_RANGE(0x8f, 0x8f) AM_WRITE(AY8910_control_port_3_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x03ff) AM_RAM AM_SHARE(1) /* main CPU shared RAM */
ADDRESS_MAP_END
@ -355,6 +475,60 @@ static INPUT_PORTS_START( champbas )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static INPUT_PORTS_START( exctsccr )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_START /* DSW0 */
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x03, "A 1C/1C B 3C/1C" )
PORT_DIPSETTING( 0x01, "A 1C/2C B 1C/4C" )
PORT_DIPSETTING( 0x00, "A 1C/3C B 1C/6C" )
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Difficulty ) )
PORT_DIPSETTING( 0x10, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPNAME( 0x60, 0x00, DEF_STR( Game_Time ) )
PORT_DIPSETTING( 0x20, "1 Min." )
PORT_DIPSETTING( 0x00, "2 Min." )
PORT_DIPSETTING( 0x60, "3 Min." )
PORT_DIPSETTING( 0x40, "4 Min." )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM(champbas_watchdog_bit2, 0) // bit 2 of the watchdog counter
PORT_START /* IN2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
static const gfx_layout charlayout =
@ -380,13 +554,54 @@ static const gfx_layout spritelayout =
};
static GFXDECODE_START( talbot )
GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0x100, 0x100/4 )
GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout, 0x000, 0x100/4 )
GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0x100, 0x100>>2 )
GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout, 0x000, 0x100>>2 )
GFXDECODE_END
static GFXDECODE_START( champbas )
GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 0x200/4 )
GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout, 0, 0x200/4 )
GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout, 0, 0x200>>2 )
GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout, 0, 0x200>>2 )
GFXDECODE_END
static const gfx_layout charlayout_3bpp =
{
8,8,
RGN_FRAC(1,2),
3,
{ RGN_FRAC(1,2)+4, 0, 4 },
{ STEP4(8*8,1), STEP4(0,1) },
{ STEP8(0,8) },
16*8
};
static const gfx_layout spritelayout_3bpp =
{
16,16,
RGN_FRAC(1,2),
3,
{ RGN_FRAC(1,2)+4, 0, 4 },
{ STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0,1) },
{ STEP8(0,8), STEP8(32*8,8) },
64*8
};
static const gfx_layout spritelayout_4bpp =
{
16,16,
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4, 0, 4 },
{ STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0,1) },
{ STEP8(0,8), STEP8(32*8,8) },
64*8
};
static GFXDECODE_START( exctsccr )
GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout_3bpp, 0x000, 0x080>>3 ) /* chars */
GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout_3bpp, 0x080, 0x080>>3 ) /* sprites */
GFXDECODE_ENTRY( REGION_GFX3, 0, spritelayout_4bpp, 0x100, 0x100>>4 ) /* sprites */
GFXDECODE_END
@ -397,7 +612,7 @@ static MACHINE_DRIVER_START( talbot )
/* basic machine hardware */
MDRV_CPU_ADD(Z80, XTAL_18_432MHz/6)
MDRV_CPU_PROGRAM_MAP(talbot_main_map, 0)
MDRV_CPU_PROGRAM_MAP(talbot_map, 0)
MDRV_CPU_VBLANK_INT("main", irq0_line_assert)
/* MCU */
@ -427,17 +642,16 @@ MACHINE_DRIVER_END
static MACHINE_DRIVER_START( champbas )
/* basic machine hardware */
/* main cpu */
MDRV_CPU_ADD(Z80, XTAL_18_432MHz/6)
MDRV_CPU_PROGRAM_MAP(main_map,0)
MDRV_CPU_PROGRAM_MAP(champbas_main_map,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_assert)
/* audio CPU */
MDRV_CPU_ADD(Z80, XTAL_18_432MHz/6)
MDRV_CPU_PROGRAM_MAP(sub_map,0)
MDRV_CPU_PROGRAM_MAP(champbas_sub_map,0)
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
@ -477,11 +691,99 @@ static MACHINE_DRIVER_START( champmcu )
MDRV_INTERLEAVE(50)
MACHINE_DRIVER_END
/***************************************************************************
Game driver(s)
static MACHINE_DRIVER_START( exctsccr )
/* basic machine hardware */
MDRV_CPU_ADD(Z80, 4000000) /* 4.0 MHz (?) */
MDRV_CPU_PROGRAM_MAP(exctsccr_main_map,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_assert)
MDRV_CPU_ADD(Z80, 4123456) /* ??? with 4 MHz, nested NMIs might happen */
MDRV_CPU_PROGRAM_MAP(exctsccr_sub_map,0)
MDRV_CPU_IO_MAP(0,exctsccr_sound_writeport)
MDRV_CPU_PERIODIC_INT(nmi_line_pulse, 4000) /* 4 kHz, updates the dac */
/* MCU */
MDRV_CPU_ADD_TAG(CPUTAG_MCU, ALPHA8301, XTAL_18_432MHz/6/8)
MDRV_CPU_PROGRAM_MAP(mcu_map,0)
MDRV_MACHINE_START(exctsccr)
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(32*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MDRV_GFXDECODE(exctsccr)
MDRV_PALETTE_LENGTH(0x200)
MDRV_PALETTE_INIT(exctsccr)
MDRV_VIDEO_START(exctsccr)
MDRV_VIDEO_UPDATE(exctsccr)
MDRV_VIDEO_EOF(champbas)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
MDRV_SOUND_ADD(DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
MACHINE_DRIVER_END
/* Bootleg running on a modified Champion Baseball board */
static MACHINE_DRIVER_START( exctsccb )
/* basic machine hardware */
MDRV_CPU_ADD(Z80, XTAL_18_432MHz/6)
MDRV_CPU_PROGRAM_MAP(exctsccb_main_map,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_assert)
MDRV_CPU_ADD(Z80, XTAL_18_432MHz/6)
MDRV_CPU_PROGRAM_MAP(champbas_sub_map,0)
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(32*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MDRV_GFXDECODE(exctsccr)
MDRV_PALETTE_LENGTH(0x200)
MDRV_PALETTE_INIT(exctsccr)
MDRV_VIDEO_START(exctsccr)
MDRV_VIDEO_UPDATE(exctsccr)
MDRV_VIDEO_EOF(champbas)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD(AY8910, XTAL_18_432MHz/12)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
MDRV_SOUND_ADD(DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.70)
MACHINE_DRIVER_END
***************************************************************************/
ROM_START( talbot )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
@ -628,6 +930,142 @@ ROM_START( champb2a )
ROM_LOAD( "pr5956", 0x0020, 0x100, CRC(872dd450) SHA1(6c1e2c4a2fc072f4bf4996c731adb0b01b347506) ) /* look-up table */
ROM_END
ROM_START( exctsccr )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "1_g10.bin", 0x0000, 0x2000, CRC(aa68df66) SHA1(f10cac5a4c5aad1e1eb8835174dc8d517bb2921a) )
ROM_LOAD( "2_h10.bin", 0x2000, 0x2000, CRC(2d8f8326) SHA1(8809e7b081fa2a1966cb51ac969fd7b468d35be0) )
ROM_LOAD( "3_j10.bin", 0x4000, 0x2000, CRC(dce4a04d) SHA1(9c015e4597ec8921bea213d9841fc69c776a4e6d) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "0_h6.bin", 0x0000, 0x2000, CRC(3babbd6b) SHA1(b81bd47c4449f4f21f2d55d01eb9cb6db10664c7) )
ROM_LOAD( "9_f6.bin", 0x2000, 0x2000, CRC(639998f5) SHA1(c4ff5e5e75d53dea38449f323186d08d5b57bf90) )
ROM_LOAD( "8_d6.bin", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
ROM_LOAD( "7_c6.bin", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
ROM_LOAD( "1_a6.bin", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "4_a5.bin", 0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
ROM_LOAD( "6_c5.bin", 0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "5_b5.bin", 0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "2_k5.bin", 0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
ROM_LOAD( "3_l5.bin", 0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom3.k5", 0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_LOAD( "prom2.8r", 0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_END
ROM_START( exctscca )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "1_g10.bin", 0x0000, 0x2000, CRC(aa68df66) SHA1(f10cac5a4c5aad1e1eb8835174dc8d517bb2921a) )
ROM_LOAD( "2_h10.bin", 0x2000, 0x2000, CRC(2d8f8326) SHA1(8809e7b081fa2a1966cb51ac969fd7b468d35be0) )
ROM_LOAD( "3_j10.bin", 0x4000, 0x2000, CRC(dce4a04d) SHA1(9c015e4597ec8921bea213d9841fc69c776a4e6d) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "exctsccc.000", 0x0000, 0x2000, CRC(642fc42f) SHA1(cfc849d18e347e3e23fc31c1ce7f2580d5d9b2b0) )
ROM_LOAD( "exctsccc.009", 0x2000, 0x2000, CRC(d88b3236) SHA1(80f083fb15243e9e68978677caed8aee8e3109a0) )
ROM_LOAD( "8_d6.bin", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
ROM_LOAD( "7_c6.bin", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
ROM_LOAD( "1_a6.bin", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "4_a5.bin", 0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
ROM_LOAD( "6_c5.bin", 0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "5_b5.bin", 0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "2_k5.bin", 0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
ROM_LOAD( "3_l5.bin", 0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom3.k5", 0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_LOAD( "prom2.8r", 0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_END
/*
The Kazutomi bootleg board is a conversion from Champion Baseball:
Alpha denshi co. LTD made in Japan
cpu board 58AS1
Display board 58AS2
Voice board 58AS3
KAZUTOMI board
1x Alpha8201 (CPU board)
1x AY-3-8910 (CPU board)
1x Sharp Z80ACPU (CPU board)
1x Sharp Z80ACPU (VOICE board)
3x 2764 (CPU board) (1-2-3)
3x 2764 (VOICE board) (a-b-c)
2x 2764 (DISPLAY board) (4-5)
1x 2764 (daughter board kazutomi) (6)
2x 2732 (daughter board kazutomi) (7-8)
*/
ROM_START( exctsccb )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "es-1.e2", 0x0000, 0x2000, CRC(997c6a82) SHA1(60fe27a12eedd22c775b7e65c5ba692cfcf5ac74) )
ROM_LOAD( "es-2.g2", 0x2000, 0x2000, CRC(5c66e792) SHA1(f7a7f32806965fa926261217cee3159ccd198d49) )
ROM_LOAD( "es-3.h2", 0x4000, 0x2000, CRC(e0d504c0) SHA1(d9a9f37b3a44a05a3f3389aa9617c419a2cee661) )
ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound */
ROM_LOAD( "es-a.k2", 0x0000, 0x2000, CRC(99e87b78) SHA1(f12006ff3f6f3c706e06288c97a1446141373432) )
ROM_LOAD( "es-b.l2", 0x2000, 0x2000, CRC(8b3db794) SHA1(dbfed2357c7631bfca6bbd63a23617bc3abf6ca3) )
ROM_LOAD( "es-c.m2", 0x4000, 0x2000, CRC(7bed2f81) SHA1(cbbb0480519cc04a99e8983228b18c9e49a9985d) )
/* the national flags are wrong. This happens on the real board */
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "4_a5.bin", 0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
ROM_LOAD( "6_c5.bin", 0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "5_b5.bin", 0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "2_k5.bin", 0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
ROM_LOAD( "3_l5.bin", 0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom3.k5", 0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_LOAD( "prom2.8r", 0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_END
ROM_START( exctscc2 )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "vr.3j", 0x0000, 0x2000, CRC(c6115362) SHA1(6a258631abd72ef6b8d7968bb4b2bc88e89e597d) )
ROM_LOAD( "vr.3k", 0x2000, 0x2000, CRC(de36ba00) SHA1(0a0d92e710b8c749f145571bc8a204609456d19d) )
ROM_LOAD( "vr.3l", 0x4000, 0x2000, CRC(1ddfdf65) SHA1(313d0a7f13fc2de15aa32492c38a59fbafad9f01) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "vr.7d", 0x0000, 0x2000, CRC(2c675a43) SHA1(aa0a8dbcae955e3da92c435202f2a1ed238c377e) )
ROM_LOAD( "vr.7e", 0x2000, 0x2000, CRC(e571873d) SHA1(2dfff24f5dac86e92612f40cf3642005c7f36ad3) )
ROM_LOAD( "8_d6.bin", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) ) /* vr.7f */
ROM_LOAD( "7_c6.bin", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) ) /* vr.7h */
ROM_LOAD( "1_a6.bin", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) ) /* vr.7k */
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "vr.5a", 0x0000, 0x2000, CRC(4ff1783d) SHA1(c45074864c3a4bcbf3a87d164027ae16dca53d9c) ) /* planes 0,1 */
ROM_LOAD( "vr.5c", 0x2000, 0x2000, CRC(1fb84ee6) SHA1(56ceb86c509be783f806403ac21e7c9684760d5f) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "vr.5b", 0x0000, 0x2000, CRC(5605b60b) SHA1(19d5909896ae4a3d7552225c369d30475c56793b) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "vr.5k", 0x0000, 0x1000, CRC(1d37edfa) SHA1(184fa6dd7b1b3fff4c5fc19b42301ccb7979ac84) )
ROM_LOAD( "vr.5l", 0x1000, 0x1000, CRC(b97f396c) SHA1(4ffe512acf047230bd593911a615fc0ef66b481d) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom3.k5", 0x0020, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_LOAD( "prom2.8r", 0x0120, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_END
static DRIVER_INIT(champbas)
@ -647,6 +1085,35 @@ static DRIVER_INIT(champbas)
}
static DRIVER_INIT( exctsccr )
{
// chars and sprites are mixed in the same ROMs, so rearrange them for easier decoding
UINT8 *rom1 = memory_region(machine, REGION_GFX1);
UINT8 *rom2 = memory_region(machine, REGION_GFX2);
int i;
// planes 0,1
for (i = 0; i < 0x1000; ++i)
{
UINT8 t = rom1[i + 0x1000];
rom1[i + 0x1000] = rom2[i];
rom2[i] = t;
}
// plane 3
for (i = 0; i < 0x1000; ++i)
{
rom2[i + 0x3000] = rom1[i + 0x3000] >> 4;
rom2[i + 0x2000] = rom1[i + 0x3000] & 0x0f;
}
for (i = 0; i < 0x1000; ++i)
{
rom1[i + 0x3000] = rom1[i + 0x2000] >> 4;
rom1[i + 0x2000] &= 0x0f;
}
}
GAME( 1982, talbot, 0, talbot, talbot, 0, ROT270, "Alpha Denshi Co. (Volt Electronics license)", "Talbot", 0 )
@ -655,3 +1122,8 @@ GAME( 1983, champbbj, champbas, champmcu, champbas, champbas, ROT0, "Alpha Den
GAME( 1983, champbja, champbas, champbas, champbas, champbas, ROT0, "Alpha Denshi Co.", "Champion Base Ball (Japan set 2)", 0 )
GAME( 1983, champbb2, 0, champmcu, champbas, champbas, ROT0, "[Alpha Denshi Co.] (Sega license)", "Champion Base Ball Part-2: Pair Play (set 1)", 0 )
GAME( 1983, champb2a, champbb2, champmcu, champbas, champbas, ROT0, "Alpha Denshi Co.", "Champion Baseball II (set 2)", GAME_NOT_WORKING) // no dump
GAME( 1983, exctsccr, 0, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer", 0 )
GAME( 1983, exctscca, exctsccr, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer (alternate music)", 0 )
GAME( 1983, exctsccb, exctsccr, exctsccb, exctsccr, exctsccr, ROT270, "bootleg", "Exciting Soccer (bootleg)", 0 )
GAME( 1984, exctscc2, 0, exctsccr, exctsccr, exctsccr, ROT270, "Alpha Denshi Co.", "Exciting Soccer II", GAME_IMPERFECT_GRAPHICS )

View File

@ -1,541 +0,0 @@
/***************************************************************************
Exciting Soccer - (c) 1983 Alpha Denshi Co.
Exciting Soccer II - (c) 1984 Alpha Denshi Co.
Supported sets:
Exciting Soccer - Alpha Denshi
Exciting Soccer (bootleg) - Kazutomi
Exciting Soccer II - Alpha Denshi
Preliminary driver by:
Ernesto Corvi
ernesto@imagina.com
Jarek Parchanski
jpdev@friko6.onet.pl
ALPHA 8301 MCU handling by Tatsuyuki satoh
NOTES:
The game supports Coin 2, but the dip switches used for it are the same
as Coin 1. Basically, this allowed to select an alternative coin table
based on wich Coin input was connected.
The Kazutomi bootleg board is a conversion from Champion Baseball:
Alpha denshi co. LTD made in Japan
cpu board 58AS1
Display board 58AS2
Voice board 58AS3
KAZUTOMI board
1x Alpha8201 (CPU board)
1x AY-3-8910 (CPU board)
1x Sharp Z80ACPU (CPU board)
1x Sharp Z80ACPU (VOICE board)
3x 2764 (CPU board) (1-2-3)
3x 2764 (VOICE board) (a-b-c)
2x 2764 (DISPLAY board) (4-5)
1x 2764 (daughter board kazutomi) (6)
2x 2732 (daughter board kazutomi) (7-8)
TODO:
- interrupt source for sound CPU is unknown.
- sound CPU writes to unknown ports on startup. Timer configure?
- unknown writes to 8910 I/O ports (filters?)
***************************************************************************/
#include "driver.h"
#include "sound/ay8910.h"
#include "sound/dac.h"
/* from video */
extern WRITE8_HANDLER( exctsccr_videoram_w );
extern WRITE8_HANDLER( exctsccr_colorram_w );
extern WRITE8_HANDLER( exctsccr_gfx_bank_w );
extern WRITE8_HANDLER( exctsccr_flipscreen_w );
extern PALETTE_INIT( exctsccr );
extern VIDEO_START( exctsccr );
extern VIDEO_UPDATE( exctsccr );
static TIMER_CALLBACK( exctsccr_fm_callback )
{
cpunum_set_input_line_and_vector(machine, 1, 0, HOLD_LINE, 0xff );
}
static MACHINE_START( exctsccr )
{
// FIXME
timer_pulse(ATTOTIME_IN_HZ(75), NULL, 0, exctsccr_fm_callback); /* updates fm */
}
static WRITE8_HANDLER( exctsccr_DAC_data_w )
{
DAC_signed_data_w(offset,data << 2);
}
static WRITE8_HANDLER( exctsccr_mcu_halt_w )
{
cpunum_set_input_line(machine, 2, INPUT_LINE_HALT, (data & 1) ? ASSERT_LINE : CLEAR_LINE);
}
/***************************************************************************
Memory definition(s)
***************************************************************************/
static ADDRESS_MAP_START( main_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x63ff) AM_RAM AM_SHARE(1)
AM_RANGE(0x7c00, 0x7fff) AM_RAM
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(exctsccr_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(exctsccr_colorram_w) AM_BASE(&colorram)
AM_RANGE(0x8800, 0x8bff) AM_RAM AM_BASE(&spriteram_2) /* ??? */
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ??? toggled twice at end of irq handler */
// AM_RANGE(0xa001, 0xa001) AM_WRITENOP /* ??? */
AM_RANGE(0xa002, 0xa002) AM_WRITE(exctsccr_gfx_bank_w)
AM_RANGE(0xa003, 0xa003) AM_WRITE(exctsccr_flipscreen_w)
AM_RANGE(0xa006, 0xa006) AM_WRITE(exctsccr_mcu_halt_w)
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* This is also MCU control, but i dont need it */
AM_RANGE(0xa040, 0xa06f) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) /* Sprite pos */
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(watchdog_reset_w)
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa080, 0xa080) AM_READ(input_port_2_r) // FIXME use champbas_dsw_r
AM_RANGE(0xa0c0, 0xa0c0) AM_READ(input_port_3_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( sub_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x8fff) AM_ROM
AM_RANGE(0xa000, 0xa7ff) AM_RAM
AM_RANGE(0xc008, 0xc009) AM_WRITE(exctsccr_DAC_data_w)
AM_RANGE(0xc00c, 0xc00c) AM_WRITE(soundlatch_clear_w)
AM_RANGE(0xc00d, 0xc00d) AM_READ(soundlatch_r)
// AM_RANGE(0xc00f, 0xc00f) AM_WRITE(MWA8_NOP) /* ??? */
ADDRESS_MAP_END
static ADDRESS_MAP_START( sound_writeport, ADDRESS_SPACE_IO, 8 )
ADDRESS_MAP_GLOBAL_MASK( 0x00ff )
AM_RANGE(0x82, 0x82) AM_WRITE(AY8910_write_port_0_w)
AM_RANGE(0x83, 0x83) AM_WRITE(AY8910_control_port_0_w)
AM_RANGE(0x86, 0x86) AM_WRITE(AY8910_write_port_1_w)
AM_RANGE(0x87, 0x87) AM_WRITE(AY8910_control_port_1_w)
AM_RANGE(0x8a, 0x8a) AM_WRITE(AY8910_write_port_2_w)
AM_RANGE(0x8b, 0x8b) AM_WRITE(AY8910_control_port_2_w)
AM_RANGE(0x8e, 0x8e) AM_WRITE(AY8910_write_port_3_w)
AM_RANGE(0x8f, 0x8f) AM_WRITE(AY8910_control_port_3_w)
ADDRESS_MAP_END
static ADDRESS_MAP_START( mcu_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x03ff) AM_RAM AM_SHARE(1) /* main CPU shared RAM */
ADDRESS_MAP_END
/* Bootleg */
static ADDRESS_MAP_START( bl_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x7000, 0x7000) AM_WRITE(AY8910_write_port_0_w)
AM_RANGE(0x7001, 0x7001) AM_WRITE(AY8910_control_port_0_w)
AM_RANGE(0x8000, 0x83ff) AM_RAM_WRITE(exctsccr_videoram_w) AM_BASE(&videoram)
AM_RANGE(0x8400, 0x87ff) AM_RAM_WRITE(exctsccr_colorram_w) AM_BASE(&colorram)
AM_RANGE(0x8800, 0x8fff) AM_RAM AM_BASE(&spriteram_2) /* ??? */
AM_RANGE(0xa000, 0xa000) AM_WRITENOP /* ??? */
AM_RANGE(0xa001, 0xa001) AM_WRITENOP /* ??? */
AM_RANGE(0xa002, 0xa002) AM_WRITE(exctsccr_gfx_bank_w)
AM_RANGE(0xa003, 0xa003) AM_WRITE(exctsccr_flipscreen_w)
AM_RANGE(0xa006, 0xa006) AM_WRITENOP /* MCU is not used, but some leftover code still writes here */
AM_RANGE(0xa007, 0xa007) AM_WRITENOP /* MCU is not used, but some leftover code still writes here */
AM_RANGE(0xa040, 0xa06f) AM_WRITE(SMH_RAM) AM_BASE(&spriteram) /* Sprite Pos */
AM_RANGE(0xa080, 0xa080) AM_WRITE(soundlatch_w)
AM_RANGE(0xa0c0, 0xa0c0) AM_WRITE(watchdog_reset_w)
AM_RANGE(0xa000, 0xa000) AM_READ(input_port_0_r)
AM_RANGE(0xa040, 0xa040) AM_READ(input_port_1_r)
AM_RANGE(0xa080, 0xa080) AM_READ(input_port_2_r) // FIXME use champbas_dsw_r
AM_RANGE(0xa0c0, 0xa0c0) AM_READ(input_port_3_r)
ADDRESS_MAP_END
static ADDRESS_MAP_START( bl_sound_map, ADDRESS_SPACE_PROGRAM, 8 )
AM_RANGE(0x0000, 0x5fff) AM_ROM
AM_RANGE(0x6000, 0x6000) AM_READ(soundlatch_r)
// AM_RANGE(0x8000, 0x8000) AM_WRITENOP /* 0 = DAC sound off, 1 = DAC sound on */
AM_RANGE(0xa000, 0xa000) AM_WRITE(soundlatch_clear_w)
AM_RANGE(0xc000, 0xc000) AM_WRITE(exctsccr_DAC_data_w)
AM_RANGE(0xe000, 0xe3ff) AM_RAM
ADDRESS_MAP_END
/***************************************************************************
Input port(s)
***************************************************************************/
static INPUT_PORTS_START( exctsccr )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_COCKTAIL
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_8WAY PORT_COCKTAIL
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_8WAY PORT_COCKTAIL
PORT_START /* DSW0 */
PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coinage ) )
PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x03, "A 1C/1C B 3C/1C" )
PORT_DIPSETTING( 0x01, "A 1C/2C B 1C/4C" )
PORT_DIPSETTING( 0x00, "A 1C/3C B 1C/6C" )
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Demo_Sounds ) )
PORT_DIPSETTING( 0x04, DEF_STR( Off ) )
PORT_DIPSETTING( 0x00, DEF_STR( On ) )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Cabinet ) )
PORT_DIPSETTING( 0x00, DEF_STR( Upright ) )
PORT_DIPSETTING( 0x08, DEF_STR( Cocktail ) )
PORT_DIPNAME( 0x10, 0x10, DEF_STR( Difficulty ) )
PORT_DIPSETTING( 0x10, DEF_STR( Easy ) )
PORT_DIPSETTING( 0x00, DEF_STR( Hard ) )
PORT_DIPNAME( 0x60, 0x00, DEF_STR( Game_Time ) )
PORT_DIPSETTING( 0x20, "1 Min." )
PORT_DIPSETTING( 0x00, "2 Min." )
PORT_DIPSETTING( 0x60, "3 Min." )
PORT_DIPSETTING( 0x40, "4 Min." )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_SPECIAL ) // bit 2 of the watchdog counter
PORT_START /* IN2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
INPUT_PORTS_END
/***************************************************************************
Graphic(s) decoding
***************************************************************************/
static const gfx_layout charlayout_3bpp =
{
8,8,
RGN_FRAC(1,2),
3,
{ RGN_FRAC(1,2)+4, 0, 4 },
{ STEP4(8*8,1), STEP4(0,1) },
{ STEP8(0,8) },
16*8
};
static const gfx_layout spritelayout_3bpp =
{
16,16,
RGN_FRAC(1,2),
3,
{ RGN_FRAC(1,2)+4, 0, 4 },
{ STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0,1) },
{ STEP8(0,8), STEP8(32*8,8) },
64*8
};
static const gfx_layout spritelayout_4bpp =
{
16,16,
RGN_FRAC(1,2),
4,
{ RGN_FRAC(1,2)+0, RGN_FRAC(1,2)+4, 0, 4 },
{ STEP4(8*8,1), STEP4(16*8,1), STEP4(24*8,1), STEP4(0,1) },
{ STEP8(0,8), STEP8(32*8,8) },
64*8
};
static GFXDECODE_START( exctsccr )
GFXDECODE_ENTRY( REGION_GFX1, 0, charlayout_3bpp, 0x000, 0x080/8 ) /* chars */
GFXDECODE_ENTRY( REGION_GFX2, 0, spritelayout_3bpp, 0x080, 0x080/8 ) /* sprites */
GFXDECODE_ENTRY( REGION_GFX3, 0, spritelayout_4bpp, 0x100, 0x100/16 ) /* sprites */
GFXDECODE_END
/***************************************************************************
Machine driver(s)
***************************************************************************/
static MACHINE_DRIVER_START( exctsccr )
/* basic machine hardware */
MDRV_CPU_ADD(Z80, 4000000) /* 4.0 MHz (?) */
MDRV_CPU_PROGRAM_MAP(main_map,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
MDRV_CPU_ADD(Z80, 4123456) /* ??? with 4 MHz, nested NMIs might happen */
MDRV_CPU_PROGRAM_MAP(sub_map,0)
MDRV_CPU_IO_MAP(0,sound_writeport)
MDRV_CPU_PERIODIC_INT(nmi_line_pulse, 4000) /* 4 kHz, updates the dac */
/* MCU */
MDRV_CPU_ADD(ALPHA8301, 4000000/8)
MDRV_CPU_PROGRAM_MAP(mcu_map,0)
MDRV_MACHINE_START(exctsccr)
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(32*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MDRV_GFXDECODE(exctsccr)
MDRV_PALETTE_LENGTH(0x200)
MDRV_PALETTE_INIT(exctsccr)
MDRV_VIDEO_START(exctsccr)
MDRV_VIDEO_UPDATE(exctsccr)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(AY8910, 1500000)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.08)
MDRV_SOUND_ADD(DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
MDRV_SOUND_ADD(DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
MACHINE_DRIVER_END
/* Bootleg on a modified Championship Baseball board */
static MACHINE_DRIVER_START( exctsccb )
/* basic machine hardware */
MDRV_CPU_ADD(Z80, XTAL_18_432MHz/6)
MDRV_CPU_PROGRAM_MAP(bl_map,0)
MDRV_CPU_VBLANK_INT("main", irq0_line_hold)
MDRV_CPU_ADD(Z80, XTAL_18_432MHz/6)
MDRV_CPU_PROGRAM_MAP(bl_sound_map,0)
/* video hardware */
MDRV_SCREEN_ADD("main", RASTER)
MDRV_SCREEN_REFRESH_RATE(60)
MDRV_SCREEN_FORMAT(BITMAP_FORMAT_INDEXED16)
MDRV_SCREEN_SIZE(32*8, 32*8)
MDRV_SCREEN_VISIBLE_AREA(0*8, 32*8-1, 2*8, 30*8-1)
MDRV_GFXDECODE(exctsccr)
MDRV_PALETTE_LENGTH(0x200)
MDRV_PALETTE_INIT(exctsccr)
MDRV_VIDEO_START(exctsccr)
MDRV_VIDEO_UPDATE(exctsccr)
/* sound hardware */
MDRV_SPEAKER_STANDARD_MONO("mono")
MDRV_SOUND_ADD(AY8910, XTAL_18_432MHz/12)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.15)
MDRV_SOUND_ADD(DAC, 0)
MDRV_SOUND_ROUTE(ALL_OUTPUTS, "mono", 0.30)
MACHINE_DRIVER_END
/***************************************************************************
Game driver(s)
***************************************************************************/
ROM_START( exctsccr )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "1_g10.bin", 0x0000, 0x2000, CRC(aa68df66) SHA1(f10cac5a4c5aad1e1eb8835174dc8d517bb2921a) )
ROM_LOAD( "2_h10.bin", 0x2000, 0x2000, CRC(2d8f8326) SHA1(8809e7b081fa2a1966cb51ac969fd7b468d35be0) )
ROM_LOAD( "3_j10.bin", 0x4000, 0x2000, CRC(dce4a04d) SHA1(9c015e4597ec8921bea213d9841fc69c776a4e6d) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "0_h6.bin", 0x0000, 0x2000, CRC(3babbd6b) SHA1(b81bd47c4449f4f21f2d55d01eb9cb6db10664c7) )
ROM_LOAD( "9_f6.bin", 0x2000, 0x2000, CRC(639998f5) SHA1(c4ff5e5e75d53dea38449f323186d08d5b57bf90) )
ROM_LOAD( "8_d6.bin", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
ROM_LOAD( "7_c6.bin", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
ROM_LOAD( "1_a6.bin", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "4_a5.bin", 0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
ROM_LOAD( "6_c5.bin", 0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "5_b5.bin", 0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "2_k5.bin", 0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
ROM_LOAD( "3_l5.bin", 0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom2.8r", 0x0020, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_LOAD( "prom3.k5", 0x0120, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_END
ROM_START( exctscca )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "1_g10.bin", 0x0000, 0x2000, CRC(aa68df66) SHA1(f10cac5a4c5aad1e1eb8835174dc8d517bb2921a) )
ROM_LOAD( "2_h10.bin", 0x2000, 0x2000, CRC(2d8f8326) SHA1(8809e7b081fa2a1966cb51ac969fd7b468d35be0) )
ROM_LOAD( "3_j10.bin", 0x4000, 0x2000, CRC(dce4a04d) SHA1(9c015e4597ec8921bea213d9841fc69c776a4e6d) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "exctsccc.000", 0x0000, 0x2000, CRC(642fc42f) SHA1(cfc849d18e347e3e23fc31c1ce7f2580d5d9b2b0) )
ROM_LOAD( "exctsccc.009", 0x2000, 0x2000, CRC(d88b3236) SHA1(80f083fb15243e9e68978677caed8aee8e3109a0) )
ROM_LOAD( "8_d6.bin", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) )
ROM_LOAD( "7_c6.bin", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) )
ROM_LOAD( "1_a6.bin", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) )
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "4_a5.bin", 0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
ROM_LOAD( "6_c5.bin", 0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "5_b5.bin", 0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "2_k5.bin", 0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
ROM_LOAD( "3_l5.bin", 0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom2.8r", 0x0020, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_LOAD( "prom3.k5", 0x0120, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_END
/* Bootleg */
ROM_START( exctsccb )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "es-1.e2", 0x0000, 0x2000, CRC(997c6a82) SHA1(60fe27a12eedd22c775b7e65c5ba692cfcf5ac74) )
ROM_LOAD( "es-2.g2", 0x2000, 0x2000, CRC(5c66e792) SHA1(f7a7f32806965fa926261217cee3159ccd198d49) )
ROM_LOAD( "es-3.h2", 0x4000, 0x2000, CRC(e0d504c0) SHA1(d9a9f37b3a44a05a3f3389aa9617c419a2cee661) )
ROM_REGION( 0x10000, REGION_CPU2, 0 ) /* sound */
ROM_LOAD( "es-a.k2", 0x0000, 0x2000, CRC(99e87b78) SHA1(f12006ff3f6f3c706e06288c97a1446141373432) )
ROM_LOAD( "es-b.l2", 0x2000, 0x2000, CRC(8b3db794) SHA1(dbfed2357c7631bfca6bbd63a23617bc3abf6ca3) )
ROM_LOAD( "es-c.m2", 0x4000, 0x2000, CRC(7bed2f81) SHA1(cbbb0480519cc04a99e8983228b18c9e49a9985d) )
/* the national flags are wrong. This happens on the real board */
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "4_a5.bin", 0x0000, 0x2000, CRC(c342229b) SHA1(a989d6c12521c77882a7e17d4d80afe7eae05906) ) /* planes 0,1 */
ROM_LOAD( "6_c5.bin", 0x2000, 0x2000, CRC(eda40e32) SHA1(6c08fd4f4fb35fd354d02e04548e960c545f6a88) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "5_b5.bin", 0x0000, 0x2000, CRC(35f4f8c9) SHA1(cdf5bbfea9abdd338938e5f4499d2d71ce3c6237) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "2_k5.bin", 0x0000, 0x1000, CRC(7f9cace2) SHA1(bf05a31716f3ca1c2fd1034cd1f39e2d21cdaed3) )
ROM_LOAD( "3_l5.bin", 0x1000, 0x1000, CRC(db2d9e0d) SHA1(6ec09a47f7aea6bf31eb0ee78f44012f4d92de8a) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom2.8r", 0x0020, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_LOAD( "prom3.k5", 0x0120, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_END
ROM_START( exctscc2 )
ROM_REGION( 0x10000, REGION_CPU1, 0 )
ROM_LOAD( "vr.3j", 0x0000, 0x2000, CRC(c6115362) SHA1(6a258631abd72ef6b8d7968bb4b2bc88e89e597d) )
ROM_LOAD( "vr.3k", 0x2000, 0x2000, CRC(de36ba00) SHA1(0a0d92e710b8c749f145571bc8a204609456d19d) )
ROM_LOAD( "vr.3l", 0x4000, 0x2000, CRC(1ddfdf65) SHA1(313d0a7f13fc2de15aa32492c38a59fbafad9f01) )
ROM_REGION( 0x10000, REGION_CPU2, 0 )
ROM_LOAD( "vr.7d", 0x0000, 0x2000, CRC(2c675a43) SHA1(aa0a8dbcae955e3da92c435202f2a1ed238c377e) )
ROM_LOAD( "vr.7e", 0x2000, 0x2000, CRC(e571873d) SHA1(2dfff24f5dac86e92612f40cf3642005c7f36ad3) )
ROM_LOAD( "8_d6.bin", 0x4000, 0x2000, CRC(88651ee1) SHA1(2052e1b3f9784439369f464e31f4a2b0d1bb0565) ) /* vr.7f */
ROM_LOAD( "7_c6.bin", 0x6000, 0x2000, CRC(6d51521e) SHA1(2809bd2e61f40dcd31d43c62520982bdcfb0a865) ) /* vr.7h */
ROM_LOAD( "1_a6.bin", 0x8000, 0x1000, CRC(20f2207e) SHA1(b1ed2237d0bd50ddbe593fd2fbff9f1d67c1eb11) ) /* vr.7k */
ROM_REGION( 0x04000, REGION_GFX1, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only chars
ROM_LOAD( "vr.5a", 0x0000, 0x2000, CRC(4ff1783d) SHA1(c45074864c3a4bcbf3a87d164027ae16dca53d9c) ) /* planes 0,1 */
ROM_LOAD( "vr.5c", 0x2000, 0x2000, CRC(1fb84ee6) SHA1(56ceb86c509be783f806403ac21e7c9684760d5f) ) /* plane 3 */
ROM_REGION( 0x04000, REGION_GFX2, ROMREGION_DISPOSE ) // 3bpp chars + sprites: rearranged by DRIVER_INIT to leave only sprites
ROM_LOAD( "vr.5b", 0x0000, 0x2000, CRC(5605b60b) SHA1(19d5909896ae4a3d7552225c369d30475c56793b) ) /* planes 0,1 */
ROM_REGION( 0x02000, REGION_GFX3, ROMREGION_DISPOSE ) // 4bpp sprites
ROM_LOAD( "vr.5k", 0x0000, 0x1000, CRC(1d37edfa) SHA1(184fa6dd7b1b3fff4c5fc19b42301ccb7979ac84) )
ROM_LOAD( "vr.5l", 0x1000, 0x1000, CRC(b97f396c) SHA1(4ffe512acf047230bd593911a615fc0ef66b481d) )
ROM_REGION( 0x0220, REGION_PROMS, 0 )
ROM_LOAD( "prom1.e1", 0x0000, 0x0020, CRC(d9b10bf0) SHA1(bc1263331968f4bf37eb70ec4f56a8cb763c29d2) ) /* palette */
ROM_LOAD( "prom2.8r", 0x0020, 0x0100, CRC(8a9c0edf) SHA1(8aad387e9409cff0eeb42eeb57e9ea88770a8c9a) ) /* lookup table */
ROM_LOAD( "prom3.k5", 0x0120, 0x0100, CRC(b5db1c2c) SHA1(900aaaac6b674a9c5c7b7804a4b0c3d5cce761aa) ) /* lookup table */
ROM_END
static DRIVER_INIT( exctsccr )
{
// chars and sprites are mixed in the same ROMs, so rearrange them for easier decoding
UINT8 *rom1 = memory_region(machine, REGION_GFX1);
UINT8 *rom2 = memory_region(machine, REGION_GFX2);
int i;
// planes 0,1
for (i = 0; i < 0x1000; ++i)
{
UINT8 t = rom1[i + 0x1000];
rom1[i + 0x1000] = rom2[i];
rom2[i] = t;
}
// plane 3
for (i = 0; i < 0x1000; ++i)
{
rom2[i + 0x3000] = rom1[i + 0x3000] >> 4;
rom2[i + 0x2000] = rom1[i + 0x3000] & 0x0f;
}
for (i = 0; i < 0x1000; ++i)
{
rom1[i + 0x3000] = rom1[i + 0x2000] >> 4;
rom1[i + 0x2000] &= 0x0f;
}
}
GAME( 1983, exctsccr, 0, exctsccr, exctsccr, exctsccr, ROT90, "Alpha Denshi Co.", "Exciting Soccer", 0 )
GAME( 1983, exctscca, exctsccr, exctsccr, exctsccr, exctsccr, ROT90, "Alpha Denshi Co.", "Exciting Soccer (alternate music)", 0 )
GAME( 1983, exctsccb, exctsccr, exctsccb, exctsccr, exctsccr, ROT90, "bootleg", "Exciting Soccer (bootleg)", 0 )
GAME( 1984, exctscc2, 0 , exctsccr, exctsccr, exctsccr, ROT90, "Alpha Denshi Co.", "Exciting Soccer II", GAME_IMPERFECT_GRAPHICS )

View File

@ -446,7 +446,6 @@ $(MAMEOBJ)/alpha.a: \
$(DRIVERS)/alpha68k.o $(VIDEO)/alpha68k.o \
$(DRIVERS)/champbas.o $(VIDEO)/champbas.o \
$(DRIVERS)/equites.o $(VIDEO)/equites.o \
$(DRIVERS)/exctsccr.o $(VIDEO)/exctsccr.o \
$(DRIVERS)/meijinsn.o \
$(DRIVERS)/shougi.o \

View File

@ -72,18 +72,79 @@ PALETTE_INIT( champbas )
for (i = 0; i < 0x200; i++)
{
UINT8 ctabentry = ((i & 0x100) >> 4) | (color_prom[i & 0xff] & 0x0f);
UINT8 ctabentry = (color_prom[i & 0xff] & 0x0f) | ((i & 0x100) >> 4);
colortable_entry_set_value(machine->colortable, i, ctabentry);
}
}
PALETTE_INIT( exctsccr )
{
int i;
/* allocate the colortable */
machine->colortable = colortable_alloc(machine, 0x20);
/* create a lookup table for the palette */
for (i = 0; i < 0x20; i++)
{
int bit0, bit1, bit2;
int r, g, b;
/* red component */
bit0 = (color_prom[i] >> 0) & 0x01;
bit1 = (color_prom[i] >> 1) & 0x01;
bit2 = (color_prom[i] >> 2) & 0x01;
r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
/* green component */
bit0 = (color_prom[i] >> 3) & 0x01;
bit1 = (color_prom[i] >> 4) & 0x01;
bit2 = (color_prom[i] >> 5) & 0x01;
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
/* blue component */
bit0 = 0;
bit1 = (color_prom[i] >> 6) & 0x01;
bit2 = (color_prom[i] >> 7) & 0x01;
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b));
}
/* color_prom now points to the beginning of the lookup table */
color_prom += 0x20;
/* characters / sprites (3bpp) */
for (i = 0; i < 0x100; i++)
{
int swapped_i = BITSWAP8(i,2,7,6,5,4,3,1,0);
UINT8 ctabentry = (color_prom[swapped_i] & 0x0f) | ((i & 0x80) >> 3);
colortable_entry_set_value(machine->colortable, i, ctabentry);
}
/* sprites (4bpp) */
for (i = 0; i < 0x100; i++)
{
UINT8 ctabentry = (color_prom[0x100 + i] & 0x0f) | 0x10;
colortable_entry_set_value(machine->colortable, i + 0x100, ctabentry);
}
}
static TILE_GET_INFO( get_bg_tile_info )
static TILE_GET_INFO( champbas_get_bg_tile_info )
{
int code = champbas_bg_videoram[tile_index] | (gfx_bank << 8);
int color = (champbas_bg_videoram[tile_index + 0x400] & 0x1f) | 0x20 | (palette_bank << 6);
int color = (champbas_bg_videoram[tile_index + 0x400] & 0x1f) | 0x20;
SET_TILE_INFO(0, code, color, 0);
}
static TILE_GET_INFO( exctsccr_get_bg_tile_info )
{
int code = champbas_bg_videoram[tile_index] | (gfx_bank << 8);
int color = champbas_bg_videoram[tile_index + 0x400] & 0x0f;
SET_TILE_INFO(0, code, color, 0);
}
@ -92,13 +153,17 @@ static TILE_GET_INFO( get_bg_tile_info )
VIDEO_START( champbas )
{
bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
bg_tilemap = tilemap_create(champbas_get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
// talbot has only 1 bank
gfx_bank = 0;
palette_bank = 0;
}
VIDEO_START( exctsccr )
{
bg_tilemap = tilemap_create(exctsccr_get_bg_tile_info, tilemap_scan_rows, 8, 8, 32, 32);
}
@ -120,12 +185,8 @@ WRITE8_HANDLER( champbas_gfxbank_w )
WRITE8_HANDLER( champbas_palette_bank_w )
{
data &= 1;
if (palette_bank != data)
{
palette_bank = data;
tilemap_mark_all_tiles_dirty(bg_tilemap);
}
palette_bank = data & 1;
tilemap_set_palette_offset(bg_tilemap, palette_bank << 8);
}
WRITE8_HANDLER( champbas_flipscreen_w )
@ -135,7 +196,7 @@ WRITE8_HANDLER( champbas_flipscreen_w )
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
static void champbas_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
int offs;
const gfx_element* const gfx = machine->gfx[1];
@ -168,11 +229,74 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
}
}
static void exctsccr_draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
int offs;
UINT8 *obj1, *obj2;
obj1 = champbas_bg_videoram;
obj2 = &(spriteram[0x20]);
for ( offs = 0x0e; offs >= 0; offs -= 2 )
{
int sx,sy,code,bank,flipx,flipy,color;
sx = obj2[offs+1] - 16;
sy = 255 - obj2[offs];
code = ( obj1[offs] >> 2 ) & 0x3f;
flipx = ( ~obj1[offs] ) & 0x01;
flipy = ( ~obj1[offs] ) & 0x02;
color = ( obj1[offs+1] ) & 0x0f;
bank = ( ( obj1[offs+1] >> 4 ) & 1 );
drawgfx(bitmap,machine->gfx[1],
code + (bank << 6),
color,
flipx, flipy,
sx,sy,
cliprect,
TRANSPARENCY_PEN,0);
}
obj1 = spriteram_2;
obj2 = spriteram;
for ( offs = 0x0e; offs >= 0; offs -= 2 )
{
int sx,sy,code,flipx,flipy,color;
sx = obj2[offs+1] - 16;
sy = 255 - obj2[offs];
code = ( obj1[offs] >> 2 ) & 0x3f;
flipx = ( ~obj1[offs] ) & 0x01;
flipy = ( ~obj1[offs] ) & 0x02;
color = ( obj1[offs+1] ) & 0x0f;
drawgfx(bitmap,machine->gfx[2],
code,
color,
flipx, flipy,
sx,sy,
cliprect,
TRANSPARENCY_PENS,
colortable_get_transpen_mask(machine->colortable, machine->gfx[2], color, 0x10));
}
}
VIDEO_UPDATE( champbas )
{
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect);
champbas_draw_sprites(screen->machine, bitmap, cliprect);
return 0;
}
VIDEO_UPDATE( exctsccr )
{
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
exctsccr_draw_sprites(screen->machine, bitmap, cliprect);
return 0;
}

View File

@ -1,176 +0,0 @@
#include "driver.h"
static int gfx_bank;
static tilemap *bg_tilemap;
/***************************************************************************
Convert the color PROMs into a more useable format.
***************************************************************************/
PALETTE_INIT( exctsccr )
{
int i;
/* allocate the colortable */
machine->colortable = colortable_alloc(machine, 0x20);
/* create a lookup table for the palette */
for (i = 0; i < 0x20; i++)
{
int bit0, bit1, bit2;
int r, g, b;
/* red component */
bit0 = (color_prom[i] >> 0) & 0x01;
bit1 = (color_prom[i] >> 1) & 0x01;
bit2 = (color_prom[i] >> 2) & 0x01;
r = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
/* green component */
bit0 = (color_prom[i] >> 3) & 0x01;
bit1 = (color_prom[i] >> 4) & 0x01;
bit2 = (color_prom[i] >> 5) & 0x01;
g = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
/* blue component */
bit0 = 0;
bit1 = (color_prom[i] >> 6) & 0x01;
bit2 = (color_prom[i] >> 7) & 0x01;
b = 0x21 * bit0 + 0x47 * bit1 + 0x97 * bit2;
colortable_palette_set_color(machine->colortable, i, MAKE_RGB(r, g, b));
}
/* color_prom now points to the beginning of the lookup table */
color_prom += 0x20;
/* characters */
for (i = 0; i < 0x100; i++)
{
int swapped_i = BITSWAP8(i,2,7,6,5,4,3,1,0);
UINT8 ctabentry = color_prom[0x100 + swapped_i];
colortable_entry_set_value(machine->colortable, i, ctabentry);
}
/* sprites */
for (i = 0x80; i < 0x100; i++)
{
int swapped_i = BITSWAP8(i,2,7,6,5,4,3,1,0);
UINT8 ctabentry = color_prom[0x100 + swapped_i] | 0x10;
colortable_entry_set_value(machine->colortable, i, ctabentry);
}
/* sprites */
for (i = 0; i < 0x100; i++)
{
UINT8 ctabentry = color_prom[i] | 0x10;
colortable_entry_set_value(machine->colortable, i + 0x100, ctabentry);
}
}
WRITE8_HANDLER( exctsccr_videoram_w )
{
videoram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset);
}
WRITE8_HANDLER( exctsccr_colorram_w )
{
colorram[offset] = data;
tilemap_mark_tile_dirty(bg_tilemap, offset);
}
WRITE8_HANDLER( exctsccr_gfx_bank_w )
{
data &= 0x01;
if (gfx_bank != data)
{
gfx_bank = data;
tilemap_mark_all_tiles_dirty(ALL_TILEMAPS);
}
}
WRITE8_HANDLER( exctsccr_flipscreen_w )
{
flip_screen_set(data & 0x01);
}
static TILE_GET_INFO( get_bg_tile_info )
{
int code = videoram[tile_index];
int color = colorram[tile_index] & 0x0f;
SET_TILE_INFO(0, code + (gfx_bank << 8), color, 0);
}
VIDEO_START( exctsccr )
{
bg_tilemap = tilemap_create(get_bg_tile_info, tilemap_scan_rows,
8, 8, 32, 32);
}
static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const rectangle *cliprect)
{
int offs;
UINT8 *OBJ1, *OBJ2;
OBJ1 = videoram;
OBJ2 = &(spriteram[0x20]);
for ( offs = 0x0e; offs >= 0; offs -= 2 )
{
int sx,sy,code,bank,flipx,flipy,color;
sx = 256 - OBJ2[offs+1];
sy = OBJ2[offs] - 16;
code = ( OBJ1[offs] >> 2 ) & 0x3f;
flipx = ( OBJ1[offs] ) & 0x01;
flipy = ( OBJ1[offs] ) & 0x02;
color = ( OBJ1[offs+1] ) & 0x0f;
bank = ( ( OBJ1[offs+1] >> 4 ) & 1 );
drawgfx(bitmap,machine->gfx[1],
code + (bank << 6),
color,
flipx, flipy,
sx,sy,
cliprect,
TRANSPARENCY_PEN,0);
}
OBJ1 = spriteram_2;
OBJ2 = spriteram;
for ( offs = 0x0e; offs >= 0; offs -= 2 )
{
int sx,sy,code,flipx,flipy,color;
sx = 256 - OBJ2[offs+1];
sy = OBJ2[offs] - 16;
code = ( OBJ1[offs] >> 2 ) & 0x3f;
flipx = ( OBJ1[offs] ) & 0x01;
flipy = ( OBJ1[offs] ) & 0x02;
color = ( OBJ1[offs+1] ) & 0x0f;
drawgfx(bitmap,machine->gfx[2],
code,
color,
flipx, flipy,
sx,sy,
cliprect,
TRANSPARENCY_PENS,
colortable_get_transpen_mask(machine->colortable, machine->gfx[2], color, 0x10));
}
}
VIDEO_UPDATE( exctsccr )
{
tilemap_draw(bitmap, cliprect, bg_tilemap, 0, 0);
draw_sprites(screen->machine, bitmap, cliprect);
return 0;
}