From 162e3f3a81d4531134fca0a516d7edab235b9da6 Mon Sep 17 00:00:00 2001 From: Angelo Salese Date: Thu, 7 Feb 2013 18:18:58 +0000 Subject: [PATCH] Obviously I don't understand why there was a /2 in the drawpixel functions, fixed gfx regressions --- src/mame/video/stvvdp1.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/mame/video/stvvdp1.c b/src/mame/video/stvvdp1.c index eef02dbbe22..89712ffc480 100644 --- a/src/mame/video/stvvdp1.c +++ b/src/mame/video/stvvdp1.c @@ -16,7 +16,7 @@ Framebuffer todo: #include "emu.h" #include "includes/stv.h" -#define VDP1_LOG 0 +#define VDP1_LOG 1 enum { FRAC_SHIFT = 16 }; @@ -827,7 +827,7 @@ void saturn_state::drawpixel_8bpp_trans(int x, int y, int patterndata, int offse UINT8 *vdp1_vram = (UINT8 *)m_vdp1_vram; UINT16 pix; - pix = vdp1_vram[(patterndata+offsetcnt/2)^3]; + pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; if ( pix & 0xff ) { m_vdp1.framebuffer_draw_lines[y][x] = pix | m_sprite_colorbank; @@ -839,7 +839,7 @@ void saturn_state::drawpixel_4bpp_notrans(int x, int y, int patterndata, int off UINT8 *vdp1_vram = (UINT8 *)m_vdp1_vram; UINT16 pix; - pix = vdp1_vram[(patterndata+offsetcnt/2)^3]; + pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; pix = offsetcnt&1 ? (pix & 0x0f):((pix & 0xf0)>>4) ; m_vdp1.framebuffer_draw_lines[y][x] = pix | m_sprite_colorbank; } @@ -849,7 +849,7 @@ void saturn_state::drawpixel_4bpp_trans(int x, int y, int patterndata, int offse UINT8 *vdp1_vram = (UINT8 *)m_vdp1_vram; UINT16 pix; - pix = vdp1_vram[(patterndata+offsetcnt/2)^3]; + pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; pix = offsetcnt&1 ? (pix & 0x0f):((pix & 0xf0)>>4) ; if ( pix ) m_vdp1.framebuffer_draw_lines[y][x] = pix | m_sprite_colorbank; @@ -887,7 +887,7 @@ void saturn_state::drawpixel_generic(int x, int y, int patterndata, int offsetcn { case 0x0000: // mode 0 16 colour bank mode (4bits) (hanagumi blocks) // most of the shienryu sprites use this mode - pix = vdp1_vram[((patterndata+offsetcnt/2)^3) & 0xfffff]; + pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; pix = offsetcnt&1 ? (pix & 0x0f):((pix & 0xf0)>>4) ; pix = pix+((stv2_current_sprite.CMDCOLR&0xfff0)); mode = 0; @@ -895,7 +895,7 @@ void saturn_state::drawpixel_generic(int x, int y, int patterndata, int offsetcn break; case 0x0008: // mode 1 16 colour lookup table mode (4bits) // shienryu explosisons (and some enemies) use this mode - pix2 = vdp1_vram[((patterndata+offsetcnt/2)^3) & 0xfffff]; + pix2 = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; pix2 = offsetcnt&1 ? (pix2 & 0x0f):((pix2 & 0xf0)>>4); pix = pix2&1 ? ((((m_vdp1_vram[(((stv2_current_sprite.CMDCOLR&0xffff)*8)>>2)+((pix2&0xfffe)/2)])) & 0x0000ffff) >> 0): @@ -917,25 +917,25 @@ void saturn_state::drawpixel_generic(int x, int y, int patterndata, int offsetcn } break; case 0x0010: // mode 2 64 colour bank mode (8bits) (character select portraits on hanagumi) - pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0xfffff]; + pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; mode = 2; pix = pix+(stv2_current_sprite.CMDCOLR&0xffc0); transmask = 0x3f; break; case 0x0018: // mode 3 128 colour bank mode (8bits) (little characters on hanagumi use this mode) - pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0xfffff]; + pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; pix = pix+(stv2_current_sprite.CMDCOLR&0xff80); transmask = 0x7f; mode = 3; break; case 0x0020: // mode 4 256 colour bank mode (8bits) (hanagumi title) - pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0xfffff]; + pix = vdp1_vram[((patterndata+offsetcnt)^3) & 0x7ffff]; pix = pix+(stv2_current_sprite.CMDCOLR&0xff00); transmask = 0xff; mode = 4; break; case 0x0028: // mode 5 32,768 colour RGB mode (16bits) - pix = vdp1_vram[((patterndata+offsetcnt*2+1)^3) & 0xfffff] | (vdp1_vram[((patterndata+offsetcnt*2)^3) & 0xfffff]<<8) ; + pix = vdp1_vram[((patterndata+offsetcnt*2+1)^3) & 0x7ffff] | (vdp1_vram[((patterndata+offsetcnt*2)^3) & 0x7ffff]<<8) ; mode = 5; transmask = -1; /* TODO: check me */ break;