mirror of
https://github.com/holub/mame
synced 2025-07-04 09:28:51 +03:00
bankp.cpp: improved flip screen support (see MT04899). Also updated some inputs / dips according to the manual / schmatics (nw)
This commit is contained in:
parent
3040c3e65a
commit
ac510e8969
@ -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)
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user