diff options
Diffstat (limited to 'src/mame/video/tc0780fpa.cpp')
-rw-r--r-- | src/mame/video/tc0780fpa.cpp | 29 |
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); } |