summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author hap <happppp@users.noreply.github.com>2018-10-02 18:33:21 +0200
committer hap <happppp@users.noreply.github.com>2018-10-02 18:33:33 +0200
commit583f9ae37cad326cd0a399c4007fb361429f41a5 (patch)
tree2b53cc626113c347dc28a67d5df12cf63c56ad00
parent4d21877432faa5197f77a6688eb65cc8e31032e8 (diff)
namcos22: another small optimization (nw)
-rw-r--r--src/mame/drivers/namcos22.cpp27
-rw-r--r--src/mame/includes/namcos22.h3
-rw-r--r--src/mame/video/namcos22.cpp2
3 files changed, 13 insertions, 19 deletions
diff --git a/src/mame/drivers/namcos22.cpp b/src/mame/drivers/namcos22.cpp
index 64490195aea..5c822bb8085 100644
--- a/src/mame/drivers/namcos22.cpp
+++ b/src/mame/drivers/namcos22.cpp
@@ -2115,27 +2115,20 @@ void namcos22_state::point_write(offs_t offs, uint32_t data)
}
}
-int32_t namcos22_state::point_read(int32_t addr)
+int32_t namcos22_state::pointram_read(offs_t offs) // called from point_read
{
- if (addr < 0)
- return -1;
-
- // point rom
- else if (addr < m_pointrom_size)
- return m_pointrom[addr];
-
// point ram, only used in ram test?
int32_t result = 0;
if (m_is_ss22)
{
- if (addr >= 0xf80000 && addr < 0xfa0000)
- result = m_pointram[addr - 0xf80000];
+ if (offs >= 0xf80000 && offs < 0xfa0000)
+ result = m_pointram[offs - 0xf80000];
else return -1;
}
else
{
- if (addr >= 0xf00000 && addr < 0xf20000)
- result = m_pointram[addr - 0xf00000];
+ if (offs >= 0xf00000 && offs < 0xf20000)
+ result = m_pointram[offs - 0xf00000];
else return -1;
}
@@ -2163,12 +2156,12 @@ WRITE16_MEMBER(namcos22_state::point_hiword_w)
READ16_MEMBER(namcos22_state::point_loword_r)
{
- return point_read(m_point_address & 0x00ffffff) & 0xffff;
+ return point_read(m_point_address) & 0xffff;
}
READ16_MEMBER(namcos22_state::point_hiword_ir)
{
- return point_read(m_point_address++ & 0x00ffffff) >> 16 & 0xffff;
+ return point_read(m_point_address++) >> 16 & 0xffff;
}
@@ -2219,7 +2212,7 @@ READ16_MEMBER(namcos22_state::pdp_begin_r)
/* read word from point ram */
srcAddr = pdp_polygonram_read(offs++); /* 32 bit PointRAM address */
dstAddr = pdp_polygonram_read(offs++); /* CommRAM address; receives 24 bit PointRAM data */
- data = point_read(srcAddr & 0x00ffffff);
+ data = point_read(srcAddr);
pdp_polygonram_write(dstAddr, data);
break;
@@ -2242,7 +2235,7 @@ READ16_MEMBER(namcos22_state::pdp_begin_r)
numWords = pdp_polygonram_read(offs++); /* block size */
while (numWords--)
{
- data = point_read(srcAddr++ & 0x00ffffff);
+ data = point_read(srcAddr++);
pdp_polygonram_write(dstAddr++, data);
}
break;
@@ -2265,7 +2258,7 @@ READ16_MEMBER(namcos22_state::pdp_begin_r)
numWords = pdp_polygonram_read(offs++);
while (numWords--)
{
- data = point_read(srcAddr++ & 0x00ffffff);
+ data = point_read(srcAddr++);
point_write(dstAddr++, data);
}
break;
diff --git a/src/mame/includes/namcos22.h b/src/mame/includes/namcos22.h
index d05ff6ade3c..4e84b25cc9a 100644
--- a/src/mame/includes/namcos22.h
+++ b/src/mame/includes/namcos22.h
@@ -382,6 +382,8 @@ private:
uint32_t pdp_polygonram_read(offs_t offs);
void pdp_polygonram_write(offs_t offs, uint32_t data);
void point_write(offs_t offs, uint32_t data);
+ int32_t pointram_read(offs_t offs);
+ inline int32_t point_read(offs_t offs) { offs &= 0x00ffffff; return (offs < m_pointrom_size) ? m_pointrom[offs] : pointram_read(offs); }
void master_enable(bool enable);
void slave_enable(bool enable);
@@ -402,7 +404,6 @@ private:
void slavesim_handle_233002(const int32_t *src);
void simulate_slavedsp(bitmap_rgb32 &bitmap);
- int32_t point_read(int32_t addr);
void init_tables();
void update_mixer();
void update_palette();
diff --git a/src/mame/video/namcos22.cpp b/src/mame/video/namcos22.cpp
index e85f9f2bcb4..7bea57b42c7 100644
--- a/src/mame/video/namcos22.cpp
+++ b/src/mame/video/namcos22.cpp
@@ -23,7 +23,7 @@
* + cybrcomm/victlapw namco logo screen after attract demo
* + airco22b title logo after attract demo
* + aquajet namco logo/game over after ending
- * - window clipping is wrong in acedrvrw, victlapw (see rear-view mirrors)
+ * - window clipping is wrong in acedrvrw, victlapw (see rear-view mirrors), and alpinr2b character selection screen
* - ridgerac waving flag title screen is missing, just an empty beach scenery instead
* - global offset is wrong in non-super22 servicemode video test, and above that, it flickers in acedrvrw, victlapw
* - dirtdash polys are broken at the start section of the mountain level, maybe bad rom?