summaryrefslogtreecommitdiffstatshomepage
path: root/src
diff options
context:
space:
mode:
author Wilbert Pol <wilbertpol@users.noreply.github.com>2015-08-14 16:28:46 +0200
committer Wilbert Pol <wilbertpol@users.noreply.github.com>2015-08-18 20:12:46 +0200
commitefea5eb36f550489451ae8bb60f29870bb4ad496 (patch)
treefb4a80d5989e18409e8c1711205391decb75a5de /src
parent3fa932f7b12c6b8e2fd8c6184cb4fc6aba781d42 (diff)
vicdual.c: reduce tagmap lookups (nw)
Diffstat (limited to 'src')
-rw-r--r--src/mame/drivers/vicdual.c68
-rw-r--r--src/mame/includes/vicdual.h17
-rw-r--r--src/mame/video/vicdual.c2
3 files changed, 50 insertions, 37 deletions
diff --git a/src/mame/drivers/vicdual.c b/src/mame/drivers/vicdual.c
index ebe685ad277..f327a895cb2 100644
--- a/src/mame/drivers/vicdual.c
+++ b/src/mame/drivers/vicdual.c
@@ -186,7 +186,7 @@ CUSTOM_INPUT_MEMBER(vicdual_state::get_timer_value)
int vicdual_state::is_cabinet_color()
{
- return (ioport(COLOR_BW_PORT_TAG)->read_safe(0) & 1) ? 0 : 1;
+ return ((m_color_bw ? m_color_bw->read() : 0) & 1) ? 0 : 1;
}
@@ -266,8 +266,8 @@ READ8_MEMBER(vicdual_state::depthch_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
- if (offset & 0x08) ret = ioport("IN1")->read();
+ if (offset & 0x01) ret = m_in0->read();
+ if (offset & 0x08) ret = m_in1->read();
return ret;
}
@@ -347,8 +347,8 @@ READ8_MEMBER(vicdual_state::safari_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
- if (offset & 0x08) ret = ioport("IN1")->read();
+ if (offset & 0x01) ret = m_in0->read();
+ if (offset & 0x08) ret = m_in1->read();
return ret;
}
@@ -430,8 +430,8 @@ READ8_MEMBER(vicdual_state::frogs_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
- if (offset & 0x08) ret = ioport("IN1")->read();
+ if (offset & 0x01) ret = m_in0->read();
+ if (offset & 0x08) ret = m_in1->read();
return ret;
}
@@ -541,8 +541,8 @@ READ8_MEMBER(vicdual_state::headon_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
- if (offset & 0x08) ret = ioport("IN1")->read();
+ if (offset & 0x01) ret = m_in0->read();
+ if (offset & 0x08) ret = m_in1->read();
return ret;
}
@@ -552,9 +552,9 @@ READ8_MEMBER(vicdual_state::sspaceat_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
- if (offset & 0x04) ret = ioport("IN1")->read();
- if (offset & 0x08) ret = ioport("IN2")->read();
+ if (offset & 0x01) ret = m_in0->read();
+ if (offset & 0x04) ret = m_in1->read();
+ if (offset & 0x08) ret = m_in2->read();
return ret;
}
@@ -800,10 +800,10 @@ READ8_MEMBER(vicdual_state::headon2_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
+ if (offset & 0x01) ret = m_in0->read();
if (offset & 0x02) { /* schematics show this as in input port, but never read from */ }
- if (offset & 0x04) ret = ioport("IN1")->read();
- if (offset & 0x08) ret = ioport("IN2")->read();
+ if (offset & 0x04) ret = m_in1->read();
+ if (offset & 0x08) ret = m_in2->read();
if (offset & 0x12) logerror("********* Read from port %x\n", offset);
return ret;
@@ -1289,14 +1289,12 @@ ADDRESS_MAP_END
/* several of the games' lives DIPs are spread across two input ports */
CUSTOM_INPUT_MEMBER(vicdual_state::fake_lives_r)
{
- static const char *const portnames[] = { "FAKE_LIVES1", "FAKE_LIVES2" };
-
/* use the low byte for the bitmask */
UINT8 bit_mask = ((FPTR)param) & 0xff;
/* and use d8 for the port */
int port = ((FPTR)param) >> 8 & 1;
- return (ioport(portnames[port])->read_safe(0) & bit_mask) ? 0 : 1;
+ return ((m_fake_lives[port] ? m_fake_lives[port]->read() : 0) & bit_mask) ? 0 : 1;
}
@@ -1341,7 +1339,7 @@ static INPUT_PORTS_START( invho2 )
PORT_COIN_DEFAULT
- PORT_START("FAKE_LIVES1")
+ PORT_START("FAKE_LIVES.0")
PORT_DIPNAME( 0x03, 0x01, "Head On 2 Lives" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x01, "3" )
@@ -1353,7 +1351,7 @@ static INPUT_PORTS_START( invho2 )
reads IN3 bit 3 instead of bit 2.
Note that the manual only lists setting it to 3 or 4.
*/
- PORT_START("FAKE_LIVES2")
+ PORT_START("FAKE_LIVES.1")
PORT_DIPNAME( 0x03, 0x03, "Invinco Lives" ) PORT_DIPLOCATION("SW1:3,4")
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
@@ -1404,14 +1402,14 @@ static INPUT_PORTS_START( carhntds )
PORT_COIN_DEFAULT
- PORT_START("FAKE_LIVES1")
+ PORT_START("FAKE_LIVES.0")
PORT_DIPNAME( 0x03, 0x01, "Car Hunt Lives" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x03, "1" )
PORT_DIPSETTING( 0x02, "2" )
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x00, "4" )
- PORT_START("FAKE_LIVES2")
+ PORT_START("FAKE_LIVES.1")
PORT_DIPNAME( 0x03, 0x03, "Deep Scan Lives" ) PORT_DIPLOCATION("SW1:3,4")
PORT_DIPSETTING( 0x02, "1" )
PORT_DIPSETTING( 0x01, "2" )
@@ -1462,14 +1460,14 @@ static INPUT_PORTS_START( invds )
PORT_COIN_DEFAULT
// SW1 @ C1, 6-pos (where are 5 & 6?)
- PORT_START("FAKE_LIVES1")
+ PORT_START("FAKE_LIVES.0")
PORT_DIPNAME( 0x03, 0x03, "Invinco Lives" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
PORT_DIPSETTING( 0x01, "5" )
PORT_DIPSETTING( 0x00, "6" )
- PORT_START("FAKE_LIVES2")
+ PORT_START("FAKE_LIVES.1")
PORT_DIPNAME( 0x03, 0x01, "Deep Scan Lives" ) PORT_DIPLOCATION("SW1:3,4")
PORT_DIPSETTING( 0x02, "2" )
PORT_DIPSETTING( 0x01, "3" )
@@ -1523,7 +1521,7 @@ static INPUT_PORTS_START( sspacaho )
PORT_COIN_DEFAULT
- PORT_START("FAKE_LIVES1")
+ PORT_START("FAKE_LIVES.0")
PORT_DIPNAME( 0x03, 0x03, "Space Attack Lives" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
@@ -1763,7 +1761,7 @@ static INPUT_PORTS_START( brdrline )
PORT_COIN_DEFAULT
- PORT_START("FAKE_LIVES1")
+ PORT_START("FAKE_LIVES.0")
PORT_DIPNAME( 0x07, 0x01, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2,3")
PORT_DIPSETTING( 0x01, "3" )
PORT_DIPSETTING( 0x02, "4" )
@@ -1838,7 +1836,7 @@ static INPUT_PORTS_START( pulsar )
PORT_COIN_DEFAULT
- PORT_START("FAKE_LIVES1")
+ PORT_START("FAKE_LIVES.0")
PORT_DIPNAME( 0x03, 0x02, DEF_STR( Lives ) ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x00, "2" )
PORT_DIPSETTING( 0x02, "3" )
@@ -1943,7 +1941,7 @@ static INPUT_PORTS_START( alphaho )
PORT_COIN_DEFAULT
- PORT_START("FAKE_LIVES1")
+ PORT_START("FAKE_LIVES.0")
PORT_DIPNAME( 0x03, 0x03, "Alpha Fighter Lives" ) PORT_DIPLOCATION("SW1:1,2")
PORT_DIPSETTING( 0x03, "3" )
PORT_DIPSETTING( 0x02, "4" )
@@ -2230,8 +2228,8 @@ READ8_MEMBER(vicdual_state::nsub_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
- if (offset & 0x08) ret = ioport("IN1")->read();
+ if (offset & 0x01) ret = m_in0->read();
+ if (offset & 0x08) ret = m_in1->read();
return ret;
}
@@ -2279,7 +2277,7 @@ INPUT_CHANGED_MEMBER(vicdual_state::nsub_coin_in)
if (newval)
{
int which = (int)(FPTR)param;
- int coinage = ioport("COINAGE")->read();
+ int coinage = m_coinage->read();
switch (which)
{
@@ -2377,7 +2375,7 @@ MACHINE_START_MEMBER(vicdual_state,nsub)
MACHINE_RESET_MEMBER(vicdual_state,nsub)
{
- m_nsub_coin_counter = ioport("COINAGE")->read() & 7;
+ m_nsub_coin_counter = m_coinage->read() & 7;
machine_reset();
}
@@ -2411,9 +2409,9 @@ READ8_MEMBER(vicdual_state::invinco_io_r)
{
UINT8 ret = 0;
- if (offset & 0x01) ret = ioport("IN0")->read();
- if (offset & 0x02) ret = ioport("IN1")->read();
- if (offset & 0x08) ret = ioport("IN2")->read();
+ if (offset & 0x01) ret = m_in0->read();
+ if (offset & 0x02) ret = m_in1->read();
+ if (offset & 0x08) ret = m_in2->read();
return ret;
}
diff --git a/src/mame/includes/vicdual.h b/src/mame/includes/vicdual.h
index 4c2fe9801a2..140e27b9486 100644
--- a/src/mame/includes/vicdual.h
+++ b/src/mame/includes/vicdual.h
@@ -24,8 +24,15 @@ public:
m_coinstate_timer(*this, "coinstate"),
m_nsub_coinage_timer(*this, "nsub_coin"),
m_screen(*this, "screen"),
+ m_proms(*this, "proms"),
m_videoram(*this, "videoram"),
- m_characterram(*this, "characterram")
+ m_characterram(*this, "characterram"),
+ m_in0(*this, "IN0"),
+ m_in1(*this, "IN1"),
+ m_in2(*this, "IN2"),
+ m_coinage(*this, "COINAGE"),
+ m_color_bw(*this, "COLOR_BW"),
+ m_fake_lives(*this, "FAKE_LIVES")
{ }
required_device<cpu_device> m_maincpu;
@@ -36,10 +43,18 @@ public:
required_device<timer_device> m_coinstate_timer;
optional_device<timer_device> m_nsub_coinage_timer;
required_device<screen_device> m_screen;
+ optional_memory_region m_proms;
required_shared_ptr<UINT8> m_videoram;
required_shared_ptr<UINT8> m_characterram;
+ required_ioport m_in0;
+ required_ioport m_in1;
+ optional_ioport m_in2;
+ optional_ioport m_coinage;
+ optional_ioport m_color_bw;
+ optional_ioport_array<2> m_fake_lives;
+
UINT8 m_coin_status;
UINT8 m_palette_bank;
UINT8 m_samurai_protection_data;
diff --git a/src/mame/video/vicdual.c b/src/mame/video/vicdual.c
index 6b79523fdee..f1e0dee5a70 100644
--- a/src/mame/video/vicdual.c
+++ b/src/mame/video/vicdual.c
@@ -82,7 +82,7 @@ UINT32 vicdual_state::screen_update_bw(screen_device &screen, bitmap_rgb32 &bitm
UINT32 vicdual_state::screen_update_color(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
- UINT8 *color_prom = (UINT8 *)memregion("proms")->base();
+ UINT8 *color_prom = (UINT8 *)m_proms->base();
UINT8 x = 0;
UINT8 y = cliprect.min_y;
UINT8 video_data = 0;