📄 galaxian.c
字号:
/***************************************************************************
Galaxian memory map
Compiled from information provided by friends and Uncles on RGVAC.
AAAAAA
111111AAAAAAAAAA DDDDDDDD Schem function
HEX 5432109876543210 R/W 76543210 name
0000-27FF Game ROM
5000-57FF 01010AAAAAAAAAAA R/W DDDDDDDD !Vram Character ram
5800-583F 01011AAAAAAAAAAA R/W DDDDDDDD !OBJRAM Screen attributes
5840-585F 01011AAAAAAAAAAA R/W DDDDDDDD !OBJRAM Sprites
5860-5FFF 01011AAAAAAAAAAA R/W DDDDDDDD !OBJRAM Bullets
6000 0110000000000000 R -------D !SW0 coin1
6000 0110000000000000 R ------D- !SW0 coin2
6000 0110000000000000 R -----D-- !SW0 p1 left
6000 0110000000000000 R ----D--- !SW0 p1 right
6000 0110000000000000 R ---D---- !SW0 p1shoot
6000 0110000000000000 R --D----- !SW0 table ??
6000 0110000000000000 R -D------ !SW0 test
6000 0110000000000000 R D------- !SW0 service
6000 0110000000000001 W -------D !DRIVER lamp 1 ??
6001 0110000000000001 W -------D !DRIVER lamp 2 ??
6002 0110000000000010 W -------D !DRIVER lamp 3 ??
6003 0110000000000011 W -------D !DRIVER coin control
6004 0110000000000100 W -------D !DRIVER Background lfo freq bit0
6005 0110000000000101 W -------D !DRIVER Background lfo freq bit1
6006 0110000000000110 W -------D !DRIVER Background lfo freq bit2
6007 0110000000000111 W -------D !DRIVER Background lfo freq bit3
6800 0110100000000000 R -------D !SW1 1p start
6800 0110100000000000 R ------D- !SW1 2p start
6800 0110100000000000 R -----D-- !SW1 p2 left
6800 0110100000000000 R ----D--- !SW1 p2 right
6800 0110100000000000 R ---D---- !SW1 p2 shoot
6800 0110100000000000 R --D----- !SW1 no used
6800 0110100000000000 R -D------ !SW1 dip sw1
6800 0110100000000000 R D------- !SW1 dip sw2
6800 0110100000000000 W -------D !SOUND reset background F1
(1=reset ?)
6801 0110100000000001 W -------D !SOUND reset background F2
6802 0110100000000010 W -------D !SOUND reset background F3
6803 0110100000000011 W -------D !SOUND Noise on/off
6804 0110100000000100 W -------D !SOUND not used
6805 0110100000000101 W -------D !SOUND shoot on/off
6806 0110100000000110 W -------D !SOUND Vol of f1
6807 0110100000000111 W -------D !SOUND Vol of f2
7000 0111000000000000 R -------D !DIPSW dip sw 3
7000 0111000000000000 R ------D- !DIPSW dip sw 4
7000 0111000000000000 R -----D-- !DIPSW dip sw 5
7000 0111000000000000 R ----D--- !DIPSW dip s2 6
7001 0111000000000001 W -------D 9Nregen NMIon
7004 0111000000000100 W -------D 9Nregen stars on
7006 0111000000000110 W -------D 9Nregen hflip
7007 0111000000000111 W -------D 9Nregen vflip
Note: 9n reg,other bits used on moon cresta for extra graphics rom control.
7800 0111100000000000 R -------- !wdr watchdog reset
7800 0111100000000000 W DDDDDDDD !pitch Sound Fx base frequency
***************************************************************************/
#include "driver.h"
#include "vidhrdw/generic.h"
extern unsigned char *galaxian_attributesram;
extern unsigned char *galaxian_bulletsram;
extern int galaxian_bulletsram_size;
void galaxian_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
void galaxian_flipx_w(int offset,int data);
void galaxian_flipy_w(int offset,int data);
void galaxian_attributes_w(int offset,int data);
void galaxian_stars_w(int offset,int data);
void pisces_gfxbank_w(int offset,int data);
int galaxian_vh_start(void);
void galaxian_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
int galaxian_vh_interrupt(void);
void mooncrst_pitch_w(int offset,int data);
void mooncrst_vol_w(int offset,int data);
void mooncrst_noise_w(int offset,int data);
void mooncrst_background_w(int offset,int data);
void mooncrst_shoot_w(int offset,int data);
void mooncrgx_gfxextend_w(int offset,int data);
void mooncrst_lfo_freq_w(int offset,int data);
int mooncrst_sh_start(void);
void mooncrst_sh_stop(void);
void mooncrst_sh_update(void);
static struct MemoryReadAddress readmem[] =
{
{ 0x0000, 0x3fff, MRA_ROM }, /* not all games use all the space */
{ 0x4000, 0x47ff, MRA_RAM },
{ 0x5000, 0x5fff, MRA_RAM }, /* video RAM, screen attributes, sprites, bullets */
{ 0x6000, 0x6000, input_port_0_r }, /* IN0 */
{ 0x6800, 0x6800, input_port_1_r }, /* IN1 */
{ 0x7000, 0x7000, input_port_2_r }, /* DSW */
{ 0x7800, 0x7800, watchdog_reset_r },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress galaxian_writemem[] =
{
{ 0x0000, 0x3fff, MWA_ROM }, /* not all games use all the space */
{ 0x4000, 0x47ff, MWA_RAM },
{ 0x5000, 0x53ff, videoram_w, &videoram, &videoram_size },
{ 0x5800, 0x583f, galaxian_attributes_w, &galaxian_attributesram },
{ 0x5840, 0x585f, MWA_RAM, &spriteram, &spriteram_size },
{ 0x5860, 0x587f, MWA_RAM, &galaxian_bulletsram, &galaxian_bulletsram_size },
{ 0x7001, 0x7001, interrupt_enable_w },
{ 0x7800, 0x7800, mooncrst_pitch_w },
{ 0x6800, 0x6800, mooncrst_background_w },
{ 0x6803, 0x6803, mooncrst_noise_w },
{ 0x6805, 0x6805, mooncrst_shoot_w },
{ 0x6806, 0x6807, mooncrst_vol_w },
{ 0x6000, 0x6001, osd_led_w },
{ 0x6004, 0x6007, mooncrst_lfo_freq_w },
{ 0x7004, 0x7004, galaxian_stars_w },
{ 0x7006, 0x7006, galaxian_flipx_w },
{ 0x7007, 0x7007, galaxian_flipy_w },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress pisces_writemem[] =
{
{ 0x0000, 0x3fff, MWA_ROM }, /* not all games use all the space */
{ 0x4000, 0x47ff, MWA_RAM },
{ 0x5000, 0x53ff, videoram_w, &videoram, &videoram_size },
{ 0x5800, 0x583f, galaxian_attributes_w, &galaxian_attributesram },
{ 0x5840, 0x585f, MWA_RAM, &spriteram, &spriteram_size },
{ 0x5860, 0x587f, MWA_RAM, &galaxian_bulletsram, &galaxian_bulletsram_size },
{ 0x6000, 0x6001, osd_led_w },
{ 0x6002, 0x6002, pisces_gfxbank_w },
{ 0x6004, 0x6007, mooncrst_lfo_freq_w },
{ 0x6800, 0x6800, mooncrst_background_w },
{ 0x6803, 0x6803, mooncrst_noise_w },
{ 0x6805, 0x6805, mooncrst_shoot_w },
{ 0x6806, 0x6807, mooncrst_vol_w },
{ 0x7001, 0x7001, interrupt_enable_w },
{ 0x7004, 0x7004, galaxian_stars_w },
{ 0x7006, 0x7006, galaxian_flipx_w },
{ 0x7007, 0x7007, galaxian_flipy_w },
{ 0x7800, 0x7800, mooncrst_pitch_w },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress mooncrgx_writemem[] =
{
{ 0x0000, 0x3fff, MWA_ROM }, /* not all games use all the space */
{ 0x4000, 0x47ff, MWA_RAM },
{ 0x5000, 0x53ff, videoram_w, &videoram, &videoram_size },
{ 0x5800, 0x583f, galaxian_attributes_w, &galaxian_attributesram },
{ 0x5840, 0x585f, MWA_RAM, &spriteram, &spriteram_size },
{ 0x5860, 0x587f, MWA_RAM, &galaxian_bulletsram, &galaxian_bulletsram_size },
{ 0x6000, 0x6002, mooncrgx_gfxextend_w },
{ 0x6004, 0x6007, mooncrst_lfo_freq_w },
{ 0x6800, 0x6800, mooncrst_background_w },
{ 0x6803, 0x6803, mooncrst_noise_w },
{ 0x6805, 0x6805, mooncrst_shoot_w },
{ 0x6806, 0x6807, mooncrst_vol_w },
{ 0x7001, 0x7001, interrupt_enable_w },
{ 0x7004, 0x7004, galaxian_stars_w },
{ 0x7006, 0x7006, galaxian_flipx_w },
{ 0x7007, 0x7007, galaxian_flipy_w },
{ 0x7800, 0x7800, mooncrst_pitch_w },
{ -1 } /* end of table */
};
/* Zig Zag can swap ROMs 2 and 3 as a form of copy protection */
static void zigzag_sillyprotection_w(int offset,int data)
{
unsigned char *RAM = Machine->memory_region[Machine->drv->cpu[0].memory_region];
if (data)
{
/* swap ROM 2 and 3! */
cpu_setbank(1,&RAM[0x3000]);
cpu_setbank(2,&RAM[0x2000]);
}
else
{
cpu_setbank(1,&RAM[0x2000]);
cpu_setbank(2,&RAM[0x3000]);
}
}
/* but the way the 8910 is hooked up is even sillier! */
static int latch;
void zigzag_8910_latch(int offset,int data)
{
latch = offset;
}
void zigzag_8910_data_trigger(int offset,int data)
{
AY8910_write_port_0_w(0,latch);
}
void zigzag_8910_control_trigger(int offset,int data)
{
AY8910_control_port_0_w(0,latch);
}
static struct MemoryReadAddress zigzag_readmem[] =
{
{ 0x0000, 0x1fff, MRA_ROM },
{ 0x2000, 0x2fff, MRA_BANK1 },
{ 0x3000, 0x3fff, MRA_BANK2 },
{ 0x4000, 0x47ff, MRA_RAM },
{ 0x5000, 0x5fff, MRA_RAM }, /* video RAM, screen attributes, sprites, bullets */
{ 0x6000, 0x6000, input_port_0_r }, /* IN0 */
{ 0x6800, 0x6800, input_port_1_r }, /* IN1 */
{ 0x7000, 0x7000, input_port_2_r }, /* DSW */
{ 0x7800, 0x7800, watchdog_reset_r },
{ -1 } /* end of table */
};
static struct MemoryWriteAddress zigzag_writemem[] =
{
{ 0x0000, 0x3fff, MWA_ROM },
{ 0x4000, 0x47ff, MWA_RAM },
{ 0x4800, 0x4800, MWA_NOP }, /* part of the 8910 interface */
{ 0x4801, 0x4801, zigzag_8910_data_trigger },
{ 0x4803, 0x4803, zigzag_8910_control_trigger },
{ 0x4900, 0x49ff, zigzag_8910_latch },
{ 0x4a00, 0x4a00, MWA_NOP }, /* part of the 8910 interface */
{ 0x5000, 0x53ff, videoram_w, &videoram, &videoram_size },
{ 0x5800, 0x583f, galaxian_attributes_w, &galaxian_attributesram },
{ 0x5840, 0x587f, MWA_RAM, &spriteram, &spriteram_size }, /* no bulletsram, all sprites */
/* I'm just setting the bulltsram somewhere to keep galaxian_vh_screenrefresh() happy. */
/* There really isn't a bulletsram, we should use a different video refresh function */
{ 0x5880, 0x5880, MWA_RAM, &galaxian_bulletsram, &galaxian_bulletsram_size },
{ 0x7001, 0x7001, interrupt_enable_w },
{ 0x7002, 0x7002, zigzag_sillyprotection_w },
{ 0x7006, 0x7006, galaxian_flipx_w },
{ 0x7007, 0x7007, galaxian_flipy_w },
{ -1 } /* end of table */
};
INPUT_PORTS_START( galaxian_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_DIPNAME( 0x20, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x20, "Cocktail" )
PORT_BITX( 0x40, 0x00, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x40, "On" )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* probably unused */
PORT_DIPNAME( 0xc0, 0x00, "Coinage", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x00, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x80, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0xc0, "Free Play" )
PORT_START /* DSW0 */
PORT_DIPNAME( 0x03, 0x00, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "7000" )
PORT_DIPSETTING( 0x01, "10000" )
PORT_DIPSETTING( 0x02, "12000" )
PORT_DIPSETTING( 0x03, "20000" )
PORT_DIPNAME( 0x04, 0x04, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x04, "3" )
PORT_DIPNAME( 0x08, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x08, "On" )
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( galnamco_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_DIPNAME( 0x20, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x20, "Cocktail" )
PORT_BITX( 0x40, 0x00, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x40, "On" )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) /* probably unused */
PORT_DIPNAME( 0xc0, 0x00, "Coinage", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x00, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0x80, "1 Coin/2 Credits" )
PORT_DIPSETTING( 0xc0, "Free Play" )
PORT_START /* DSW0 */
PORT_DIPNAME( 0x03, 0x01, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x01, "4000" )
PORT_DIPSETTING( 0x02, "5000" )
PORT_DIPSETTING( 0x03, "7000" )
PORT_DIPSETTING( 0x00, "None" )
PORT_DIPNAME( 0x04, 0x00, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPNAME( 0x08, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x08, "On" )
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( pisces_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
/* PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNKNOWN ) */
PORT_DIPNAME( 0x20, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x20, "On" )
PORT_DIPNAME( 0x40, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x40, "On" )
PORT_DIPNAME( 0x80, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x80, "On" )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_DIPNAME( 0x20, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x20, "On" )
/* PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN ) */
PORT_DIPNAME( 0x40, 0x00, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x40, "4" )
PORT_DIPNAME( 0x80, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x80, "Cocktail" )
PORT_START /* DSW0 */
PORT_DIPNAME( 0x01, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x01, "On" )
PORT_DIPNAME( 0x02, 0x00, "Coinage", IP_KEY_NONE )
PORT_DIPSETTING( 0x02, "LC 2C/1C RC 1C/2C 2C/5C" )
PORT_DIPSETTING( 0x00, "LC 1C/1C RC 1C/5C" )
PORT_DIPNAME( 0x04, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x04, "On" )
PORT_DIPNAME( 0x08, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x08, "On" )
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( warofbug_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_8WAY )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_8WAY )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP | IPF_8WAY )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_DIPNAME( 0xc0, 0x00, "Coinage", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "2 Coins/1 Credit" )
PORT_DIPSETTING( 0x00, "1 Coin/1 Credit" )
PORT_DIPSETTING( 0xc0, "Free Play" )
/* 0x80 gives 2 Coins/1 Credit */
PORT_START /* DSW0 */
PORT_DIPNAME( 0x03, 0x02, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "1" )
PORT_DIPSETTING( 0x01, "2" )
PORT_DIPSETTING( 0x02, "3" )
PORT_DIPSETTING( 0x03, "4" )
PORT_DIPNAME( 0x04, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x04, "On" )
PORT_DIPNAME( 0x08, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x08, "On" )
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( redufo_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_DIPNAME( 0x20, 0x00, "Cabinet", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Upright" )
PORT_DIPSETTING( 0x20, "Cocktail" )
PORT_BITX( 0x40, 0x00, IPT_DIPSWITCH_NAME | IPF_TOGGLE, "Service Mode", OSD_KEY_F2, IP_JOY_NONE, 0 )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x40, "On" )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_START /* IN1 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_START2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_2WAY | IPF_COCKTAIL )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_COCKTAIL )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_DIPNAME( 0xc0, 0x00, "Coinage", IP_KEY_NONE )
PORT_DIPSETTING( 0x40, "LC 2C/1C RC 1C/3C" )
PORT_DIPSETTING( 0x00, "LC 1C/1C RC 1C/6C" )
PORT_DIPSETTING( 0x80, "LC 1C/2C RC 1C/12C" )
PORT_DIPSETTING( 0xc0, "Free Play" )
PORT_START /* DSW0 */
PORT_DIPNAME( 0x03, 0x01, "Bonus Life", IP_KEY_NONE )
PORT_DIPSETTING( 0x01, "4000" )
PORT_DIPSETTING( 0x02, "5000" )
PORT_DIPSETTING( 0x03, "7000" )
PORT_DIPSETTING( 0x00, "None" )
PORT_DIPNAME( 0x04, 0x00, "Lives", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "3" )
PORT_DIPSETTING( 0x04, "5" )
PORT_DIPNAME( 0x08, 0x00, "Unknown", IP_KEY_NONE )
PORT_DIPSETTING( 0x00, "Off" )
PORT_DIPSETTING( 0x08, "On" )
PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
INPUT_PORTS_END
INPUT_PORTS_START( pacmanbl_input_ports )
PORT_START /* IN0 */
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT | IPF_4WAY )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_UNKNOWN )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN | IPF_4WAY )
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -