From 637ec4ede0f4244d2817ac6974509c4b2de5217f Mon Sep 17 00:00:00 2001 From: Phil Bennett Date: Sun, 17 Jan 2010 20:50:59 +0000 Subject: [PATCH] Improved vsnet sprite/roz alignment [David Haywood] --- src/mame/drivers/konamigx.c | 15 +++-- src/mame/includes/konamigx.h | 1 + src/mame/video/konamigx.c | 105 +++++++++++++++++++++++++++-------- 3 files changed, 92 insertions(+), 29 deletions(-) diff --git a/src/mame/drivers/konamigx.c b/src/mame/drivers/konamigx.c index 1703e8f082d..4275b781d80 100644 --- a/src/mame/drivers/konamigx.c +++ b/src/mame/drivers/konamigx.c @@ -1902,7 +1902,7 @@ static MACHINE_DRIVER_START( gxtype4 ) MDRV_VIDEO_START(konamigx_type4) MACHINE_DRIVER_END -static MACHINE_DRIVER_START( gxtype4vsnet ) +static MACHINE_DRIVER_START( gxtype4_vsn ) MDRV_IMPORT_FROM(gxtype4) MDRV_DEFAULT_LAYOUT(layout_dualhsxs) @@ -1914,6 +1914,8 @@ static MACHINE_DRIVER_START( gxtype4vsnet ) MDRV_SCREEN_MODIFY("screen2") MDRV_SCREEN_SIZE(128*8, 32*8) MDRV_SCREEN_VISIBLE_AREA(0, 576-1, 16, 32*8-1-16) + + MDRV_VIDEO_START(konamigx_type4_vsn) MACHINE_DRIVER_END static MACHINE_DRIVER_START( gxtype4sd2 ) @@ -1923,6 +1925,7 @@ static MACHINE_DRIVER_START( gxtype4sd2 ) MACHINE_DRIVER_END + static MACHINE_DRIVER_START( winspike ) MDRV_IMPORT_FROM(konamigx) @@ -3729,11 +3732,11 @@ GAME( 1994, soccerssja,soccerss, gxtype3, type3, konamigx, ROT0, "Konami", "Soc GAME( 1994, soccerssa,soccerss, gxtype3, type3, konamigx, ROT0, "Konami", "Soccer Superstars (ver AAA)", GAME_IMPERFECT_GRAPHICS ) /* Type 4: dual monitor output and 53936 on the ROM board, external palette RAM, DMA protection */ -GAME( 1996, vsnetscr, konamigx, gxtype4vsnet, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver EAD)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) -GAME( 1996, vsnetscreb,vsnetscr, gxtype4vsnet, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver EAB)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) -GAME( 1996, vsnetscru, vsnetscr, gxtype4vsnet, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver UAB)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) -GAME( 1996, vsnetscra, vsnetscr, gxtype4vsnet, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver AAA)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) -GAME( 1996, vsnetscrj, vsnetscr, gxtype4vsnet, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver JAB)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) +GAME( 1996, vsnetscr, konamigx, gxtype4_vsn, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver EAD)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) +GAME( 1996, vsnetscreb,vsnetscr, gxtype4_vsn, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver EAB)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) +GAME( 1996, vsnetscru, vsnetscr, gxtype4_vsn, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver UAB)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) +GAME( 1996, vsnetscra, vsnetscr, gxtype4_vsn, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver AAA)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) +GAME( 1996, vsnetscrj, vsnetscr, gxtype4_vsn, type3, konamigx, ROT0, "Konami", "Versus Net Soccer (ver JAB)", GAME_NOT_WORKING|GAME_UNEMULATED_PROTECTION ) GAME( 1996, rungun2, konamigx, gxtype4sd2, type3, konamigx, ROT0, "Konami", "Run and Gun 2 (ver UAA)", GAME_IMPERFECT_GRAPHICS ) GAME( 1996, slamdnk2, rungun2, gxtype4sd2, type3, konamigx, ROT0, "Konami", "Slam Dunk 2 (ver JAA)", GAME_IMPERFECT_GRAPHICS ) GAME( 1996, rushhero, konamigx, gxtype4, type3, konamigx, ROT0, "Konami", "Rushing Heroes (ver UAB)", GAME_IMPERFECT_GRAPHICS ) diff --git a/src/mame/includes/konamigx.h b/src/mame/includes/konamigx.h index b31d65a0247..41a642ecda2 100644 --- a/src/mame/includes/konamigx.h +++ b/src/mame/includes/konamigx.h @@ -86,6 +86,7 @@ VIDEO_START(konamigx_6bpp_2); VIDEO_START(konamigx_type3); VIDEO_START(konamigx_type4); VIDEO_START(konamigx_type4_sd2); +VIDEO_START(konamigx_type4_vsn); VIDEO_START(le2); VIDEO_START(dragoonj); VIDEO_START(winspike); diff --git a/src/mame/video/konamigx.c b/src/mame/video/konamigx.c index 1346f5bf19d..52d1eceacb7 100644 --- a/src/mame/video/konamigx.c +++ b/src/mame/video/konamigx.c @@ -99,7 +99,7 @@ INLINE void K053936GP_copyroz32clip( running_machine *machine, bitmap_t *dst_bitmap, bitmap_t *src_bitmap, const rectangle *dst_cliprect, const rectangle *src_cliprect, UINT32 _startx,UINT32 _starty,int _incxx,int _incxy,int _incyx,int _incyy, - int tilebpp, int blend, int alpha, int clip ) + int tilebpp, int blend, int alpha, int clip, int pixeldouble_output ) { static const int colormask[8]={1,3,7,0xf,0x1f,0x3f,0x7f,0xff}; @@ -111,7 +111,9 @@ INLINE void K053936GP_copyroz32clip( running_machine *machine, size_t src_size; const pen_t *pal_base; - UINT32 *dst_ptr; + int dst_ptr; + int dst_size; + int dst_base2; int tx, dst_pitch; UINT32 *dst_base; @@ -144,7 +146,8 @@ INLINE void K053936GP_copyroz32clip( running_machine *machine, // adjust entry points and other loop constants dst_pitch = dst_bitmap->rowpixels; - dst_base = (UINT32*)dst_bitmap->base + sy * dst_pitch + sx + tx; + dst_base = (UINT32*)dst_bitmap->base; + dst_base2 = sy * dst_pitch + sx + tx; ecx = tx = -tx; tilebpp = (tilebpp-1) & 7; @@ -154,8 +157,8 @@ INLINE void K053936GP_copyroz32clip( running_machine *machine, src_pitch = src_bitmap->rowpixels; src_base = (UINT16 *)src_bitmap->base; src_size = src_bitmap->width * src_bitmap->height; - - dst_ptr = dst_base; + dst_size = dst_bitmap->width * dst_bitmap->height; + dst_ptr = 0;//dst_base; cy = starty; cx = startx; @@ -186,12 +189,18 @@ INLINE void K053936GP_copyroz32clip( running_machine *machine, if (!(pixel & cmask)) continue; - dst_ptr[ecx] = alpha_blend_r32(pal_base[pixel], dst_ptr[ecx], alpha); + if ((dst_ptr+ecx+dst_base2)primary_screen); + int width = visarea->max_x - visarea->min_x + 1; + + if (width>512) // vsnetscr case + pixeldouble_output = 1; + + K053936GP_0_zoom_draw(machine, bitmap, cliprect, sub1, l, k, alpha, pixeldouble_output); } else { @@ -1596,6 +1620,8 @@ void konamigx_mixer(running_machine *machine, bitmap_t *bitmap, const rectangle // the output size of the roz layer has to be doubled horizontally // so that it aligns with the sprites and normal tilemaps. This appears // to be done as a post-processing / mixing step effect + // + // - todo, use the pixeldouble_output I just added for vsnet instead? for (yy=0;yyprimary_screen); + int height = video_screen_get_height(machine->primary_screen); + + K056832_vh_start(machine, "gfx1", K056832_BPP_8, 0, NULL, konamigx_type2_tile_callback, 0); + K055673_vh_start(machine, "gfx2", K055673_LAYOUT_GX6, -132, -23, konamigx_type2_sprite_callback); + + dualscreen_left_tempbitmap = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_RGB32); + dualscreen_right_tempbitmap = auto_bitmap_alloc(machine, width, height, BITMAP_FORMAT_RGB32); + + _gxcommoninitnosprites(machine); + + gx_psac_tilemap = tilemap_create(machine, get_gx_psac_tile_info, tilemap_scan_cols, 16, 16, 128, 128); + gx_rozenable = 0; + gx_specialrozenable = 3; + + K056832_set_LayerOffset(0, -52, 0); + K056832_set_LayerOffset(1, -48, 0); + K056832_set_LayerOffset(2, -48, 0); + K056832_set_LayerOffset(3, -48, 0); + + K053936_wraparound_enable(0, 1); // wraparound doesn't work properly with the custom drawing function anyway, see the crowd in vsnet and rushhero + K053936GP_set_offset(0, -30, 0); + + gx_rushingheroes_hack = 1; + konamigx_has_dual_screen = 1; + konamigx_palformat = 0; + +} + VIDEO_START(konamigx_type4_sd2) { int width = video_screen_get_width(machine->primary_screen);