continued refactoring some video system sprite rendering, bringing code closer together for the 2nd sprite types by Haze (no whatsnew)

This commit is contained in:
Miodrag Milanovic 2012-11-07 08:37:43 +00:00
parent 001d14eba9
commit ca80e04681
8 changed files with 204 additions and 169 deletions

View File

@ -1347,6 +1347,8 @@ static MACHINE_CONFIG_START( pspikes, aerofgt_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,pspikes)
@ -1447,6 +1449,7 @@ static MACHINE_CONFIG_START( pspikesc, aerofgt_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,pspikes)
@ -1484,7 +1487,10 @@ static MACHINE_CONFIG_START( karatblz, aerofgt_state )
MCFG_PALETTE_LENGTH(1024)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_DEVICE_ADD("vsystem_spr_ol2", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_ol2_tile_callback )
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,karatblz)
@ -1527,6 +1533,7 @@ static MACHINE_CONFIG_START( spinlbrk, aerofgt_state )
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_DEVICE_ADD("vsystem_spr_ol2", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_ol2_tile_callback )
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,spinlbrk)
@ -1568,7 +1575,9 @@ static MACHINE_CONFIG_START( turbofrc, aerofgt_state )
MCFG_PALETTE_LENGTH(1024)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_DEVICE_ADD("vsystem_spr_ol2", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_ol2_tile_callback )
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,turbofrc)
@ -1611,8 +1620,10 @@ static MACHINE_CONFIG_START( aerofgtb, aerofgt_state )
MCFG_PALETTE_LENGTH(1024)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_DEVICE_ADD("vsystem_spr_ol2", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_ol2_tile_callback )
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,turbofrc)
/* sound hardware */
@ -1760,6 +1771,7 @@ static MACHINE_CONFIG_START( wbbc97, aerofgt_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( aerofgt_state, aerofgt_old_tile_callback )
MCFG_VIDEO_START_OVERRIDE(aerofgt_state,wbbc97)

View File

@ -477,7 +477,9 @@ static MACHINE_CONFIG_START( f1gp, f1gp_state )
MCFG_PALETTE_LENGTH(2048)
MCFG_DEVICE_ADD("vsystem_spr_old", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( f1gp_state, f1gp_old_tile_callback )
MCFG_DEVICE_ADD("vsystem_spr_ol2", VSYSTEM_SPR2, 0)
MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( f1gp_state, f1gp_ol2_tile_callback )
MCFG_VIDEO_START_OVERRIDE(f1gp_state,f1gp)

View File

@ -52,6 +52,9 @@ public:
int m_spikes91_lookup;
UINT32 aerofgt_tile_callback( UINT32 code );
UINT32 aerofgt_old_tile_callback( UINT32 code );
UINT32 aerofgt_ol2_tile_callback( UINT32 code );
/* misc */
int m_pending_command;

View File

@ -54,6 +54,8 @@ public:
int m_gfxctrl;
int m_scroll[2];
UINT32 f1gp2_tile_callback( UINT32 code );
UINT32 f1gp_old_tile_callback( UINT32 code );
UINT32 f1gp_ol2_tile_callback( UINT32 code );
/* misc */
int m_pending_command;

View File

@ -119,8 +119,6 @@ VIDEO_START_MEMBER(aerofgt_state,karatblz)
VIDEO_START_MEMBER(aerofgt_state,spinlbrk)
{
int i;
m_bg1_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(aerofgt_state::spinlbrk_bg1_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
m_bg2_tilemap = &machine().tilemap().create(tilemap_get_info_delegate(FUNC(aerofgt_state::karatblz_bg2_tile_info),this), TILEMAP_SCAN_ROWS, 8, 8, 64, 64);
@ -134,14 +132,6 @@ VIDEO_START_MEMBER(aerofgt_state,spinlbrk)
/* enemy sprites use ROM instead of RAM */
m_spriteram2.set_target(reinterpret_cast<UINT16 *>(memregion("gfx5")->base()), 0x20000);
/* front sprites are direct maps */
m_spriteram1.set_target(m_spriteram2 + m_spriteram2.bytes() / 2, 0x4000);
for (i = 0; i < m_spriteram1.bytes() / 2; i++)
{
m_spriteram1[i] = i;
}
aerofgt_register_state_globals(machine());
}
@ -159,7 +149,7 @@ VIDEO_START_MEMBER(aerofgt_state,turbofrc)
}
/* new hw type */
UINT32 aerofgt_state::aerofgt_tile_callback( UINT32 code )
{
return m_spriteram1[code&0x7fff];
@ -168,6 +158,17 @@ UINT32 aerofgt_state::aerofgt_tile_callback( UINT32 code )
/* old hw type */
UINT32 aerofgt_state::aerofgt_old_tile_callback( UINT32 code )
{
return m_spriteram1[code % (m_spriteram1.bytes()/2)];
}
UINT32 aerofgt_state::aerofgt_ol2_tile_callback( UINT32 code )
{
return m_spriteram2[code % (m_spriteram2.bytes()/2)];
}
/***************************************************************************
@ -303,8 +304,8 @@ UINT32 aerofgt_state::screen_update_pspikes(screen_device &screen, bitmap_ind16
machine().priority_bitmap.fill(0, cliprect);
m_bg1_tilemap->draw(bitmap, cliprect, 0, 0);
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, 0);
return 0;
}
@ -322,11 +323,11 @@ UINT32 aerofgt_state::screen_update_karatblz(screen_device &screen, bitmap_ind16
m_bg2_tilemap->draw(bitmap, cliprect, 0, 0);
/* we use the priority buffer so sprites are drawn front to back */
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_spriteram2,m_spriteram2.bytes(),m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_spriteram2,m_spriteram2.bytes(),m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, 0);
return 0;
}
@ -348,11 +349,11 @@ UINT32 aerofgt_state::screen_update_spinlbrk(screen_device &screen, bitmap_ind16
m_bg2_tilemap->draw(bitmap, cliprect, 0, 1);
/* we use the priority buffer so sprites are drawn front to back */
m_spr_old->spinlbrk_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old->spinlbrk_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old->spinlbrk_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old->spinlbrk_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old2->spinlbrk_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_spriteram2,m_spriteram2.bytes(),m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old2->spinlbrk_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_spriteram2,m_spriteram2.bytes(),m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old2->spinlbrk_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old2->spinlbrk_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, -1);
return 0;
}
@ -375,11 +376,11 @@ UINT32 aerofgt_state::screen_update_turbofrc(screen_device &screen, bitmap_ind16
m_bg2_tilemap->draw(bitmap, cliprect, 0, 1);
/* we use the priority buffer so sprites are drawn front to back */
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_spriteram2,m_spriteram2.bytes(),m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, -1); //enemy
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_spriteram2,m_spriteram2.bytes(),m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, 0); //enemy
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, -1); //enemy
m_spr_old2->turbofrc_draw_sprites(m_spriteram3+0x200,m_spriteram3.bytes()/2,m_sprite_gfx+1,m_spritepalettebank, machine(), bitmap, cliprect, 0); //enemy
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, -1); //ship
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, 0); //intro
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, -1); //ship
m_spr_old->turbofrc_draw_sprites(m_spriteram3+0x000,m_spriteram3.bytes()/2,m_sprite_gfx+0,m_spritepalettebank, machine(), bitmap, cliprect, 0); //intro
return 0;
}
@ -846,7 +847,7 @@ UINT32 aerofgt_state::screen_update_wbbc97(screen_device &screen, bitmap_rgb32 &
m_bg1_tilemap->draw(bitmap, cliprect, TILEMAP_DRAW_OPAQUE, 0);
}
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_spriteram1,m_spriteram1.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, 0);
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, -1);
m_spr_old->turbofrc_draw_sprites(m_spriteram3,m_spriteram3.bytes(),m_sprite_gfx,m_spritepalettebank, machine(), bitmap, cliprect, 0);
return 0;
}

