diff options
author | Angelo Salese <angelosa@users.noreply.github.com> | 2013-02-09 14:54:33 +0000 |
---|---|---|
committer | Angelo Salese <angelosa@users.noreply.github.com> | 2013-02-09 14:54:33 +0000 |
commit | a7bbc2dabfc9259fad5291e00049cb8e9d84b3a6 (patch) | |
tree | d1885ba3c19670ebafc095de038ba91f3f0a56ad | |
parent | bff13e7a29a559d8daeca3cc83a65a518fb3f058 (diff) |
Fixed vertical linescroll mask too
-rw-r--r-- | src/mame/video/stvvdp2.c | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/src/mame/video/stvvdp2.c b/src/mame/video/stvvdp2.c index 4c3b38e85b7..2980538a4b8 100644 --- a/src/mame/video/stvvdp2.c +++ b/src/mame/video/stvvdp2.c @@ -3001,7 +3001,7 @@ void saturn_state::stv_vdp2_drawgfx_rgb888( bitmap_rgb32 &dest_bmp, const rectan void saturn_state::draw_4bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect) { - int xsize, ysize, xsize_mask; + int xsize, ysize, xsize_mask, ysize_mask; int xsrc,ysrc,xdst,ydst; int src_offs; UINT8* vram = m_vdp2.gfx_decode; @@ -3016,6 +3016,7 @@ void saturn_state::draw_4bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr ysize = (stv2_current_tilemap.bitmap_size & 1) ? 512 : 256; xsize_mask = (stv2_current_tilemap.linescroll_enable) ? 1024 : xsize; + ysize_mask = (stv2_current_tilemap.vertical_linescroll_enable) ? 512 : ysize; pal_bank = stv2_current_tilemap.bitmap_palette_number; pal_bank+= stv2_current_tilemap.colour_ram_address_offset; @@ -3032,7 +3033,7 @@ void saturn_state::draw_4bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr continue; xsrc = (xdst + scrollx) & (xsize_mask-1); - ysrc = (ydst + scrolly) & (ysize-1); + ysrc = (ydst + scrolly) & (ysize_mask-1); src_offs = (xsrc + (ysrc*xsize)); src_offs/= 2; src_offs += map_offset; @@ -3057,7 +3058,7 @@ void saturn_state::draw_4bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr void saturn_state::draw_8bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect) { - int xsize, ysize, xsize_mask; + int xsize, ysize, xsize_mask, ysize_mask; int xsrc,ysrc,xdst,ydst; int src_offs; UINT8* vram = m_vdp2.gfx_decode; @@ -3072,6 +3073,7 @@ void saturn_state::draw_8bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr ysize = (stv2_current_tilemap.bitmap_size & 1) ? 512 : 256; xsize_mask = (stv2_current_tilemap.linescroll_enable) ? 1024 : xsize; + ysize_mask = (stv2_current_tilemap.vertical_linescroll_enable) ? 512 : ysize; pal_bank = stv2_current_tilemap.bitmap_palette_number; pal_bank+= stv2_current_tilemap.colour_ram_address_offset; @@ -3088,7 +3090,7 @@ void saturn_state::draw_8bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr continue; xsrc = (xdst + scrollx) & (xsize_mask-1); - ysrc = (ydst + scrolly) & (ysize-1); + ysrc = (ydst + scrolly) & (ysize_mask-1); src_offs = (xsrc + (ysrc*xsize)); src_offs += map_offset; src_offs &= 0x7ffff; @@ -3110,7 +3112,7 @@ void saturn_state::draw_8bpp_bitmap(bitmap_rgb32 &bitmap, const rectangle &clipr void saturn_state::draw_rgb15_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect) { - int xsize, ysize, xsize_mask; + int xsize, ysize, xsize_mask, ysize_mask; int xsrc,ysrc,xdst,ydst; int src_offs; UINT8* vram = m_vdp2.gfx_decode; @@ -3125,6 +3127,7 @@ void saturn_state::draw_rgb15_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip ysize = (stv2_current_tilemap.bitmap_size & 1) ? 512 : 256; xsize_mask = (stv2_current_tilemap.linescroll_enable) ? 1024 : xsize; + ysize_mask = (stv2_current_tilemap.vertical_linescroll_enable) ? 512 : ysize; for(ydst=cliprect.min_y;ydst<=cliprect.max_y;ydst++) { @@ -3134,7 +3137,7 @@ void saturn_state::draw_rgb15_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip continue; xsrc = (xdst + scrollx) & (xsize_mask-1); - ysrc = (ydst + scrolly) & (ysize-1); + ysrc = (ydst + scrolly) & (ysize_mask-1); src_offs = (xsrc + (ysrc*xsize)); src_offs *= 2; src_offs += map_offset; @@ -3162,7 +3165,7 @@ void saturn_state::draw_rgb15_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip void saturn_state::draw_rgb32_bitmap(bitmap_rgb32 &bitmap, const rectangle &cliprect) { - int xsize, ysize, xsize_mask; + int xsize, ysize, xsize_mask, ysize_mask; int xsrc,ysrc,xdst,ydst; int src_offs; UINT8* vram = m_vdp2.gfx_decode; @@ -3177,6 +3180,7 @@ void saturn_state::draw_rgb32_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip ysize = (stv2_current_tilemap.bitmap_size & 1) ? 512 : 256; xsize_mask = (stv2_current_tilemap.linescroll_enable) ? 1024 : xsize; + ysize_mask = (stv2_current_tilemap.vertical_linescroll_enable) ? 512 : ysize; for(ydst=cliprect.min_y;ydst<=cliprect.max_y;ydst++) { @@ -3186,7 +3190,7 @@ void saturn_state::draw_rgb32_bitmap(bitmap_rgb32 &bitmap, const rectangle &clip continue; xsrc = (xdst + scrollx) & (xsize_mask-1); - ysrc = (ydst + scrolly) & (ysize-1); + ysrc = (ydst + scrolly) & (ysize_mask-1); src_offs = (xsrc + (ysrc*xsize)); src_offs *= 4; src_offs += map_offset; @@ -3251,6 +3255,14 @@ void saturn_state::stv_vdp2_draw_basic_bitmap(bitmap_rgb32 &bitmap, const rectan } else { + switch(stv2_current_tilemap.colour_depth) + { + // case 0: draw_4bpp_bitmap(bitmap,cliprect); return; + // case 1: draw_8bpp_bitmap(bitmap,cliprect); return; + // case 3: draw_rgb15_bitmap(bitmap,cliprect); return; + // case 4: draw_rgb32_bitmap(bitmap,cliprect); return; + } + /* intentional fall-through*/ popmessage("%d %s %s %s %s",stv2_current_tilemap.colour_depth, stv2_current_tilemap.transparency == STV_TRANSPARENCY_NONE ? "no trans" : "trans", |