SSV: improvements to flipscreen support [Roberto Zandona']

This commit is contained in:
Roberto Zandona 2011-01-13 23:00:28 +00:00
parent e731ef88b9
commit 803055c277
2 changed files with 44 additions and 7 deletions

View File

@ -1976,7 +1976,7 @@ static INPUT_PORTS_START( mslider )
PORT_DIPUNUSED_DIPLOC( 0x0080, 0x0080, "DSW1:8" ) /* Manual lists this dip as "Unused" */
PORT_MODIFY("DSW2") // IN1 - $210004
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION( "DSW2:1" )
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION( "DSW2:1" )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION( "DSW2:2" )
@ -2194,7 +2194,7 @@ static INPUT_PORTS_START( stmblade )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_MODIFY("DSW2") // IN1 - $210004
PORT_DIPNAME( 0x0001, 0x0000, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION( "DSW2:1" )
PORT_DIPNAME( 0x0001, 0x0001, DEF_STR( Flip_Screen ) ) PORT_DIPLOCATION( "DSW2:1" )
PORT_DIPSETTING( 0x0001, DEF_STR( Off ) )
PORT_DIPSETTING( 0x0000, DEF_STR( On ) )
PORT_DIPNAME( 0x0002, 0x0002, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION( "DSW2:2" )

View File

@ -287,7 +287,7 @@ VIDEO_START( gdfs )
1c0072-73 ---- ---- ---- ---- ?
1c0074-75 ---- ---- ---- ---- ?
-e-- ---- ---- ---- y sprite inversion
---c ---- ---- ---- x sprite inversion?
---c ---- ---- ---- x sprite inversion
---- ba98 ---- ---- ? 0101 for all games
---- ---- -6-- ---- y tilemap inversion?
---- ---- ---4 ---- x tilemap inversion?
@ -305,11 +305,11 @@ VIDEO_START( gdfs )
dynagear: 002b 002c 00d4 01c6 - 0001 0012 0102 0106
02fd 0000 0500 0000 - 0015 5940
???? ???? (flip)
03ed 5558 (flip)
eaglshot: 0021 002a 00ca 01c6 - 0001 0016 00f6 0106
0301 0000 0500 d000 - 0015 5940
???? ???? (flip)
03f1 5560 d00f (flip)
gdfs: 002b 002c 00d5 01c6 - 0001 0012 0102 0106
03ec 0711 0500 0000 - 00d5 5950
@ -325,7 +325,7 @@ VIDEO_START( gdfs )
janjans1: 0021 0023 00cb 01c6 - 0001 000f 00fe 0106
0300 0000 0500 c000 - 0015 5140
0300 (flip)
0300 0500 (flip)
keithlcy: 002b 0025 00cd 01c6 - 0001 0013 0101 0106
0300 0711 0500 0000 - 0015 5940
@ -700,6 +700,16 @@ static void draw_row(running_machine *machine, bitmap_t *bitmap, const rectangle
code += state->tile_code[(attr & 0x3c00)>>10];
flipy = (attr & 0x4000);
flipx = (attr & 0x8000);
if ((ssv_scroll[0x74/2] & 0x1000) && ((ssv_scroll[0x74/2] & 0x2000) == 0))
{
if (flipx == 0) flipx = 1; else flipx = 0;
}
if ((ssv_scroll[0x74/2] & 0x4000) && ((ssv_scroll[0x74/2] & 0x2000) == 0))
{
if (flipy == 0) flipy = 1; else flipy = 0;
}
color = attr;
/* Select 256 or 64 color tiles */
@ -856,6 +866,16 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
code += state->tile_code[(attr & 0x3c00)>>10];
flipy = (attr & 0x4000);
flipx = (attr & 0x8000);
if ((ssv_scroll[0x74/2] & 0x1000) && ((ssv_scroll[0x74/2] & 0x2000) == 0))
{
if (flipx == 0) flipx = 1; else flipx = 0;
}
if ((ssv_scroll[0x74/2] & 0x4000) && ((ssv_scroll[0x74/2] & 0x2000) == 0))
{
if (flipy == 0) flipy = 1; else flipy = 0;
}
color = attr;
/* Select 256 or 64 color tiles */
@ -880,7 +900,7 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
sx = (sx & 0x1ff) - (sx & 0x200);
sy = (sy & 0x1ff) - (sy & 0x200);
sprites_offsx = -((ssv_scroll[0x7a/2] & 0x0800) >> 8);
sprites_offsx = ((ssv_scroll[0x74/2] & 0x7f) - (ssv_scroll[0x74/2] & 0x80)) - ((ssv_scroll[0x7a/2] & 0x0800) >> 8);
sprites_offsy = (-1)*((ssv_scroll[0x70/2] & 0x1ff) - (ssv_scroll[0x70/2] & 0x200)
+ ssv_scroll[0x6a/2] + 1) - (((ssv_scroll[0x7a/2] ^ 0x0800) & 0x0800) >> 8);
@ -894,6 +914,11 @@ static void draw_sprites(running_machine *machine, bitmap_t *bitmap, const recta
sy -= 0x10; // vasara
}
if (ssv_scroll[0x74/2] & 0x1000)
{
sx = -sx + 0x100; // -0x20 for eaglshot
}
// sprites can use x and y coordinates relative to a side, the other side or the center
// for now we use a kludge
@ -1069,6 +1094,18 @@ static void gdfs_draw_zooming_sprites(running_machine *machine, bitmap_t *bitmap
flipx = (attr & 0x8000);
flipy = (attr & 0x4000);
/*
if ((ssv_scroll[0x74/2] & 0x1000) && ((ssv_scroll[0x74/2] & 0x2000) == 0))
{
if (flipx == 0) flipx = 1; else flipx = 0;
}
if ((ssv_scroll[0x74/2] & 0x4000) && ((ssv_scroll[0x74/2] & 0x2000) == 0))
{
if (flipy == 0) flipy = 1; else flipy = 0;
}
*/
color = (attr & 0x0400) ? attr : attr * 4;
/* Single-sprite tile size */