View File

@ -72,11 +72,24 @@ VIDEO_START_MEMBER(f1gp_state,f1gpb)
// save_pointer(NAME(m_zoomdata), memregion("gfx4")->bytes());
}
/* new hw type */
UINT32 f1gp_state::f1gp2_tile_callback( UINT32 code )
{
return m_sprcgram[code&0x3fff];
}
/* old hw type */
UINT32 f1gp_state::f1gp_old_tile_callback( UINT32 code )
{
return m_spr1cgram[code % (m_spr1cgram.bytes()/2)];
}
UINT32 f1gp_state::f1gp_ol2_tile_callback( UINT32 code )
{
return m_spr2cgram[code % (m_spr2cgram.bytes()/2)];
}
VIDEO_START_MEMBER(f1gp_state,f1gp2)
{
@ -186,13 +199,13 @@ UINT32 f1gp_state::screen_update_f1gp(screen_device &screen, bitmap_ind16 &bitma
/* quick kludge for "continue" screen priority */
if (m_gfxctrl == 0x00)
{
m_spr_old->f1gp_draw_sprites(1, m_spr1vram, m_spr1cgram ,m_spr1cgram.bytes(), machine(), bitmap, cliprect, 0x02);
m_spr_old2->f1gp_draw_sprites(2, m_spr2vram, m_spr2cgram, m_spr2cgram.bytes(), machine(), bitmap, cliprect, 0x02);
m_spr_old->f1gp_draw_sprites(1, m_spr1vram, machine(), bitmap, cliprect, 0x02);
m_spr_old2->f1gp_draw_sprites(2, m_spr2vram, machine(), bitmap, cliprect, 0x02);
}
else
{
m_spr_old->f1gp_draw_sprites(1, m_spr1vram, m_spr1cgram, m_spr1cgram.bytes(), machine(), bitmap, cliprect, 0x00);
m_spr_old2->f1gp_draw_sprites(2, m_spr2vram, m_spr2cgram, m_spr2cgram.bytes(), machine(), bitmap, cliprect, 0x02);
m_spr_old->f1gp_draw_sprites(1, m_spr1vram, machine(), bitmap, cliprect, 0x00);
m_spr_old2->f1gp_draw_sprites(2, m_spr2vram, machine(), bitmap, cliprect, 0x02);
}
return 0;
}

View File

@ -25,13 +25,25 @@ const device_type VSYSTEM_SPR2 = &device_creator<vsystem_spr2_device>;
vsystem_spr2_device::vsystem_spr2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
: device_t(mconfig, VSYSTEM_SPR2, "vsystem_spr2_device", tag, owner, clock)
{
m_newtilecb = vsystem_tile2_indirection_delegate(FUNC(vsystem_spr2_device::tile_callback_noindirect), this);
}
void vsystem_spr2_device::set_tile_indirect_cb(device_t &device,vsystem_tile2_indirection_delegate newtilecb)
{
vsystem_spr2_device &dev = downcast<vsystem_spr2_device &>(device);
dev.m_newtilecb = newtilecb;
}
UINT32 vsystem_spr2_device::tile_callback_noindirect(UINT32 tile)
{
return tile;
}
void vsystem_spr2_device::device_start()
{
// bind our handler
m_newtilecb.bind_relative_to(*owner());
}
void vsystem_spr2_device::device_reset()
@ -66,10 +78,16 @@ int vsystem_spr2_device::get_sprite_attributes(UINT16* ram)
return 1;
}
void vsystem_spr2_device::handle_xsize_map_inc(void)
{
if (curr_sprite.xsize == 2) curr_sprite.map += 1;
if (curr_sprite.xsize == 4) curr_sprite.map += 3;
if (curr_sprite.xsize == 5) curr_sprite.map += 2;
if (curr_sprite.xsize == 6) curr_sprite.map += 1;
}
template<class _BitmapClass>
void vsystem_spr2_device::turbofrc_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri )
void vsystem_spr2_device::turbofrc_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{
int attr_start, base, first;
base = 0;//chip * 0x0200;
@ -121,7 +139,7 @@ void vsystem_spr2_device::turbofrc_draw_sprites_common( UINT16* spriteram3, int
else
sx = ((curr_sprite.ox + curr_sprite.zoomx * x / 2 + 16) & 0x1ff) - 16;
curr = spriteram1[curr_sprite.map % (spriteram1_bytes/2)];
curr = m_newtilecb(curr_sprite.map++);
pdrawgfxzoom_transpen(bitmap,cliprect,machine.gfx[sprite_gfx],
curr,
@ -130,26 +148,21 @@ void vsystem_spr2_device::turbofrc_draw_sprites_common( UINT16* spriteram3, int
sx,sy,
curr_sprite.zoomx << 11, curr_sprite.zoomy << 11,
machine.priority_bitmap,curr_sprite.pri ? 0 : 2,15);
curr_sprite.map++;
}
if (curr_sprite.xsize == 2) curr_sprite.map += 1;
if (curr_sprite.xsize == 4) curr_sprite.map += 3;
if (curr_sprite.xsize == 5) curr_sprite.map += 2;
if (curr_sprite.xsize == 6) curr_sprite.map += 1;
handle_xsize_map_inc();
}
}
}
void vsystem_spr2_device::turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ turbofrc_draw_sprites_common( spriteram3, spriteram3_bytes, spriteram1, spriteram1_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
void vsystem_spr2_device::turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ turbofrc_draw_sprites_common( spriteram3, spriteram3_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
void vsystem_spr2_device::turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ turbofrc_draw_sprites_common( spriteram3, spriteram3_bytes, spriteram1, spriteram1_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
void vsystem_spr2_device::turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ turbofrc_draw_sprites_common( spriteram3, spriteram3_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
template<class _BitmapClass>
void vsystem_spr2_device::spinlbrk_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri )
void vsystem_spr2_device::spinlbrk_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{
int attr_start, base, first;
base = 0;//chip * 0x0200;
@ -199,7 +212,7 @@ void vsystem_spr2_device::spinlbrk_draw_sprites_common( UINT16* spriteram3, int
else
sx = ((curr_sprite.ox + curr_sprite.zoomx * x / 2 + 16) & 0x1ff) - 16;
curr = spriteram1[curr_sprite.map % (spriteram1_bytes/2)];
curr = m_newtilecb(curr_sprite.map++);
pdrawgfxzoom_transpen(bitmap,cliprect,machine.gfx[sprite_gfx],
curr,
@ -208,26 +221,21 @@ void vsystem_spr2_device::spinlbrk_draw_sprites_common( UINT16* spriteram3, int
sx,sy,
curr_sprite.zoomx << 11, curr_sprite.zoomy << 11,
machine.priority_bitmap,curr_sprite.pri ? 2 : 0,15);
curr_sprite.map++;
}
if (curr_sprite.xsize == 2) curr_sprite.map += 1;
if (curr_sprite.xsize == 4) curr_sprite.map += 3;
if (curr_sprite.xsize == 5) curr_sprite.map += 2;
if (curr_sprite.xsize == 6) curr_sprite.map += 1;
handle_xsize_map_inc();
}
}
}
void vsystem_spr2_device::spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ spinlbrk_draw_sprites_common( spriteram3, spriteram3_bytes, spriteram1, spriteram1_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
void vsystem_spr2_device::spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ spinlbrk_draw_sprites_common( spriteram3, spriteram3_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
void vsystem_spr2_device::spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ spinlbrk_draw_sprites_common( spriteram3, spriteram3_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
void vsystem_spr2_device::spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri )
{ spinlbrk_draw_sprites_common( spriteram3, spriteram3_bytes, spriteram1, spriteram1_bytes, sprite_gfx, spritepalettebank, machine, bitmap, cliprect, chip_disabled_pri ); }
// like above but no secondary indirection?
void vsystem_spr2_device::welltris_draw_sprites( UINT16* spriteram, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect)
{
static const UINT8 zoomtable[16] = { 0,7,14,20,25,30,34,38,42,46,49,52,54,57,59,61 };
@ -241,11 +249,8 @@ void vsystem_spr2_device::welltris_draw_sprites( UINT16* spriteram, int spritepa
continue;
curr_sprite.map&=0x1fff;
curr_sprite.ysize++;
curr_sprite.xsize++;
curr_sprite.color += (0x10 * spritepalettebank);
int zoomed = (curr_sprite.zoomx | curr_sprite.zoomy);
int xt, yt;
@ -259,77 +264,61 @@ void vsystem_spr2_device::welltris_draw_sprites( UINT16* spriteram, int spritepa
/* normal case */
if (!curr_sprite.flipx && !curr_sprite.flipy) {
for (yt = 0; yt < curr_sprite.ysize; yt++) {
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++) {
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 0, 0,
curr_sprite.ox + xt * 16, curr_sprite.oy + yt * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 0, 0,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++) {
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr, curr_sprite.color, 0, 0,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
if (curr_sprite.xsize == 3) curr_sprite.map += 1;
if (curr_sprite.xsize == 5) curr_sprite.map += 3;
if (curr_sprite.xsize == 6) curr_sprite.map += 2;
if (curr_sprite.xsize == 7) curr_sprite.map += 1;
handle_xsize_map_inc();
}
}
/* curr_sprite.flipxped case */
else if (curr_sprite.flipx && !curr_sprite.flipy) {
for (yt = 0; yt < curr_sprite.ysize; yt++) {
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++) {
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 1, 0,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * 16, curr_sprite.oy + yt * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 1, 0,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++) {
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr, curr_sprite.color, 1, 0,
curr_sprite.ox + (curr_sprite.xsize - xt) * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
if (curr_sprite.xsize == 3) curr_sprite.map += 1;
if (curr_sprite.xsize == 5) curr_sprite.map += 3;
if (curr_sprite.xsize == 6) curr_sprite.map += 2;
if (curr_sprite.xsize == 7) curr_sprite.map += 1;
handle_xsize_map_inc();
}
}
/* curr_sprite.flipyped case */
else if (!curr_sprite.flipx && curr_sprite.flipy) {
for (yt = 0; yt < curr_sprite.ysize; yt++) {
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++) {
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 0, 1,
curr_sprite.ox + xt * 16, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 0, 1,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++) {
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr, curr_sprite.color, 0, 1,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
if (curr_sprite.xsize == 3) curr_sprite.map += 1;
if (curr_sprite.xsize == 5) curr_sprite.map += 3;
if (curr_sprite.xsize == 6) curr_sprite.map += 2;
if (curr_sprite.xsize == 7) curr_sprite.map += 1;
handle_xsize_map_inc();
}
}
/* x & curr_sprite.flipyped case */
else {
for (yt = 0; yt < curr_sprite.ysize; yt++) {
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++) {
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 1, 1,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * 16, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr_sprite.map, curr_sprite.color, 1, 1,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++) {
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, machine.gfx[1], curr, curr_sprite.color, 1, 1,
curr_sprite.ox + (curr_sprite.xsize - xt) * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
if (curr_sprite.xsize == 3) curr_sprite.map += 1;
if (curr_sprite.xsize == 5) curr_sprite.map += 3;
if (curr_sprite.xsize == 6) curr_sprite.map += 2;
if (curr_sprite.xsize == 7) curr_sprite.map += 1;
handle_xsize_map_inc();
}
}
}
@ -337,7 +326,7 @@ void vsystem_spr2_device::welltris_draw_sprites( UINT16* spriteram, int spritepa
void vsystem_spr2_device::f1gp_draw_sprites( int gfxrgn, UINT16* sprvram, UINT16* sprcgram, int sprcgram_bytes, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int primask )
void vsystem_spr2_device::f1gp_draw_sprites( int gfxrgn, UINT16* sprvram, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int primask )
{
int attr_start, first;
UINT16 *spram = sprvram;
@ -372,7 +361,7 @@ void vsystem_spr2_device::f1gp_draw_sprites( int gfxrgn, UINT16* sprvram, UINT16
if (curr_sprite.flipx) sx = ((curr_sprite.ox + curr_sprite.zoomx * (curr_sprite.xsize - x) + 16) & 0x1ff) - 16;
else sx = ((curr_sprite.ox + curr_sprite.zoomx * x + 16) & 0x1ff) - 16;
curr = sprcgram[curr_sprite.map % (sprcgram_bytes / 2)];
curr = m_newtilecb(curr_sprite.map++);
pdrawgfxzoom_transpen(bitmap,cliprect,machine.gfx[gfxrgn],
curr,
@ -383,13 +372,8 @@ void vsystem_spr2_device::f1gp_draw_sprites( int gfxrgn, UINT16* sprvram, UINT16
machine.priority_bitmap,
// pri ? 0 : 0x2);
primask,15);
curr_sprite.map++;
}
if (curr_sprite.xsize == 2) curr_sprite.map += 1;
if (curr_sprite.xsize == 4) curr_sprite.map += 3;
if (curr_sprite.xsize == 5) curr_sprite.map += 2;
if (curr_sprite.xsize == 6) curr_sprite.map += 1;
handle_xsize_map_inc();
}
}
}
@ -414,8 +398,6 @@ void vsystem_spr2_device::draw_sprites_pipedrm( UINT8* spriteram, int spriteram_
if (!get_sprite_attributes((UINT16*)&spriteram[offs]))
continue;
curr_sprite.ysize++;
curr_sprite.xsize++;
curr_sprite.oy -= 6;
curr_sprite.ox -= 13;
@ -424,7 +406,6 @@ void vsystem_spr2_device::draw_sprites_pipedrm( UINT8* spriteram, int spriteram_
int xt, yt;
int zoomed = (curr_sprite.zoomx | curr_sprite.zoomy);
/* compute the zoom factor -- stolen from aerofgt.c */
curr_sprite.zoomx = 16 - zoomtable[curr_sprite.zoomx] / 8;
@ -448,57 +429,69 @@ void vsystem_spr2_device::draw_sprites_pipedrm( UINT8* spriteram, int spriteram_
/* normal case */
if (!curr_sprite.flipx && !curr_sprite.flipy)
{
for (yt = 0; yt < curr_sprite.ysize; yt++)
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++)
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 0, 0,
curr_sprite.ox + xt * 16, curr_sprite.oy + yt * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 0, 0,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++)
{
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr, curr_sprite.color, 0, 0,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
handle_xsize_map_inc();
}
}
/* curr_sprite.flipxped case */
else if (curr_sprite.flipx && !curr_sprite.flipy)
{
for (yt = 0; yt < curr_sprite.ysize; yt++)
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++)
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 1, 0,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * 16, curr_sprite.oy + yt * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 1, 0,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++)
{
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr, curr_sprite.color, 1, 0,
curr_sprite.ox + (curr_sprite.xsize - xt) * curr_sprite.zoomx, curr_sprite.oy + yt * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
handle_xsize_map_inc();
}
}
/* curr_sprite.flipyped case */
else if (!curr_sprite.flipx && curr_sprite.flipy)
{
for (yt = 0; yt < curr_sprite.ysize; yt++)
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++)
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 0, 1,
curr_sprite.ox + xt * 16, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 0, 1,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++)
{
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr, curr_sprite.color, 0, 1,
curr_sprite.ox + xt * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
handle_xsize_map_inc();
}
}
/* x & curr_sprite.flipyped case */
else
{
for (yt = 0; yt < curr_sprite.ysize; yt++)
for (xt = 0; xt < curr_sprite.xsize; xt++, curr_sprite.map++)
if (!zoomed)
drawgfx_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 1, 1,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * 16, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * 16, 15);
else
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr_sprite.map, curr_sprite.color, 1, 1,
curr_sprite.ox + (curr_sprite.xsize - 1 - xt) * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - 1 - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
for (yt = 0; yt <= curr_sprite.ysize; yt++)
{
for (xt = 0; xt <= curr_sprite.xsize; xt++)
{
int curr = m_newtilecb(curr_sprite.map++);
drawgfxzoom_transpen(bitmap, cliprect, screen.machine().gfx[2], curr, curr_sprite.color, 1, 1,
curr_sprite.ox + (curr_sprite.xsize - xt) * curr_sprite.zoomx, curr_sprite.oy + (curr_sprite.ysize - yt) * curr_sprite.zoomy,
0x1000 * curr_sprite.zoomx, 0x1000 * curr_sprite.zoomy, 15);
}
handle_xsize_map_inc();
}
}
}
}

