📄 dec8.c
字号:
{ 0x2800, 0x2fff, MWA_RAM, &spriteram },
{ 0x3000, 0x37ff, dec8_share2_w },
{ 0x3800, 0x3fff, dec8_video_w },
{ 0x4000, 0xffff, MWA_ROM },
{ -1 } /* end of table */
};
static struct MemoryReadAddress csilver_readmem[] =
{
{ 0x0000, 0x0fff, dec8_share_r },
{ 0x1000, 0x17ff, MRA_RAM },
{ 0x1801, 0x1801, input_port_0_r },
{ 0x1803, 0x1803, input_port_2_r },
{ 0x1804, 0x1804, input_port_4_r }, /* Dip 2 */
{ 0x1805, 0x1805, input_port_3_r }, /* Dip 1 */
{ 0x1c00, 0x1c00, i8751_h_r },
{ 0x1e00, 0x1e00, i8751_l_r },
{ 0x2000, 0x27ff, shackled_video_r },
{ 0x2800, 0x2fff, shackled_sprite_r },
{ 0x3000, 0x37ff, dec8_share2_r },
{ 0x3800, 0x3fff, dec8_video_r },
{ 0x4000, 0x7fff, MRA_BANK1 },
{ 0x8000, 0xffff, MRA_ROM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress csilver_writemem[] =
{
{ 0x0000, 0x0fff, dec8_share_w, &dec8_shared_ram },
{ 0x1000, 0x13ff, paletteram_xxxxBBBBGGGGRRRR_split1_w, &paletteram },
{ 0x1400, 0x17ff, paletteram_xxxxBBBBGGGGRRRR_split2_w, &paletteram_2 },
{ 0x1800, 0x1804, shackled_int_w },
{ 0x1805, 0x1805, MWA_NOP }, /* DMA */
{ 0x1807, 0x1807, MWA_NOP }, /* Flipscreen */
{ 0x1808, 0x180b, dec8_scroll2_w },
{ 0x180c, 0x180c, oscar_sound_w },
{ 0x180d, 0x180d, csilver_control_w },
{ 0x180e, 0x180f, csilver_i8751_w },
{ 0x2000, 0x27ff, shackled_video_w },
{ 0x2800, 0x2fff, shackled_sprite_w },
{ 0x3000, 0x37ff, dec8_share2_w, &dec8_shared2_ram },
{ 0x3800, 0x3fff, dec8_video_w },
{ 0x4000, 0xffff, MWA_ROM },
{ -1 } /* end of table */
};
static struct MemoryReadAddress csilver_sub_readmem[] =
{
{ 0x0000, 0x0fff, dec8_share_r },
{ 0x1000, 0x17ff, MRA_RAM },
{ 0x1803, 0x1803, input_port_2_r },
{ 0x1804, 0x1804, input_port_4_r },
{ 0x1805, 0x1805, input_port_3_r },
{ 0x2000, 0x27ff, MRA_RAM },
{ 0x2800, 0x2fff, MRA_RAM },
{ 0x3000, 0x37ff, dec8_share2_r },
{ 0x3800, 0x3fff, dec8_video_r },
{ 0x4000, 0xffff, MRA_ROM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress csilver_sub_writemem[] =
{
{ 0x0000, 0x0fff, dec8_share_w },
{ 0x1000, 0x13ff, paletteram_xxxxBBBBGGGGRRRR_split1_w, &paletteram },
{ 0x1400, 0x17ff, paletteram_xxxxBBBBGGGGRRRR_split2_w, &paletteram_2 },
{ 0x1800, 0x1804, shackled_int_w },
{ 0x1805, 0x1805, MWA_NOP }, /* DMA */
{ 0x180c, 0x180c, oscar_sound_w },
{ 0x180d, 0x180d, lastmiss_control_w }, /* Bank switch + Scroll MSB */
{ 0x2000, 0x27ff, MWA_RAM, &videoram, &videoram_size },
{ 0x2800, 0x2fff, MWA_RAM, &spriteram },
{ 0x3000, 0x37ff, dec8_share2_w },
{ 0x3800, 0x3fff, dec8_video_w },
{ 0x4000, 0xffff, MWA_ROM },
{ -1 } /* end of table */
};
/******************************************************************************/
/* Used for Cobra Command, Maze Hunter, Super Real Darwin, Gondomania, etc */
static struct MemoryReadAddress dec8_s_readmem[] =
{
{ 0x0000, 0x05ff, MRA_RAM},
{ 0x6000, 0x6000, soundlatch_r },
{ 0x8000, 0xffff, MRA_ROM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress dec8_s_writemem[] =
{
{ 0x0000, 0x05ff, MWA_RAM},
{ 0x2000, 0x2000, YM2203_control_port_0_w }, /* OPN */
{ 0x2001, 0x2001, YM2203_write_port_0_w },
{ 0x4000, 0x4000, YM3812_control_port_0_w }, /* OPL */
{ 0x4001, 0x4001, YM3812_write_port_0_w },
{ 0x8000, 0xffff, MWA_ROM },
{ -1 } /* end of table */
};
/* Used by Last Mission, Shackled & Breywood */
static struct MemoryReadAddress ym3526_s_readmem[] =
{
{ 0x0000, 0x05ff, MRA_RAM},
{ 0x3000, 0x3000, soundlatch_r },
{ 0x8000, 0xffff, MRA_ROM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress ym3526_s_writemem[] =
{
{ 0x0000, 0x05ff, MWA_RAM},
{ 0x0800, 0x0800, YM2203_control_port_0_w }, /* OPN */
{ 0x0801, 0x0801, YM2203_write_port_0_w },
{ 0x1000, 0x1000, YM3526_control_port_0_w }, /* ? */
{ 0x1001, 0x1001, YM3526_write_port_0_w },
{ 0x8000, 0xffff, MWA_ROM },
{ -1 } /* end of table */
};
/* Captain Silver - same sound system as Pocket Gal */
static struct MemoryReadAddress csilver_s_readmem[] =
{
{ 0x0000, 0x07ff, MRA_RAM },
{ 0x3000, 0x3000, soundlatch_r },
{ 0x3400, 0x3400, csilver_adpcm_reset_r }, /* ? not sure */
{ 0x4000, 0x7fff, MRA_BANK3 },
{ 0x8000, 0xffff, MRA_ROM },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress csilver_s_writemem[] =
{
{ 0x0000, 0x07ff, MWA_RAM },
{ 0x0800, 0x0800, YM2203_control_port_0_w },
{ 0x0801, 0x0801, YM2203_write_port_0_w },
{ 0x1000, 0x1000, YM3812_control_port_0_w },
{ 0x1001, 0x1001, YM3812_write_port_0_w },
{ 0x1800, 0x1800, csilver_adpcm_data_w }, /* ADPCM data for the MSM5205 chip */
{ 0x2000, 0x2000, csilver_sound_bank_w },
{ 0x4000, 0xffff, MWA_ROM },
{ -1 } /* end of table */
};
/******************************************************************************/
#define PLAYER1_JOYSTICK /* Player 1 controls */ \
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY ) \
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY ) \
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY ) \
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
#define PLAYER2_JOYSTICK /* Player 2 controls */ \
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_COCKTAIL ) \
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_COCKTAIL ) \
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_COCKTAIL ) \
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_COCKTAIL )
INPUT_PORTS_START( input_ports )
PORT_START /* Player 1 controls */
PLAYER1_JOYSTICK
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START1 )
PORT_START /* Player 2 controls */
PLAYER2_JOYSTICK
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
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_VBLANK )
PORT_START /* Dip switch bank 1 */
PORT_DIPNAME( 0x03, 0x03, "Coin A", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x01, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x03, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x02, "1 Coin/2 Credits" )
PORT_DIPNAME( 0x0c, 0x0c, "Coin B", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "3 Coins/1 Credit" )
PORT_DIPSETTING( 0x04, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x0c, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x08, "1 Coin/2 Credits" )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Test mode on other games */
PORT_DIPNAME( 0x20, 0x20, "Demo Sounds", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x20, "On" )
PORT_DIPNAME( 0x40, 0x40, "Screen Rotation", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Normal" )
PORT_DIPSETTING( 0x00, "Reverse" )
PORT_DIPNAME( 0x80, 0x80, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Cocktail" )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_START /* Dip switch bank 2 */
PORT_DIPNAME( 0x03, 0x03, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "Infinite" )
PORT_BITX( 0, 0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite", IP_KEY_NONE, IP_JOY_NONE, 0 )
PORT_DIPNAME( 0x0c, 0x0c, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "Easy" )
PORT_DIPSETTING( 0x0c, "Normal" )
PORT_DIPSETTING( 0x08, "Hard" )
PORT_DIPSETTING( 0x00, "Hardest" )
PORT_DIPNAME( 0x10, 0x10, "Allow Continue", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "No" )
PORT_DIPSETTING( 0x10, "Yes" )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( ghostb_input_ports )
PORT_START /* Player 1 controls */
PLAYER1_JOYSTICK
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* Player 2 controls */
PLAYER2_JOYSTICK
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START /* Player 3 controls */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY | IPF_PLAYER3 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY | IPF_PLAYER3 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY | IPF_PLAYER3 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER3 )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER3 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER3 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_START3 )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_DIPNAME( 0x20, 0x20, "Attract Mode Sound", IP_KEY_NONE )
PORT_DIPSETTING( 0x20, "Yes" )
PORT_DIPSETTING( 0x00, "No" )
PORT_DIPNAME( 0x40, 0x40, "Screen Flip", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Normal" )
PORT_DIPSETTING( 0x00, "Inverted" )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START /* Dummy input for i8751 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN4 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN3 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_START /* Dip switch */
PORT_DIPNAME( 0x03, 0x03, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x01, "1" )
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x00, "Infinite" )
PORT_DIPNAME( 0x0c, 0x0c, "Difficulty", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "Easy" )
PORT_DIPSETTING( 0x0c, "Normal" )
PORT_DIPSETTING( 0x08, "Hard" )
PORT_DIPSETTING( 0x00, "Hardest" )
PORT_DIPNAME( 0x30, 0x30, "Scene Time", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "4.00" )
PORT_DIPSETTING( 0x10, "4.30" )
PORT_DIPSETTING( 0x30, "5.00" )
PORT_DIPSETTING( 0x20, "6.00" )
PORT_DIPNAME( 0x40, 0x00, "Allow Continue", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "No" )
PORT_DIPSETTING( 0x00, "Yes" )
PORT_DIPNAME( 0x80, 0x80, "Beam Energy Pickup", IP_KEY_NONE ) /* Ghostb only */
PORT_DIPSETTING( 0x00, "Up 1.5%" )
PORT_DIPSETTING( 0x80, "Normal" )
INPUT_PORTS_END
INPUT_PORTS_START( darwin_input_ports )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
PORT_START
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) /* Fake */
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_VBLANK )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_START
/* The bottom bits of this dip (coinage) are for the i8751 */
PORT_BIT( 0x0f, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNUSED ) /* Unused dip */
PORT_DIPNAME( 0x20, 0x20, "Attract Mode Sound", IP_KEY_NONE )
PORT_DIPSETTING( 0x20, "On" )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPNAME( 0x40, 0x40, "Screen Flip", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "Normal" )
PORT_DIPSETTING( 0x00, "Inverted" )
PORT_DIPNAME( 0x80, 0x80, "Unknown 7", IP_KEY_NONE )
PORT_DIPSETTING( 0x80, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_START
PORT_DIPNAME( 0x03, 0x03, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "27" )
PORT_DIPSETTING( 0x02, "5" )
PORT_DIPSETTING( 0x03, "2" )
PORT_DIPSETTING( 0x01, "1" )
PORT_DIPNAME( 0x04, 0x04, "Unknown 1", IP_KEY_NONE )
PORT_DIPSETTING( 0x04, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x08, 0x08, "Unknown 2", IP_KEY_NONE )
PORT_DIPSETTING( 0x08, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x10, 0x10, "Unknown 3", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x10, "On" )
PORT_DIPNAME( 0x20, 0x20, "Unknown 4", IP_KEY_NONE )
PORT_DIPSETTING( 0x20, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_DIPNAME( 0x40, 0x40, "Unknown 5", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x40, "On" )
PORT_DIPNAME( 0x80, 0x80, "Unknown 6", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x80, "On" )
INPUT_PORTS_END
INPUT_PORTS_START( gondo_input_ports )
PORT_START /* Player 1 controls */
PLAYER1_JOYSTICK
/* Top 4 bits are rotary controller */
PORT_START /* Player 2 controls */
PLAYER2_JOYSTICK
/* Top 4 bits are rotary controller */
PORT_START /* Player 1 & 2 fire buttons */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
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 /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -