summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/video/taito_h.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/video/taito_h.cpp')
-rw-r--r--src/mame/video/taito_h.cpp208
1 files changed, 12 insertions, 196 deletions
diff --git a/src/mame/video/taito_h.cpp b/src/mame/video/taito_h.cpp
index 9284f94b6ac..8153dc5893a 100644
--- a/src/mame/video/taito_h.cpp
+++ b/src/mame/video/taito_h.cpp
@@ -51,241 +51,57 @@ sprite RAM
#include "includes/taito_h.h"
-/* These are hand-tuned values */
-static const int zoomy_conv_table[] =
-{
-/* +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +a +b +c +d +e +f */
- 0x00,0x01,0x01,0x02,0x02,0x03,0x04,0x05, 0x06,0x06,0x07,0x08,0x09,0x0a,0x0a,0x0b, /* 0x00 */
- 0x0b,0x0c,0x0c,0x0d,0x0e,0x0e,0x0f,0x10, 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x16,
- 0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e, 0x1f,0x20,0x21,0x22,0x24,0x25,0x26,0x27,
- 0x28,0x2a,0x2b,0x2c,0x2e,0x30,0x31,0x32, 0x34,0x36,0x37,0x38,0x3a,0x3c,0x3e,0x3f,
-
- 0x40,0x41,0x42,0x42,0x43,0x43,0x44,0x44, 0x45,0x45,0x46,0x46,0x47,0x47,0x48,0x49, /* 0x40 */
- 0x4a,0x4a,0x4b,0x4b,0x4c,0x4d,0x4e,0x4f, 0x4f,0x50,0x51,0x51,0x52,0x53,0x54,0x55,
- 0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d, 0x5e,0x5f,0x60,0x61,0x62,0x63,0x64,0x66,
- 0x67,0x68,0x6a,0x6b,0x6c,0x6e,0x6f,0x71, 0x72,0x74,0x76,0x78,0x80,0x7b,0x7d,0x7f
-};
-
-inline void taitoh_state::draw_single_sprite(bitmap_ind16 &bitmap, const rectangle &cliprect, u32 tile_offs, int sx, int sy, int ysize, int dx, int dy, int zx, int zy)
-{
- int y = sy;
- for (int j = 0; j < ysize; j++)
- {
- int x = sx;
- for (int k = 0; k < 4; k++)
- {
- if (tile_offs >= 0x1000) /* or dleague pitcher gets blanked */
- {
- const u32 tile = m_tc0080vco->cram_0_r(tile_offs) & 0x7fff;
- const u32 color = m_tc0080vco->cram_1_r(tile_offs) & 0x001f;
- int flipx = m_tc0080vco->cram_1_r(tile_offs) & 0x0040;
- int flipy = m_tc0080vco->cram_1_r(tile_offs) & 0x0080;
-
- if (m_tc0080vco->flipscreen_r())
- {
- flipx ^= 0x0040;
- flipy ^= 0x0080;
- }
-
- m_gfxdecode->gfx(0)->zoom_transpen(bitmap,cliprect,
- tile,
- color,
- flipx, flipy,
- x, y,
- zx, zy, 0);
- }
- tile_offs++;
- x += dx;
- }
- y += dy;
- }
-}
-
/***************************************************************************
Screen refresh
***************************************************************************/
void taitoh_state::syvalion_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect)
{
- /* Y chain size is 16/32?/64/64? pixels. X chain size
- is always 64 pixels. */
-
- static const u8 size[] = { 1, 2, 4, 4 };
-
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{
- int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff;
- int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
- int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
- u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
- const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
+ m_tc0080vco->get_sprite_params(offs, false);
- if (tile_offs)
+ if (m_tc0080vco->get_sprite_tile_offs())
{
- int dx, ex, zx;
- /* The increasing ratio of expansion is different whether zoom value */
- /* is less or more than 63. */
- if (zoomx < 63)
- {
- dx = 8 + (zoomx + 2) / 8;
- ex = (zoomx + 2) % 8;
- zx = ((dx << 1) + ex) << 11;
- }
- else
- {
- dx = 16 + (zoomx - 63) / 4;
- ex = (zoomx - 63) % 4;
- zx = (dx + ex) << 12;
- }
-
- if (x0 >= 0x200) x0 -= 0x400;
- if (y0 >= 0x200) y0 -= 0x400;
-
- if (m_tc0080vco->flipscreen_r())
- {
- x0 = 497 - x0;
- y0 = 498 - y0;
- dx = -dx;
- }
- else
- {
- x0 += 1;
- y0 += 2;
- }
-
- draw_single_sprite(bitmap, cliprect, tile_offs, x0, y0, ysize, dx, dx, zx, zx);
+ m_tc0080vco->draw_single_sprite(bitmap, cliprect);
}
}
}
void taitoh_state::recordbr_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
{
- /* Y chain size is 16/32?/64/64? pixels. X chain size
- is always 64 pixels. */
-
- static const u8 size[] = { 1, 2, 4, 4 };
-
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{
if (offs < 0x01b0 && priority == 0) continue;
if (offs >= 0x01b0 && priority == 1) continue;
- int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff;
- int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
- int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
- int zoomy = (m_tc0080vco->sprram_r(offs + 2) & 0x007f);
- u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
- const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
+ m_tc0080vco->get_sprite_params(offs, true);
- if (tile_offs)
+ if (m_tc0080vco->get_sprite_tile_offs())
{
- int dx, dy, ex, ey, zx, zy;
- /* Convert zoomy value to real value as zoomx */
- zoomy = zoomy_conv_table[zoomy];
-
- if (zoomx < 63)
- {
- dx = 8 + (zoomx + 2) / 8;
- ex = (zoomx + 2) % 8;
- zx = ((dx << 1) + ex) << 11;
- }
- else
- {
- dx = 16 + (zoomx - 63) / 4;
- ex = (zoomx - 63) % 4;
- zx = (dx + ex) << 12;
- }
-
- if (zoomy < 63)
- {
- dy = 8 + (zoomy + 2) / 8;
- ey = (zoomy + 2) % 8;
- zy = ((dy << 1) + ey) << 11;
- }
- else
- {
- dy = 16 + (zoomy - 63) / 4;
- ey = (zoomy - 63) % 4;
- zy = (dy + ey) << 12;
- }
-
- if (x0 >= 0x200) x0 -= 0x400;
- if (y0 >= 0x200) y0 -= 0x400;
-
- if (m_tc0080vco->flipscreen_r())
- {
- x0 = 497 - x0;
- y0 = 498 - y0;
- dx = -dx;
- dy = -dy;
- }
- else
- {
- x0 += 1;
- y0 += 2;
- }
-
- draw_single_sprite(bitmap, cliprect, tile_offs, x0, y0, ysize, dx, dy, zx, zy);
+ m_tc0080vco->draw_single_sprite(bitmap, cliprect);
}
}
}
void taitoh_state::dleague_draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect, int priority)
{
- /* Y chain size is 16/32?/64/64? pixels. X chain size
- is always 64 pixels. */
-
- static const u8 size[] = { 1, 2, 4, 4 };
-
for (int offs = 0x03f8 / 2; offs >= 0; offs -= 0x008 / 2)
{
- int x0 = m_tc0080vco->sprram_r(offs + 1) & 0x3ff;
- int y0 = m_tc0080vco->sprram_r(offs + 0) & 0x3ff;
- int zoomx = (m_tc0080vco->sprram_r(offs + 2) & 0x7f00) >> 8;
- u32 tile_offs = (m_tc0080vco->sprram_r(offs + 3) & 0x1fff) << 2;
- int pribit = (m_tc0080vco->sprram_r(offs + 0) & 0x1000) >> 12;
- const u8 ysize = size[(m_tc0080vco->sprram_r(offs) & 0x0c00) >> 10];
-
- if (tile_offs)
+ m_tc0080vco->get_sprite_params(offs, false);
+ int pribit = (m_tc0080vco->sprram_r(offs + 0) & 0x1000) >> 12;
+
+ if (m_tc0080vco->get_sprite_tile_offs())
{
- int dx, ex, zx;
- /* The increasing ratio of expansion is different whether zoom value */
- /* is less or more than 63. */
- if (zoomx < 63)
- {
- dx = 8 + (zoomx + 2) / 8;
- ex = (zoomx + 2) % 8;
- zx = ((dx << 1) + ex) << 11;
+ if (m_tc0080vco->get_sprite_zoomx() < 63)
pribit = 0;
- }
- else
- {
- dx = 16 + (zoomx - 63) / 4;
- ex = (zoomx - 63) % 4;
- zx = (dx + ex) << 12;
- }
if (m_tc0080vco->scrram_r(0x0002) & 0x8000)
pribit = 1;
- if (x0 >= 0x200) x0 -= 0x400;
- if (y0 >= 0x200) y0 -= 0x400;
-
- if (m_tc0080vco->flipscreen_r())
- {
- x0 = 497 - x0;
- y0 = 498 - y0;
- dx = -dx;
- }
- else
- {
- x0 += 1;
- y0 += 2;
- }
-
if (priority == pribit)
{
- draw_single_sprite(bitmap, cliprect, tile_offs, x0, y0, ysize, dx, dx, zx, zx);
+ m_tc0080vco->draw_single_sprite(bitmap, cliprect);
}
}
}