summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/tc0780fpa.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/tc0780fpa.cpp')
-rw-r--r--src/mame/video/tc0780fpa.cpp29
1 files changed, 14 insertions, 15 deletions
diff --git a/src/mame/video/tc0780fpa.cpp b/src/mame/video/tc0780fpa.cpp
index 431478cafa2..565a4b41442 100644
--- a/src/mame/video/tc0780fpa.cpp
+++ b/src/mame/video/tc0780fpa.cpp
@@ -1,5 +1,5 @@
// license:LGPL-2.1+
-// copyright-holders:Ville Linde, Angelo Salese, hap
+// copyright-holders:Ville Linde, Angelo Salese
// Taito TC0780FPA Polygon Renderer
@@ -125,7 +125,7 @@ void tc0780fpa_renderer::render_texture_scan(int32_t scanline, const extent_t &e
}
else
{
- iu = (tex_base_x + (((int)u >> 4) & 0x3f)) & 0x7ff;
+ iu = (tex_base_x + (((int)u >> 4) & ((0x08 << tex_wrap_x) - 1))) & 0x7ff;
}
if (!tex_wrap_y)
@@ -134,7 +134,7 @@ void tc0780fpa_renderer::render_texture_scan(int32_t scanline, const extent_t &e
}
else
{
- iv = (tex_base_y + (((int)v >> 4) & 0x3f)) & 0x7ff;
+ iv = (tex_base_y + (((int)v >> 4) & ((0x08 << tex_wrap_y) - 1))) & 0x7ff;
}
texel = m_texture[(iv * 2048) + iu];
@@ -156,7 +156,6 @@ void tc0780fpa_renderer::render_texture_scan(int32_t scanline, const extent_t &e
void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
{
vertex_t vert[4];
- int i;
uint16_t cmd = polygon_fifo[0];
@@ -207,7 +206,7 @@ void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
// 0x0b: Vertex 3 X
// 0x0c: Vertex 3 Z
- for (i=0; i < 3; i++)
+ for (int i=0; i < 3; i++)
{
vert[i].p[1] = polygon_fifo[ptr++];
vert[i].y = (int16_t)(polygon_fifo[ptr++]);
@@ -261,12 +260,12 @@ void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
extra.tex_base_x = ((texbase >> 0) & 0xff) << 4;
extra.tex_base_y = ((texbase >> 8) & 0xff) << 4;
- extra.tex_wrap_x = (cmd & 0xc0) ? 1 : 0;
- extra.tex_wrap_y = (cmd & 0x30) ? 1 : 0;
+ extra.tex_wrap_x = (cmd >> 6) & 3;
+ extra.tex_wrap_y = (cmd >> 4) & 3;
- for (i=0; i < 3; i++)
+ for (int i=0; i < 3; i++)
{
- vert[i].p[3] = polygon_fifo[ptr++] + 0.5; // palette
+ vert[i].p[3] = polygon_fifo[ptr++] + 0.5; // palette
vert[i].p[2] = (int16_t)(polygon_fifo[ptr++]);
vert[i].p[1] = (int16_t)(polygon_fifo[ptr++]);
vert[i].y = (int16_t)(polygon_fifo[ptr++]);
@@ -302,7 +301,7 @@ void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
// 0x0f: Vertex 4 X
// 0x10: Vertex 4 Z
- for (i=0; i < 4; i++)
+ for (int i=0; i < 4; i++)
{
vert[i].p[1] = polygon_fifo[ptr++];
vert[i].y = (int16_t)(polygon_fifo[ptr++]);
@@ -363,12 +362,12 @@ void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
extra.tex_base_x = ((texbase >> 0) & 0xff) << 4;
extra.tex_base_y = ((texbase >> 8) & 0xff) << 4;
- extra.tex_wrap_x = (cmd & 0xc0) ? 1 : 0;
- extra.tex_wrap_y = (cmd & 0x30) ? 1 : 0;
+ extra.tex_wrap_x = (cmd >> 6) & 3;
+ extra.tex_wrap_y = (cmd >> 4) & 3;
- for (i=0; i < 4; i++)
+ for (int i=0; i < 4; i++)
{
- vert[i].p[3] = polygon_fifo[ptr++] + 0.5; // palette
+ vert[i].p[3] = polygon_fifo[ptr++] + 0.5; // palette
vert[i].p[2] = (int16_t)(polygon_fifo[ptr++]);
vert[i].p[1] = (int16_t)(polygon_fifo[ptr++]);
vert[i].y = (int16_t)(polygon_fifo[ptr++]);
@@ -376,7 +375,7 @@ void tc0780fpa_renderer::render(uint16_t *polygon_fifo, int length)
vert[i].p[0] = (uint16_t)(polygon_fifo[ptr++]);
}
- if (vert[0].p[0] < 0x8000 && vert[1].p[0] < 0x8000 && vert[2].p[0] < 0x8000 && vert[3].p[0] < 0x8000)
+ if (vert[0].p[0] < 0xc000 && vert[1].p[0] < 0xc000 && vert[2].p[0] < 0xc000 && vert[3].p[0] < 0xc000)
{
render_polygon<4, 4>(m_cliprect, render_delegate(&tc0780fpa_renderer::render_texture_scan, this), vert);
}