View File

@ -1,11 +1,18 @@
// Video System Sprites
typedef device_delegate<UINT32 (UINT32)> vsystem_tile2_indirection_delegate;
#define MCFG_VSYSTEM_SPR2_SET_TILE_INDIRECT( _class, _method) \
vsystem_spr2_device::set_tile_indirect_cb(*device, vsystem_tile2_indirection_delegate(&_class::_method, #_class "::" #_method, NULL, (_class *)0)); \
class vsystem_spr2_device : public device_t
{
public:
vsystem_spr2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
static void set_tile_indirect_cb(device_t &device,vsystem_tile2_indirection_delegate newtilecb);
struct vsystem_sprite_attributes
{
int ox;
@ -22,23 +29,25 @@ public:
} curr_sprite;
int get_sprite_attributes(UINT16* ram);
void handle_xsize_map_inc(void);
vsystem_tile2_indirection_delegate m_newtilecb;
UINT32 tile_callback_noindirect(UINT32 tile);
template<class _BitmapClass>
void turbofrc_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void turbofrc_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void turbofrc_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
template<class _BitmapClass>
void spinlbrk_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void spinlbrk_draw_sprites_common( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, _BitmapClass &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, UINT16* spriteram1, int spriteram1_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void spinlbrk_draw_sprites( UINT16* spriteram3, int spriteram3_bytes, int sprite_gfx, int spritepalettebank, running_machine &machine, bitmap_rgb32 &bitmap, const rectangle &cliprect, int chip_disabled_pri );
void welltris_draw_sprites( UINT16* spriteram, int spritepalettebank, running_machine &machine, bitmap_ind16 &bitmap,const rectangle &cliprect);
void f1gp_draw_sprites( int gfxrgn, UINT16* sprvram, UINT16* sprcgram, int sprcgram_bytes, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int primask );
void f1gp_draw_sprites( int gfxrgn, UINT16* sprvram, running_machine &machine, bitmap_ind16 &bitmap, const rectangle &cliprect, int primask );
void draw_sprites_pipedrm( UINT8* spriteram, int spriteram_bytes, int flipscreen, screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int draw_priority );
protected: