📄 exidy.c
字号:
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_START /* IN2 */
PORT_BITX(0x01, IP_ACTIVE_LOW, IPT_BUTTON2, "Yellow Button", IP_KEY_DEFAULT, IP_JOY_DEFAULT, 0 )
PORT_BITX(0x02, IP_ACTIVE_LOW, IPT_BUTTON3, "Red Button", IP_KEY_DEFAULT, IP_JOY_DEFAULT, 0 )
PORT_BITX( 0x04, 0x04, IPT_DIPSWITCH_NAME, "Free Play", IP_KEY_NONE, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x04, "Off" )
PORT_DIPSETTING( 0x00, "On" )
PORT_BITX(0x08, IP_ACTIVE_LOW, IPT_BUTTON4, "Blue Button", IP_KEY_DEFAULT, IP_JOY_DEFAULT, 0 )
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
INPUT_PORTS_START( venture_input_ports )
PORT_START /* DSW0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_DIPNAME( 0x06, 0x06, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x06, "20000" )
PORT_DIPSETTING( 0x04, "30000" )
PORT_DIPSETTING( 0x02, "40000" )
PORT_DIPSETTING( 0x00, "50000" )
PORT_DIPNAME( 0x98, 0x80, "Coinage", IP_KEY_NONE )
PORT_DIPSETTING( 0x88, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x80, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x98, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0x00, "Pence: LC 2C/1C - RC 1C/3C" )
PORT_DIPSETTING( 0x18, "Pence: LC 1C/1C - RC 1C/6C" )
/*0x10 same as 0x00 */
/*0x90 same as 0x80 */
PORT_DIPNAME( 0x60, 0x20, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x20, "3" )
PORT_DIPSETTING( 0x40, "4" )
PORT_DIPSETTING( 0x60, "5" )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_START /* IN1 */
/*
The schematics claim these exist, but there's nothing in
the ROMs to support that claim (as far as I can see):
PORT_DIPNAME( 0x03, 0x00, "Language", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "English" )
PORT_DIPSETTING( 0x01, "French" )
PORT_DIPSETTING( 0x02, "German" )
PORT_DIPSETTING( 0x03, "Spanish" )
PORT_DIPNAME( 0x08, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x08, "Cocktail" )
*/
PORT_BIT( 0x1F, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
INPUT_PORTS_START( pepper2_input_ports )
PORT_START /* DSW */
PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_DIPNAME( 0x06, 0x06, "Bonus Turns", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "70000" )
PORT_DIPSETTING( 0x02, "60000" )
PORT_DIPSETTING( 0x04, "50000" )
PORT_DIPSETTING( 0x06, "40000" )
PORT_DIPNAME( 0x60, 0x20, "Number of Turns", IP_KEY_NONE )
PORT_DIPSETTING( 0x60, "5 Turns" )
PORT_DIPSETTING( 0x40, "4 Turns" )
PORT_DIPSETTING( 0x20, "3 Turns" )
PORT_DIPSETTING( 0x00, "2 Turns" )
PORT_DIPNAME( 0x98, 0x98, "Coins/Credit", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "L-2/1 R-1/3" )
PORT_DIPSETTING( 0x08, "L-1/1 R-1/4" )
PORT_DIPSETTING( 0x10, "L-1/1 R-1/5" )
PORT_DIPSETTING( 0x18, "1/3 or 2/7" )
PORT_DIPSETTING( 0x90, "1/4" )
PORT_DIPSETTING( 0x80, "1/2" )
PORT_DIPSETTING( 0x88, "2/1" )
PORT_DIPSETTING( 0x98, "1/1" )
PORT_START /* IN0 */
PORT_BIT ( 0x01, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT ( 0x02, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT ( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT )
PORT_BIT ( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT )
PORT_BIT ( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_BIT ( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_UP )
PORT_BIT ( 0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN )
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_START /* IN1 */
/*
The schematics claim these exist, but there's nothing in
the ROMs to support that claim (as far as I can see):
PORT_DIPNAME( 0x03, 0x00, "Language", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "English" )
PORT_DIPSETTING( 0x01, "French" )
PORT_DIPSETTING( 0x02, "German" )
PORT_DIPSETTING( 0x03, "Spanish" )
PORT_DIPNAME( 0x08, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x08, "Cocktail" )
*/
PORT_BIT( 0x1F, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN )
INPUT_PORTS_END
INPUT_PORTS_START( fax_input_ports )
PORT_START /* DSW */
PORT_BIT ( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_DIPNAME( 0x06, 0x04, "Bonus Time", IP_KEY_NONE )
PORT_DIPSETTING( 0x06, "8000 pts" )
PORT_DIPSETTING( 0x04, "13000 pts" )
PORT_DIPSETTING( 0x02, "18000 pts" )
PORT_DIPSETTING( 0x00, "25000 pts" )
PORT_DIPNAME( 0x60, 0x40, "Game/Bonus Times", IP_KEY_NONE )
PORT_DIPSETTING( 0x60, ":32/:24" )
PORT_DIPSETTING( 0x40, ":48/:36" )
PORT_DIPSETTING( 0x20, "1:04/:48" )
PORT_DIPSETTING( 0x00, "1:12/1:04" )
PORT_DIPNAME( 0x98, 0x98, "Coins/Credit", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "L-2/1 R-1/3" )
PORT_DIPSETTING( 0x08, "L-1/1 R-1/4" )
PORT_DIPSETTING( 0x10, "L-1/1 R-1/5" )
PORT_DIPSETTING( 0x18, "1/3 or 2/7" )
PORT_DIPSETTING( 0x90, "1/4" )
PORT_DIPSETTING( 0x80, "1/2" )
PORT_DIPSETTING( 0x88, "2/1" )
PORT_DIPSETTING( 0x98, "1/1" )
PORT_START /* IN0 */
PORT_BIT ( 0x7F, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT ( 0x80, IP_ACTIVE_LOW, IPT_COIN1 )
PORT_START /* IN1 */
/*
The schematics claim these exist, but there's nothing in
the ROMs to support that claim (as far as I can see):
PORT_DIPNAME( 0x03, 0x00, "Language", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "English" )
PORT_DIPSETTING( 0x01, "French" )
PORT_DIPSETTING( 0x02, "German" )
PORT_DIPSETTING( 0x03, "Spanish" )
PORT_DIPNAME( 0x08, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x08, "Cocktail" )
*/
PORT_BIT( 0x1B, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) /* Set when motion object 1 is drawn? */
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* VBlank */
PORT_START /* IN2 */
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START2 )
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_START1 )
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
PORT_START /* IN3 */
PORT_BIT( 0x0F, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 | IPF_PLAYER2 )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON3 | IPF_PLAYER2 )
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 | IPF_PLAYER2 )
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 | IPF_PLAYER2 )
INPUT_PORTS_END
/***************************************************************************
Graphics Layout
***************************************************************************/
static struct GfxLayout charlayout =
{
8,8, /* 8*8 characters */
256, /* 256 characters */
1, /* 1 bits per pixel */
{ 0 }, /* No info needed for bit offsets */
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8 /* every char takes 8 consecutive bytes */
};
/* Pepper II and Fax used a special Plane Generation Board for 2-bit graphics */
static struct GfxLayout pepper2_charlayout =
{
8,8, /* 8*8 characters */
256, /* 256 characters */
2, /* 2 bits per pixel */
{ 0, 256*8*8 }, /* 2 bits separated by 0x0800 bytes */
{ 0, 1, 2, 3, 4, 5, 6, 7 },
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
8*8 /* every char takes 8 consecutive bytes */
};
static struct GfxLayout spritelayout =
{
16,16, /* 16*16 sprites */
16*4, /* 64 characters */
1, /* 1 bit per pixel */
{ 0 },
{ 0, 1, 2, 3, 4, 5, 6, 7, 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7},
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8},
8*32 /* every char takes 32 consecutive bytes */
};
static struct GfxLayout targ_spritelayout =
{
16,16, /* 16*16 sprites */
16*2, /* 32 characters for Targ/Spectar */
1, /* 1 bit per pixel */
{ 0 },
{ 0, 1, 2, 3, 4, 5, 6, 7, 16*8+0, 16*8+1, 16*8+2, 16*8+3, 16*8+4, 16*8+5, 16*8+6, 16*8+7},
{ 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8, 8*8, 9*8, 10*8, 11*8, 12*8, 13*8, 14*8, 15*8},
8*32 /* every char takes 32 consecutive bytes */
};
static struct GfxDecodeInfo gfxdecodeinfo[] =
{
{ 0, 0x4800, &charlayout, 0, 4 }, /* the game dynamically modifies this */
{ 1, 0x0000, &spritelayout, 8, 2 }, /* Sprites */
{ -1 } /* end of array */
};
static struct GfxDecodeInfo pepper2_gfxdecodeinfo[] =
{
{ 0, 0x6000, &pepper2_charlayout, 0, 4 }, /* the game dynamically modifies this */
{ 1, 0x0000, &spritelayout, 16, 2 }, /* Angel/Devil/Zipper Ripper */
{ -1 } /* end of array */
};
static struct GfxDecodeInfo targ_gfxdecodeinfo[] =
{
{ 0, 0x4800, &charlayout, 0, 4 }, /* the game dynamically modifies this */
{ 1, 0x0000, &targ_spritelayout, 8, 2 }, /* Sprites */
{ -1 } /* end of array */
};
/* Arbitrary starting colors, modified by the game */
static unsigned char sidetrac_palette[] =
{
0x00,0x00,0x00, /* BACKGND */
0x00,0x00,0x00, /* CSPACE0 */
0x00,0xff,0x00, /* CSPACE1 */
0xff,0xff,0xff, /* CSPACE2 */
0xff,0xff,0xff, /* CSPACE3 */
0xff,0x00,0xff, /* 5LINES (unused?) */
0xff,0xff,0x00, /* 5MO2VID */
0xff,0xff,0xff /* 5MO1VID */
};
static unsigned short sidetrac_colortable[] =
{
/* one-bit characters */
0, 4, /* chars 0x00-0x3F */
0, 3, /* chars 0x40-0x7F */
0, 2, /* chars 0x80-0xBF */
0, 1, /* chars 0xC0-0xFF */
/* Motion Object 1 */
0, 7,
/* Motion Object 2 */
0, 6,
};
static unsigned char palette[] =
{
0x00,0x00,0x00, /* BACKGND */
0x00,0x00,0xff, /* CSPACE0 */
0x00,0xff,0x00, /* CSPACE1 */
0x00,0xff,0xff, /* CSPACE2 */
0xff,0x00,0x00, /* CSPACE3 */
0xff,0x00,0xff, /* 5LINES (unused?) */
0xff,0xff,0x00, /* 5MO2VID */
0xff,0xff,0xff /* 5MO1VID */
};
/* Targ doesn't have a color PROM; colors are changed by the means of 8x3 */
/* dip switches on the board. Here are the colors they map to. */
static unsigned char targ_palette[] =
{
/* color use */
0x00,0x00,0xFF, /* blue background */
0x00,0xFF,0xFF, /* cyan characters 192-255 */
0xFF,0xFF,0x00, /* yellow characters 128-191 */
0xFF,0xFF,0xFF, /* white characters 64-127 */
0xFF,0x00,0x00, /* red characters 0- 63 */
0x00,0xFF,0xFF, /* cyan not used */
0xFF,0xFF,0xFF, /* white bullet sprite */
0x00,0xFF,0x00, /* green wummel sprite */
};
/* Spectar has different colors */
static unsigned char spectar_palette[] =
{
/* color use */
0x00,0x00,0xFF, /* blue background */
0x00,0xFF,0x00, /* green characters 192-255 */
0x00,0xFF,0x00, /* green characters 128-191 */
0xFF,0xFF,0xFF, /* white characters 64-127 */
0xFF,0x00,0x00, /* red characters 0- 63 */
0x00,0xFF,0x00, /* green not used */
0xFF,0xFF,0x00, /* yellow bullet sprite */
0x00,0xFF,0x00, /* green wummel sprite */
};
static unsigned short colortable[] =
{
/* one-bit characters */
0, 4, /* chars 0x00-0x3F */
0, 3, /* chars 0x40-0x7F */
0, 2, /* chars 0x80-0xBF */
0, 1, /* chars 0xC0-0xFF */
/* Motion Object 1 */
0, 7,
/* Motion Object 2 */
0, 6,
};
static unsigned short pepper2_colortable[] =
{
/* two-bit characters */
/* (Because this is 2-bit color, the colorspace is only divided
in half instead of in quarters. That's why 00-3F = 40-7F and
80-BF = C0-FF) */
0, 0, 4, 3, /* chars 0x00-0x3F */
0, 0, 4, 3, /* chars 0x40-0x7F */
0, 0, 2, 1, /* chars 0x80-0xBF */
0, 0, 2, 1, /* chars 0xC0-0xFF */
/* Motion Object 1 */
0, 7,
/* Motion Object 2 */
0, 6,
};
/***************************************************************************
Game drivers
***************************************************************************/
static const char *targ_sample_names[] =
{
"*targ",
"expl.sam",
"shot.sam",
"sexpl.sam",
"spslow.sam",
"spfast.sam",
0 /* end of array */
};
static struct Samplesinterface targ_samples_interface=
{
3 /* 3 Channels */
};
static struct CustomSound_interface targ_custom_interface =
{
targ_sh_start,
targ_sh_stop,
0
};
static struct DACinterface targ_DAC_interface =
{
1,
{ 100 }
};
static struct MachineDriver targ_machine_driver =
{
/* basic machine hardware */
{
{
CPU_M6502,
11289000/16, /* .705562 MHz */
0,
readmem,targ_writemem,0,0,
exidy_interrupt,1
},
},
60, DEFAULT_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */
1,
exidy_init_machine,
/* video hardware */
32*8, 32*8, { 0*8, 31*8-1, 0*8, 32*8-1 },
targ_gfxdecodeinfo,
sizeof(targ_palette)/3,sizeof(colortable)/sizeof(unsigned short),
0,
VIDEO_TYPE_RASTER|VIDEO_SUPPORTS_DIRTY,
0,
exidy_vh_start,
exidy_vh_stop,
exidy_vh_screenrefresh,
/* sound hardware */
0,0,0,0,
{
{
SOUND_CUSTOM,
&targ_custom_interface
},
{
SOUND_SAMPLES,
&targ_samples_interface
},
{
SOUND_DAC,
&targ_DAC_interface
}
}
};
static struct MachineDriver machine_driver =
{
/* basic machine hardware */
{
{
CPU_M6502,
11289000/16,
0,
readmem,writemem,0,0,
exidy_interrupt,1
},
{
CPU_M6502 | CPU_AUDIO_CPU,
3579545/4,
2, /* memory region #2 */
sound_readmem,sound_writemem,0,0,
interrupt,1
}
},
60, DEFAULT_60HZ_VBLANK_DURATION, /* frames per second, vblank duration */
32, /* 10 CPU slices per frame - enough for the sound CPU to read all commands */
exidy_init_machine,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -