?? exctsccr.c
字號:
/***************************************************************************
Exciting Soccer - (c) 1983 Alpha Denshi Co.
Supported sets:
Exciting Soccer - Alpha Denshi
Exciting Soccer (bootleg) - Kazutomi
Preliminary driver by:
Ernesto Corvi
ernesto@imagina.com
Jarek Parchanski
jpdev@friko6.onet.pl
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.
KNOWN ISSUES/TODO:
- Cocktail mode is unsupported.
***************************************************************************/
#include "driver.h"
#include "vidhrdw/generic.h"
/* from vidhrdw */
extern void exctsccr_vh_screenrefresh(struct osd_bitmap *bitmap, int full_refresh);
extern void exctsccr_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
extern void exctsccr_gfx_bank_w( int offset, int data );
extern int exctsccr_vh_start( void );
extern void exctsccr_vh_stop( void );
/* from machine */
extern unsigned char *exctsccr_mcu_ram;
extern void exctsccr_mcu_w( int offs, int data );
extern void exctsccr_mcu_control_w( int offs, int data );
void exctsccr_DAC_data_w(int offset,int data)
{
DAC_signed_data_w(offset,data << 2);
}
/***************************************************************************
Memory definition(s)
***************************************************************************/
static struct MemoryReadAddress readmem[] =
{
{ 0x0000, 0x5fff, MRA_ROM },
{ 0x6000, 0x63ff, MRA_RAM }, /* Alpha mcu (protection) */
{ 0x7c00, 0x7fff, MRA_RAM }, /* work ram */
{ 0x8000, 0x83ff, videoram_r },
{ 0x8400, 0x87ff, colorram_r },
{ 0x8800, 0x8bff, MRA_RAM }, /* ??? */
{ 0xa000, 0xa000, input_port_0_r },
{ 0xa040, 0xa040, input_port_1_r },
{ 0xa080, 0xa080, input_port_3_r },
{ 0xa0c0, 0xa0c0, input_port_2_r },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress writemem[] =
{
{ 0x0000, 0x5fff, MWA_ROM },
{ 0x6000, 0x63ff, exctsccr_mcu_w, &exctsccr_mcu_ram }, /* Alpha mcu (protection) */
{ 0x7c00, 0x7fff, MWA_RAM }, /* work ram */
{ 0x8000, 0x83ff, videoram_w, &videoram, &videoram_size },
{ 0x8400, 0x87ff, colorram_w, &colorram },
{ 0x8800, 0x8bff, MWA_RAM }, /* ??? */
{ 0xa000, 0xa000, MWA_NOP }, /* ??? */
{ 0xa001, 0xa001, MWA_NOP }, /* ??? */
{ 0xa002, 0xa002, exctsccr_gfx_bank_w },
{ 0xa003, 0xa003, MWA_NOP }, /* Cocktail mode ( 0xff = flip screen, 0x00 = normal ) */
{ 0xa006, 0xa006, exctsccr_mcu_control_w }, /* MCU control */
{ 0xa007, 0xa007, MWA_NOP }, /* This is also MCU control, but i dont need it */
{ 0xa040, 0xa06f, MWA_RAM, &spriteram }, /* Sprite pos */
{ 0xa080, 0xa080, soundlatch_w },
{ 0xa0c0, 0xa0c0, watchdog_reset_w },
{ -1 } /* end of table */
};
static struct MemoryReadAddress sound_readmem[] =
{
{ 0x0000, 0x8fff, MRA_ROM },
{ 0xa000, 0xa7ff, MRA_RAM },
{ 0xc00d, 0xc00d, soundlatch_r },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress sound_writemem[] =
{
{ 0x0000, 0x8fff, MWA_ROM },
{ 0xa000, 0xa7ff, MWA_RAM },
{ 0xc008, 0xc009, exctsccr_DAC_data_w },
{ 0xc00c, 0xc00c, soundlatch_w }, /* used to clear the latch */
{ 0xc00f, 0xc00f, MWA_NOP }, /* ??? */
{ -1 } /* end of table */
};
static struct IOWritePort sound_writeport[] =
{
{ 0x82, 0x82, AY8910_write_port_0_w },
{ 0x83, 0x83, AY8910_control_port_0_w },
{ 0x86, 0x86, AY8910_write_port_1_w },
{ 0x87, 0x87, AY8910_control_port_1_w },
{ 0x8a, 0x8a, AY8910_write_port_2_w },
{ 0x8b, 0x8b, AY8910_control_port_2_w },
{ 0x8e, 0x8e, AY8910_write_port_3_w },
{ 0x8f, 0x8f, AY8910_control_port_3_w },
{ -1 } /* end of table */
};
/* Bootleg */
static struct MemoryReadAddress bl_readmem[] =
{
{ 0x0000, 0x5fff, MRA_ROM },
{ 0x8000, 0x83ff, videoram_r },
{ 0x8400, 0x87ff, colorram_r },
{ 0x8800, 0x8fff, MRA_RAM }, /* ??? */
{ 0xa000, 0xa000, input_port_0_r },
{ 0xa040, 0xa040, input_port_1_r },
{ 0xa080, 0xa080, input_port_3_r },
{ 0xa0c0, 0xa0c0, input_port_2_r },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress bl_writemem[] =
{
{ 0x0000, 0x5fff, MWA_ROM },
{ 0x7000, 0x7000, AY8910_write_port_0_w },
{ 0x7001, 0x7001, AY8910_control_port_0_w },
{ 0x8000, 0x83ff, videoram_w, &videoram, &videoram_size },
{ 0x8400, 0x87ff, colorram_w, &colorram },
{ 0x8800, 0x8fff, MWA_RAM }, /* ??? */
{ 0xa000, 0xa000, MWA_NOP }, /* ??? */
{ 0xa001, 0xa001, MWA_NOP }, /* ??? */
{ 0xa002, 0xa002, exctsccr_gfx_bank_w }, /* ??? */
{ 0xa003, 0xa003, MWA_NOP }, /* Cocktail mode ( 0xff = flip screen, 0x00 = normal ) */
{ 0xa006, 0xa006, MWA_NOP }, /* no MCU, but some leftover code still writes here */
{ 0xa007, 0xa007, MWA_NOP }, /* no MCU, but some leftover code still writes here */
{ 0xa040, 0xa06f, MWA_RAM, &spriteram }, /* Sprite Pos */
{ 0xa080, 0xa080, soundlatch_w },
{ 0xa0c0, 0xa0c0, watchdog_reset_w },
{ -1 } /* end of table */
};
static struct MemoryReadAddress bl_sound_readmem[] =
{
{ 0x0000, 0x5fff, MRA_ROM },
{ 0x6000, 0x6000, soundlatch_r },
{ 0xe000, 0xe3ff, MRA_RAM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress bl_sound_writemem[] =
{
{ 0x0000, 0x5fff, MWA_ROM },
{ 0x8000, 0x8000, MWA_NOP }, /* 0 = DAC sound off, 1 = DAC sound on */
{ 0xa000, 0xa000, soundlatch_w }, /* used to clear the latch */
{ 0xc000, 0xc000, exctsccr_DAC_data_w },
{ 0xe000, 0xe3ff, MWA_RAM },
{ -1 } /* end of table */
};
/***************************************************************************
Input port(s)
***************************************************************************/
INPUT_PORTS_START( input_ports )
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_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_COCKTAIL )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT| IPF_COCKTAIL )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_COCKTAIL )
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 )
PORT_START /* DSW0 */
/* The next two overlap */
PORT_DIPNAME( 0x03, 0x03, "Coinage(Coin A)", IP_KEY_NONE )
PORT_DIPSETTING( 0x03, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x02, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x00, "1 Coin/3 Credits" )
PORT_DIPNAME( 0x03, 0x03, "Coinage(Coin B)", IP_KEY_NONE )
PORT_DIPSETTING( 0x03, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x02, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x01, "1 Coin/4 Credits" )
PORT_DIPSETTING( 0x00, "1 Coin/6 Credits" )
PORT_DIPNAME( 0x04, 0x00, "Demo Sounds", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x08, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x08, "Table" )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPNAME( 0x10, 0x10, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x10, "Easy" )
PORT_DIPSETTING( 0x00, "Hard" )
PORT_DIPNAME( 0x60, 0x00, "Game Time", IP_KEY_NONE )
PORT_DIPSETTING( 0x60, "3 Min." )
PORT_DIPSETTING( 0x40, "4 Min." )
PORT_DIPSETTING( 0x20, "1 Min." )
PORT_DIPSETTING( 0x00, "2 Min." )
PORT_BIT(0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* Has to be 0 */
INPUT_PORTS_END
/***************************************************************************
Graphic(s) decoding
***************************************************************************/
static struct GfxLayout charlayout1 =
{
8,8, /* 8*8 characters */
256, /* 256 characters */
3, /* 3 bits per pixel */
{ 0x4000*8+4, 0, 4 }, /* plane offset */
{ 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
16*8 /* every char takes 16 consecutive bytes */
};
static struct GfxLayout charlayout2 =
{
8,8, /* 8*8 characters */
256, /* 256 characters */
3, /* 3 bits per pixel */
{ 0x2000*8, 0, 4 }, /* plane offset */
{ 8*8+0, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
16*8 /* every char takes 16 consecutive bytes */
};
static struct GfxLayout spritelayout1 =
{
16,16, /* 16*16 sprites */
64, /* 64 sprites */
3, /* 3 bits per pixel */
{ 0x4000*8+4, 0, 4 }, /* plane offset */
{ 8*8, 8*8+1, 8*8+2, 8*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3,
24*8+0, 24*8+1, 24*8+2, 24*8+3, 0, 1, 2, 3 },
{ 0 * 8, 1 * 8, 2 * 8, 3 * 8, 4 * 8, 5 * 8, 6 * 8, 7 * 8,
32 * 8, 33 * 8, 34 * 8, 35 * 8, 36 * 8, 37 * 8, 38 * 8, 39 * 8 },
64*8 /* every sprite takes 64 bytes */
};
static struct GfxLayout spritelayout2 =
{
16,16, /* 16*16 sprites */
64, /* 64 sprites */
3, /* 3 bits per pixel */
{ 0x2000*8, 0, 4 }, /* plane offset */
{ 8*8, 8*8+1, 8*8+2, 8*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3,
24*8+0, 24*8+1, 24*8+2, 24*8+3, 0, 1, 2, 3 },
{ 0 * 8, 1 * 8, 2 * 8, 3 * 8, 4 * 8, 5 * 8, 6 * 8, 7 * 8,
32 * 8, 33 * 8, 34 * 8, 35 * 8, 36 * 8, 37 * 8, 38 * 8, 39 * 8 },
64*8 /* every sprite takes 64 bytes */
};
static struct GfxLayout spritelayout =
{
16,16, /* 16*16 sprites */
64, /* 64 sprites */
3, /* 2 bits per pixel */
{ 0x1000*8+4, 0, 4 }, /* plane offset */
{ 8*8, 8*8+1, 8*8+2, 8*8+3, 16*8+0, 16*8+1, 16*8+2, 16*8+3,
24*8+0, 24*8+1, 24*8+2, 24*8+3, 0, 1, 2, 3 },
{ 0 * 8, 1 * 8, 2 * 8, 3 * 8, 4 * 8, 5 * 8, 6 * 8, 7 * 8,
32 * 8, 33 * 8, 34 * 8, 35 * 8, 36 * 8, 37 * 8, 38 * 8, 39 * 8 },
64*8 /* every sprite takes 64 bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 1, 0x0000, &charlayout1, 0, 32 }, /* chars */
{ 1, 0x2000, &charlayout2, 0, 32 }, /* chars */
{ 1, 0x1000, &spritelayout1, 16*8, 32 }, /* sprites */
{ 1, 0x3000, &spritelayout2, 16*8, 32 }, /* sprites */
{ 1, 0x6000, &spritelayout, 16*8, 32 }, /* sprites */
{ -1 } /* end of array */
};
/***************************************************************************
Sound interface(s)
***************************************************************************/
static struct AY8910interface ay8910_interface =
{
4, /* 4 chips */
1500000, /* 1.5 MHz ? */
{ 15, 15, 15, 15 }, /* volume */
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -