bankp.cpp: improved flip screen support (see MT04899). Also updated some inputs / dips according to the manual / schmatics (nw)

This commit is contained in:
Ivan Vangelista 2016-05-10 17:26:24 +02:00
parent 3040c3e65a
commit ac510e8969
3 changed files with 30 additions and 28 deletions

View File

@ -124,10 +124,10 @@
static ADDRESS_MAP_START( bankp_map, AS_PROGRAM, 8, bankp_state )
AM_RANGE(0x0000, 0xdfff) AM_ROM
AM_RANGE(0xe000, 0xefff) AM_RAM
AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE(bankp_videoram_w) AM_SHARE("videoram")
AM_RANGE(0xf400, 0xf7ff) AM_RAM_WRITE(bankp_colorram_w) AM_SHARE("colorram")
AM_RANGE(0xf800, 0xfbff) AM_RAM_WRITE(bankp_videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0xfc00, 0xffff) AM_RAM_WRITE(bankp_colorram2_w) AM_SHARE("colorram2")
AM_RANGE(0xf000, 0xf3ff) AM_RAM_WRITE(videoram_w) AM_SHARE("videoram")
AM_RANGE(0xf400, 0xf7ff) AM_RAM_WRITE(colorram_w) AM_SHARE("colorram")
AM_RANGE(0xf800, 0xfbff) AM_RAM_WRITE(videoram2_w) AM_SHARE("videoram2")
AM_RANGE(0xfc00, 0xffff) AM_RAM_WRITE(colorram2_w) AM_SHARE("colorram2")
ADDRESS_MAP_END
static ADDRESS_MAP_START( bankp_io_map, AS_IO, 8, bankp_state )
@ -136,8 +136,8 @@ static ADDRESS_MAP_START( bankp_io_map, AS_IO, 8, bankp_state )
AM_RANGE(0x01, 0x01) AM_READ_PORT("IN1") AM_DEVWRITE("sn2", sn76489_device, write)
AM_RANGE(0x02, 0x02) AM_READ_PORT("IN2") AM_DEVWRITE("sn3", sn76489_device, write)
AM_RANGE(0x04, 0x04) AM_READ_PORT("DSW1")
AM_RANGE(0x05, 0x05) AM_WRITE(bankp_scroll_w)
AM_RANGE(0x07, 0x07) AM_WRITE(bankp_out_w)
AM_RANGE(0x05, 0x05) AM_WRITE(scroll_w)
AM_RANGE(0x07, 0x07) AM_WRITE(out_w)
ADDRESS_MAP_END
@ -155,7 +155,7 @@ static INPUT_PORTS_START( bankp )
PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT ) PORT_2WAY
PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 )
PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_COIN1 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_SERVICE1 )
PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_BUTTON2 )
PORT_START("IN1")
@ -171,16 +171,16 @@ static INPUT_PORTS_START( bankp )
PORT_START("IN2")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON3 )
PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON3 ) PORT_COCKTAIL
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN3 )
PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 )
PORT_BIT( 0xf8, IP_ACTIVE_HIGH, IPT_UNUSED )
PORT_START("DSW1")
PORT_DIPNAME( 0x03, 0x00, "Coin A/B" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPNAME( 0x03, 0x00, "Coin Switch 1" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x03, DEF_STR( 3C_1C ) )
PORT_DIPSETTING( 0x02, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPSETTING( 0x01, DEF_STR( 1C_2C ) )
PORT_DIPNAME( 0x04, 0x00, "Coin C" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPNAME( 0x04, 0x00, "Coin Switch 2" ) PORT_DIPLOCATION("SW1:3")
PORT_DIPSETTING( 0x04, DEF_STR( 2C_1C ) )
PORT_DIPSETTING( 0x00, DEF_STR( 1C_1C ) )
PORT_DIPNAME( 0x08, 0x00, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:4")
@ -279,6 +279,7 @@ void bankp_state::machine_reset()
{
m_scroll_x = 0;
m_priority = 0;
m_nmi_mask = 0;
}
INTERRUPT_GEN_MEMBER(bankp_state::vblank_irq)
@ -299,7 +300,7 @@ static MACHINE_CONFIG_START( bankp, bankp_state )
/* video hardware */
MCFG_SCREEN_ADD("screen", RASTER)
MCFG_SCREEN_RAW_PARAMS(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART)
MCFG_SCREEN_UPDATE_DRIVER(bankp_state, screen_update_bankp)
MCFG_SCREEN_UPDATE_DRIVER(bankp_state, screen_update)
MCFG_SCREEN_PALETTE("palette")
MCFG_GFXDECODE_ADD("gfxdecode", "palette", bankp)

View File

@ -32,18 +32,18 @@ public:
int m_priority;
UINT8 m_nmi_mask;
DECLARE_WRITE8_MEMBER(bankp_scroll_w);
DECLARE_WRITE8_MEMBER(bankp_videoram_w);
DECLARE_WRITE8_MEMBER(bankp_colorram_w);
DECLARE_WRITE8_MEMBER(bankp_videoram2_w);
DECLARE_WRITE8_MEMBER(bankp_colorram2_w);
DECLARE_WRITE8_MEMBER(bankp_out_w);
DECLARE_WRITE8_MEMBER(scroll_w);
DECLARE_WRITE8_MEMBER(videoram_w);
DECLARE_WRITE8_MEMBER(colorram_w);
DECLARE_WRITE8_MEMBER(videoram2_w);
DECLARE_WRITE8_MEMBER(colorram2_w);
DECLARE_WRITE8_MEMBER(out_w);
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
virtual void machine_reset() override;
virtual void video_start() override;
DECLARE_PALETTE_INIT(bankp);
UINT32 screen_update_bankp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(vblank_irq);
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;

View File

@ -2,7 +2,7 @@
// copyright-holders:Nicola Salmoria
/***************************************************************************
video.c
bankp.cpp
Functions to emulate the video hardware of the machine.
@ -80,36 +80,36 @@ PALETTE_INIT_MEMBER(bankp_state, bankp)
/* the bottom half of the PROM seems to be not used */
}
WRITE8_MEMBER(bankp_state::bankp_scroll_w)
WRITE8_MEMBER(bankp_state::scroll_w)
{
m_scroll_x = data;
}
WRITE8_MEMBER(bankp_state::bankp_videoram_w)
WRITE8_MEMBER(bankp_state::videoram_w)
{
m_videoram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(bankp_state::bankp_colorram_w)
WRITE8_MEMBER(bankp_state::colorram_w)
{
m_colorram[offset] = data;
m_fg_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(bankp_state::bankp_videoram2_w)
WRITE8_MEMBER(bankp_state::videoram2_w)
{
m_videoram2[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(bankp_state::bankp_colorram2_w)
WRITE8_MEMBER(bankp_state::colorram2_w)
{
m_colorram2[offset] = data;
m_bg_tilemap->mark_tile_dirty(offset);
}
WRITE8_MEMBER(bankp_state::bankp_out_w)
WRITE8_MEMBER(bankp_state::out_w)
{
/* bits 0-1 are playfield priority */
/* TODO: understand how this works */
@ -156,14 +156,15 @@ void bankp_state::video_start()
save_item(NAME(m_scroll_x));
save_item(NAME(m_priority));
save_item(NAME(m_nmi_mask));
}
UINT32 bankp_state::screen_update_bankp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
UINT32 bankp_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
if (flip_screen())
{
m_fg_tilemap->set_scrollx(0, -m_scroll_x);
m_bg_tilemap->set_scrollx(0, 0);
m_fg_tilemap->set_scrollx(0, 240-m_scroll_x);
m_bg_tilemap->set_scrollx(0, 240);
}
else
{