diff --git a/src/mame/drivers/toaplan2.c b/src/mame/drivers/toaplan2.c index 0bd8bed71a1..4b0a27f82b1 100644 --- a/src/mame/drivers/toaplan2.c +++ b/src/mame/drivers/toaplan2.c @@ -555,6 +555,13 @@ WRITE8_MEMBER(toaplan2_state::toaplan2_coin_w) } } +WRITE8_MEMBER(toaplan2_state::pwrkick_coin_w) +{ + coin_counter_w( machine(), 0, (data & 2) >> 1 ); + coin_counter_w( machine(), 1, (data & 8) >> 3 ); + m_pwrkick_hopper = (data & 0x80) >> 7; +} + WRITE16_MEMBER(toaplan2_state::toaplan2_coin_word_w) { @@ -1200,21 +1207,21 @@ ADDRESS_MAP_END static ADDRESS_MAP_START( pwrkick_68k_mem, AS_PROGRAM, 16, toaplan2_state ) AM_RANGE(0x000000, 0x07ffff) AM_ROM AM_RANGE(0x100000, 0x10ffff) AM_RAM + AM_RANGE(0x200000, 0x20000f) AM_RAM // uPD4992 RTC AM_RANGE(0x300000, 0x30000d) AM_DEVREADWRITE("gp9001vdp0", gp9001vdp_device, gp9001_vdp_r, gp9001_vdp_w) AM_RANGE(0x400000, 0x400fff) AM_RAM_WRITE(paletteram_xBBBBBGGGGGRRRRR_word_w) AM_SHARE("paletteram") AM_RANGE(0x600000, 0x600001) AM_DEVREADWRITE8("oki", okim6295_device, read, write, 0x00ff) -// AM_RANGE(0x70001c, 0x70001d) AM_READ_PORT("SYS") -// AM_RANGE(0x700000, 0x700001) AM_READ_PORT("JMPR") AM_RANGE(0x700000, 0x700001) AM_READ(video_count_r) // check me AM_RANGE(0x700004, 0x700005) AM_READ_PORT("DSWA") AM_RANGE(0x700008, 0x700009) AM_READ_PORT("DSWB") AM_RANGE(0x70000c, 0x70000d) AM_READ_PORT("IN1") - AM_RANGE(0x700010, 0x700011) AM_READ_PORT("IN2") - AM_RANGE(0x700014, 0x700015) AM_READ_PORT("IN3") - AM_RANGE(0x700018, 0x700019) AM_READ_PORT("IN4") + AM_RANGE(0x700014, 0x700015) AM_READ_PORT("IN2") + AM_RANGE(0x700018, 0x700019) AM_READ_PORT("DSWC") AM_RANGE(0x70001c, 0x70001d) AM_READ_PORT("SYS") AM_RANGE(0x700030, 0x700031) AM_WRITE(oki_bankswitch_w) + AM_RANGE(0x700034, 0x700035) AM_WRITE8(pwrkick_coin_w,0x00ff) + AM_RANGE(0x700038, 0x700039) AM_WRITENOP // lamps? ADDRESS_MAP_END @@ -2301,70 +2308,140 @@ static INPUT_PORTS_START( batsugun ) PORT_CONFSETTING( 0x0000, "Korea (Unite Trading)" ) INPUT_PORTS_END -/* TODO: placeholder, needs heavy modifications for sure */ + +CUSTOM_INPUT_MEMBER(toaplan2_state::pwrkick_hopper_status_r) +{ + /* TODO: hopper mechanism */ + return machine().rand() & 1; + //return m_pwrkick_hopper & (machine().rand() & 1); +} + static INPUT_PORTS_START( pwrkick ) - PORT_INCLUDE( toaplan2_2b ) + PORT_START("DSWA") + PORT_DIPNAME( 0x03, 0x00, DEF_STR( Difficulty ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Easy ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Hard ) ) + PORT_DIPSETTING( 0x03, DEF_STR( Very_Hard ) ) + PORT_DIPNAME( 0x1c, 0x00, "Payout" ) + PORT_DIPSETTING( 0x00, "1" ) + PORT_DIPSETTING( 0x04, "2" ) + PORT_DIPSETTING( 0x08, "3" ) + PORT_DIPSETTING( 0x0c, "4" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x14, "6" ) + PORT_DIPSETTING( 0x18, "7" ) + PORT_DIPSETTING( 0x1c, "8" ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Demo_Sounds ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "Diagnostic" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - PORT_START("IN3") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(3) PORT_8WAY - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(3) PORT_8WAY - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(3) PORT_8WAY - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(3) PORT_8WAY - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(3) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(3) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START3 ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_START("DSWB") + PORT_DIPNAME( 0x03, 0x00, "Play Credit" ) + PORT_DIPSETTING( 0x00, "10 \xC2\xA5" ) + PORT_DIPSETTING( 0x01, "20 \xC2\xA5" ) + PORT_DIPSETTING( 0x02, "30 \xC2\xA5" ) + PORT_DIPSETTING( 0x03, "40 \xC2\xA5" ) + PORT_DIPNAME( 0x0c, 0x00, "Coin Exchange" ) + PORT_DIPSETTING( 0x00, "12" ) + PORT_DIPSETTING( 0x04, "10" ) + PORT_DIPSETTING( 0x08, "6" ) + PORT_DIPSETTING( 0x0c, "5" ) + PORT_DIPNAME( 0x30, 0x00, "Game Mode" ) + PORT_DIPSETTING( 0x00, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x10, "Shot" ) + PORT_DIPSETTING( 0x20, "Auto" ) + PORT_DIPSETTING( 0x30, "S-Manual" ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unused ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - PORT_START("IN4") - PORT_BIT( 0x0001, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP ) PORT_PLAYER(4) PORT_8WAY - PORT_BIT( 0x0002, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN ) PORT_PLAYER(4) PORT_8WAY - PORT_BIT( 0x0004, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_PLAYER(4) PORT_8WAY - PORT_BIT( 0x0008, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT ) PORT_PLAYER(4) PORT_8WAY - PORT_BIT( 0x0010, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_PLAYER(4) - PORT_BIT( 0x0020, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(4) - PORT_BIT( 0x0040, IP_ACTIVE_HIGH, IPT_START4 ) - PORT_BIT( 0x0080, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_START("DSWC") + PORT_DIPNAME( 0x01, 0x00, "DSWC" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x04, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - PORT_MODIFY("DSWA") - PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Continue_Price ) ) PORT_DIPLOCATION("SW1:!1") - PORT_DIPSETTING( 0x0000, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x0001, "Discount" ) - // Various features on bit mask 0x000e - see above - TOAPLAN_COINAGE_DUAL_LOC( JMPR, 0x1c00, 0x0800, SW1 ) + PORT_START("IN1") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_START1 ) + PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON1 ) PORT_NAME("Left Button") + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_NAME("Center Button") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_NAME("Right Button") + PORT_DIPNAME( 0x10, 0x00, "IN1" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - PORT_MODIFY("DSWB") - // Difficulty on bit mask 0x0003 - see above - PORT_DIPNAME( 0x000c, 0x0000, DEF_STR( Bonus_Life ) ) PORT_DIPLOCATION("SW2:!3,!4") - PORT_DIPSETTING( 0x000c, DEF_STR( None ) ) - PORT_DIPSETTING( 0x0008, "200k only" ) - PORT_DIPSETTING( 0x0000, "100k only" ) - PORT_DIPSETTING( 0x0004, "100k and every 500k" ) - PORT_DIPNAME( 0x0030, 0x0000, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW2:!5,!6") - PORT_DIPSETTING( 0x0030, "1" ) - PORT_DIPSETTING( 0x0020, "2" ) - PORT_DIPSETTING( 0x0000, "3" ) - PORT_DIPSETTING( 0x0010, "4" ) - PORT_DIPNAME( 0x0040, 0x0000, "Invulnerability (Cheat)" ) PORT_DIPLOCATION("SW2:!7") - PORT_DIPSETTING( 0x0000, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x0040, DEF_STR( On ) ) - PORT_DIPNAME( 0x0080, 0x0000, "Maximum Players" ) PORT_DIPLOCATION("SW2:!8") - PORT_DIPSETTING( 0x0080, "2" ) - PORT_DIPSETTING( 0x0000, "4" ) + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_GAMBLE_KEYIN ) // 10 Yen + PORT_SERVICE( 0x02, IP_ACTIVE_HIGH ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_BUTTON4 ) PORT_NAME("Down Button") + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SPECIAL ) PORT_CUSTOM_MEMBER(DEVICE_SELF, toaplan2_state, pwrkick_hopper_status_r, NULL) + PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_SERVICE3 ) PORT_NAME("Memory Reset") + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) - PORT_START("JMPR") - PORT_CONFNAME( 0x2000, 0x0000, "Show All Rights Reserved" ) //PORT_CONFLOCATION("JP:!1") - PORT_CONFSETTING( 0x0000, DEF_STR( No ) ) - PORT_CONFSETTING( 0x2000, DEF_STR( Yes ) ) - PORT_CONFNAME( 0x1c00, 0x0800, DEF_STR( Region ) ) //PORT_CONFLOCATION("JP:!4,!3,!2") - PORT_CONFSETTING( 0x0800, DEF_STR( Europe ) ) - PORT_CONFSETTING( 0x0400, DEF_STR( USA ) ) - PORT_CONFSETTING( 0x0000, DEF_STR( Japan ) ) - PORT_CONFSETTING( 0x0c00, DEF_STR( Korea ) ) - PORT_CONFSETTING( 0x1000, DEF_STR( Hong_Kong ) ) - PORT_CONFSETTING( 0x1400, DEF_STR( Taiwan ) ) - PORT_CONFSETTING( 0x1800, DEF_STR( Southeast_Asia ) ) -// PORT_CONFSETTING( 0x1c00, DEF_STR( Unused ) ) - PORT_BIT( 0xc3ff, IP_ACTIVE_HIGH, IPT_UNKNOWN ) + PORT_START("SYS") + PORT_DIPNAME( 0x01, 0x00, "SYS" ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x01, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x02, DEF_STR( On ) ) + PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 ) // 100 Yen + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_SERVICE1 ) PORT_NAME("Bookkeeping") + PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE4 ) PORT_NAME("Attendant Key") + PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_COIN1 ) INPUT_PORTS_END static INPUT_PORTS_START( snowbro2 ) @@ -5119,7 +5196,7 @@ GAME( 1993, batsugun, 0, batsugun, batsugun, toaplan2_state, dogyuun, GAME( 1993, batsuguna, batsugun, batsugun, batsugun, toaplan2_state, dogyuun, ROT270, "Toaplan", "Batsugun (older set)", GAME_SUPPORTS_SAVE ) GAME( 1993, batsugunsp, batsugun, batsugun, batsugun, toaplan2_state, dogyuun, ROT270, "Toaplan", "Batsugun - Special Version", GAME_SUPPORTS_SAVE ) -GAME( 1994, pwrkick, 0, pwrkick, pwrkick, driver_device, 0, ROT0, "Sunwise", "Power Kick", GAME_NOT_WORKING ) +GAME( 1994, pwrkick, 0, pwrkick, pwrkick, driver_device, 0, ROT0, "Sunwise", "Power Kick (Japan)", 0 ) GAME( 1994, snowbro2, 0, snowbro2, snowbro2, driver_device, 0, ROT0, "Hanafram", "Snow Bros. 2 - With New Elves / Otenki Paradise", GAME_SUPPORTS_SAVE ) diff --git a/src/mame/includes/toaplan2.h b/src/mame/includes/toaplan2.h index d9cee640b7b..f268c355bef 100644 --- a/src/mame/includes/toaplan2.h +++ b/src/mame/includes/toaplan2.h @@ -156,6 +156,10 @@ public: optional_device m_oki1; optional_device m_eeprom; + UINT8 m_pwrkick_hopper; + DECLARE_CUSTOM_INPUT_MEMBER(pwrkick_hopper_status_r); + DECLARE_WRITE8_MEMBER(pwrkick_coin_w); + protected: virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr); };