From 4ad99625f023ab89dd9920d7fe5a9f2da93fd45e Mon Sep 17 00:00:00 2001 From: DavidHaywood <28625134+DavidHaywood@users.noreply.github.com> Date: Fri, 28 Sep 2018 12:01:48 +0100 Subject: cps3 - light cleanups (move some variable definitions to where they're used etc., fix last line of cliprect in new rowscroll code, divide fg draw into a function) --- src/mame/drivers/cps3.cpp | 408 ++++++++++++++++++++-------------------------- src/mame/includes/cps3.h | 1 + 2 files changed, 181 insertions(+), 228 deletions(-) diff --git a/src/mame/drivers/cps3.cpp b/src/mame/drivers/cps3.cpp index 2fcd9b98a69..fb7118533be 100644 --- a/src/mame/drivers/cps3.cpp +++ b/src/mame/drivers/cps3.cpp @@ -859,13 +859,11 @@ static const gfx_layout cps3_tiles8x8_layout = void cps3_state::cps3_set_mame_colours(int colournum, uint16_t data, uint32_t fadeval) { - int r,g,b; uint16_t* dst = (uint16_t*)m_colourram.target(); - - r = (data >> 0) & 0x1f; - g = (data >> 5) & 0x1f; - b = (data >> 10) & 0x1f; + int r = (data >> 0) & 0x1f; + int g = (data >> 5) & 0x1f; + int b = (data >> 10) & 0x1f; /* is this 100% correct? */ if (fadeval!=0) @@ -929,137 +927,162 @@ void cps3_state::video_start() m_renderbuffer_clip.set(0, m_screenwidth-1, 0, 224-1); m_renderbuffer_bitmap.fill(0x3f, m_renderbuffer_clip); - } // the 0x400 bit in the tilemap regs is "draw it upside-down" (bios tilemap during flashing, otherwise capcom logo is flipped) -void cps3_state::cps3_draw_tilemapsprite_line(int tmnum, int drawline, bitmap_rgb32 &bitmap, const rectangle &cliprect ) +void cps3_state::cps3_draw_tilemapsprite_line(int tmnum, int drawline, bitmap_rgb32 &bitmap, const rectangle &cliprect) { uint32_t* tmapregs[4] = { m_tilemap20_regs_base, m_tilemap30_regs_base, m_tilemap40_regs_base, m_tilemap50_regs_base }; - uint32_t* regs; - int line; - int scrolly; - if (tmnum>3) + if (tmnum > 3) { - printf("cps3_draw_tilemapsprite_line Illegal tilemap number %d\n",tmnum); + printf("cps3_draw_tilemapsprite_line Illegal tilemap number %d\n", tmnum); return; } - regs = tmapregs[tmnum]; + uint32_t* regs = tmapregs[tmnum]; + + int scrolly = ((regs[0] & 0x0000ffff) >> 0) + 4; + int line = drawline + scrolly; + line &= 0x3ff; - scrolly = ((regs[0]&0x0000ffff)>>0)+4; - line = drawline+scrolly; - line&=0x3ff; + if (!(regs[1] & 0x00008000)) return; + uint32_t mapbase = (regs[2] & 0x007f0000) >> 16; + uint32_t linebase = (regs[2] & 0x7f000000) >> 24; + int linescroll_enable = (regs[1] & 0x00004000); - if (!(regs[1]&0x00008000)) return; + int scrollx; + int x; + int tileline = (line / 16) + 1; + int tilesubline = line % 16; + rectangle clip; + mapbase = mapbase << 10; + linebase = linebase << 10; + + if (!linescroll_enable) + { + scrollx = (regs[0] & 0xffff0000) >> 16; + } + else { - uint32_t mapbase = (regs[2]&0x007f0000)>>16; - uint32_t linebase= (regs[2]&0x7f000000)>>24; - int linescroll_enable = (regs[1]&0x00004000); + //printf("linebase %08x\n", linebase); - int scrollx; - int x; - int tileline = (line/16)+1; - int tilesubline = line % 16; - rectangle clip; + scrollx = (regs[0] & 0xffff0000) >> 16; + scrollx += (m_spriteram[linebase + ((line + 16 - 4) & 0x3ff)] >> 16) & 0x3ff; - mapbase = mapbase << 10; - linebase = linebase << 10; + } - if (!linescroll_enable) - { - scrollx = (regs[0]&0xffff0000)>>16; - } - else - { - // printf("linebase %08x\n", linebase); + //zoombase = (layerregs[1]&0xffff0000)>>16; - scrollx = (regs[0]&0xffff0000)>>16; - scrollx+= (m_spriteram[linebase+((line+16-4)&0x3ff)]>>16)&0x3ff; + drawline &= 0x3ff; - } + if (drawline > cliprect.bottom() + 4) return; + + clip.set(cliprect.left(), cliprect.right(), drawline, drawline); + + for (x = 0; x < (cliprect.right() / 16) + 2; x++) + { + uint32_t dat; + int tileno; + int colour; + int bpp; + int xflip, yflip; + + dat = m_spriteram[mapbase + ((tileline & 63) * 64) + ((x + scrollx / 16) & 63)]; + tileno = (dat & 0xffff0000) >> 17; + colour = (dat & 0x000001ff) >> 0; + bpp = (dat & 0x0000200) >> 9; + yflip = (dat & 0x00000800) >> 11; + xflip = (dat & 0x00001000) >> 12; -// zoombase = (layerregs[1]&0xffff0000)>>16; + if (!bpp) m_gfxdecode->gfx(1)->set_granularity(256); + else m_gfxdecode->gfx(1)->set_granularity(64); - drawline&=0x3ff; + cps3_drawgfxzoom(bitmap, clip, m_gfxdecode->gfx(1), tileno, colour, xflip, yflip, (x * 16) - scrollx % 16, drawline - tilesubline, CPS3_TRANSPARENCY_PEN_INDEX, 0, 0x10000, 0x10000, nullptr, 0); + } +} + +// fg layer (TODO: this could be handled with an actual tilemap) +void cps3_state::draw_fg_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + // bank select? (sfiii2 intro) (could also be a scroll bit if the tilemap is just double height) + int bank = 0x800; + if (m_ss_bank_base & 0x01000000) bank = 0x000; + + for (int line = cliprect.top(); line <= cliprect.bottom(); line++) + { + rectangle clip = cliprect; + clip.min_y = clip.max_y = line; - if (drawline>cliprect.bottom()+4) return; + int y = line / 8; + int count = (y * 64) + bank; - clip.set(cliprect.left(), cliprect.right(), drawline, drawline); + // 'combo meter' in JoJo games uses rowscroll + int rowscroll = m_ss_ram[((line - 1) & 0x1ff) + 0x4000 / 4] >> 16; - for (x=0;x<(cliprect.right()/16)+2;x++) + for (int x = 0; x < 64; x++) { - uint32_t dat; - int tileno; - int colour; - int bpp; - int xflip,yflip; - - dat = m_spriteram[mapbase+((tileline&63)*64)+((x+scrollx/16)&63)]; - tileno = (dat & 0xffff0000)>>17; - colour = (dat & 0x000001ff)>>0; - bpp = (dat & 0x0000200)>>9; - yflip = (dat & 0x00000800)>>11; - xflip = (dat & 0x00001000)>>12; - - if (!bpp) m_gfxdecode->gfx(1)->set_granularity(256); - else m_gfxdecode->gfx(1)->set_granularity(64); - - cps3_drawgfxzoom(bitmap,clip,m_gfxdecode->gfx(1),tileno,colour,xflip,yflip,(x*16)-scrollx%16,drawline-tilesubline,CPS3_TRANSPARENCY_PEN_INDEX,0, 0x10000, 0x10000, nullptr, 0); + uint32_t data = m_ss_ram[count]; // +0x800 = 2nd bank, used on sfiii2 intro.. + uint32_t tile = (data >> 16) & 0x1ff; + int pal = (data & 0x003f) >> 1; + int flipx = (data & 0x0080) >> 7; + int flipy = (data & 0x0040) >> 6; + pal += m_ss_pal_base << 5; + tile += 0x200; + + cps3_drawgfxzoom(bitmap, clip, m_gfxdecode->gfx(0), tile, pal, flipx, flipy, (x * 8) - rowscroll, y * 8, CPS3_TRANSPARENCY_PEN, 0, 0x10000, 0x10000, nullptr, 0); + cps3_drawgfxzoom(bitmap, clip, m_gfxdecode->gfx(0), tile, pal, flipx, flipy, 512 + (x * 8) - rowscroll, y * 8, CPS3_TRANSPARENCY_PEN, 0, 0x10000, 0x10000, nullptr, 0); + + count++; } } } uint32_t cps3_state::screen_update_cps3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) { - int x, count; attoseconds_t period = screen.frame_period().attoseconds(); rectangle visarea = screen.visible_area(); int bg_drawn[4] = { 0, 0, 0, 0 }; - uint32_t fullscreenzoomx, fullscreenzoomy; - uint32_t fszx, fszy; - -// decode_ssram(); -// decode_charram(); + // decode_ssram(); + // decode_charram(); /* registers are normally 002a006f 01ef01c6 - widescreen mode = 00230076 026501c6 - only SFIII2 uses widescreen, I don't know exactly which register controls it */ - if (((m_fullscreenzoom[1]&0xffff0000)>>16)==0x0265) + widescreen mode = 00230076 026501c6 + only SFIII2 uses widescreen, I don't know exactly which register controls it */ + if (((m_fullscreenzoom[1] & 0xffff0000) >> 16) == 0x0265) { - if (m_screenwidth!=496) + if (m_screenwidth != 496) { m_screenwidth = 496; - visarea.set(0, 496-1, 0, 224-1); + visarea.set(0, 496 - 1, 0, 224 - 1); screen.configure(496, 224, visarea, period); } } else { - if (m_screenwidth!=384) + if (m_screenwidth != 384) { m_screenwidth = 384; - visarea.set(0, 384-1, 0, 224-1); + visarea.set(0, 384 - 1, 0, 224 - 1); screen.configure(384, 224, visarea, period); } } - fullscreenzoomx = m_fullscreenzoom[3] & 0x000000ff; - fullscreenzoomy = m_fullscreenzoom[3] & 0x000000ff; + uint32_t fullscreenzoomx = m_fullscreenzoom[3] & 0x000000ff; + uint32_t fullscreenzoomy = m_fullscreenzoom[3] & 0x000000ff; /* clamp at 0x80, I don't know if this is accurate */ - if (fullscreenzoomx>0x80) fullscreenzoomx = 0x80; - if (fullscreenzoomy>0x80) fullscreenzoomy = 0x80; + if (fullscreenzoomx > 0x80) fullscreenzoomx = 0x80; + if (fullscreenzoomy > 0x80) fullscreenzoomy = 0x80; - fszx = (fullscreenzoomx<<16)/0x40; - fszy = (fullscreenzoomy<<16)/0x40; + uint32_t fszx = (fullscreenzoomx << 16) / 0x40; + uint32_t fszy = (fullscreenzoomy << 16) / 0x40; m_renderbuffer_clip.set( - 0, ((m_screenwidth*fszx)>>16)-1, - 0, ((224*fszx)>>16)-1); + 0, ((m_screenwidth*fszx) >> 16) - 1, + 0, ((224 * fszx) >> 16) - 1); m_renderbuffer_bitmap.fill(0, m_renderbuffer_clip); @@ -1068,98 +1091,76 @@ uint32_t cps3_state::screen_update_cps3(screen_device &screen, bitmap_rgb32 &bit int i; //printf("Spritelist start:\n"); - for (i=0x00000/4;i<0x2000/4;i+=4) + for (i = 0x00000 / 4; i < 0x2000 / 4; i += 4) { - int xpos = (m_spriteram[i+1]&0x03ff0000)>>16; - int ypos = m_spriteram[i+1]&0x000003ff; - int j; - int gscroll = (m_spriteram[i+0]&0x70000000)>>28; - int length = (m_spriteram[i+0]&0x01ff0000)>>16; // how many entries in the sprite table - uint32_t start = (m_spriteram[i+0]&0x00007ff0)>>4; - - int whichbpp = (m_spriteram[i+2]&0x40000000)>>30; // not 100% sure if this is right, jojo title / characters - int whichpal = (m_spriteram[i+2]&0x20000000)>>29; - int global_xflip = (m_spriteram[i+2]&0x10000000)>>28; - int global_yflip = (m_spriteram[i+2]&0x08000000)>>27; - int global_alpha = (m_spriteram[i+2]&0x04000000)>>26; // alpha / shadow? set on sfiii2 shadows, and big black image in jojo intro - int global_bpp = (m_spriteram[i+2]&0x02000000)>>25; - int global_pal = (m_spriteram[i+2]&0x01ff0000)>>16; - - int gscrollx = (m_unk_vidregs[gscroll]&0x03ff0000)>>16; - int gscrolly = (m_unk_vidregs[gscroll]&0x000003ff)>>0; + int xpos = (m_spriteram[i + 1] & 0x03ff0000) >> 16; + int ypos = m_spriteram[i + 1] & 0x000003ff; + int gscroll = (m_spriteram[i + 0] & 0x70000000) >> 28; + int length = (m_spriteram[i + 0] & 0x01ff0000) >> 16; // how many entries in the sprite table + uint32_t start = (m_spriteram[i + 0] & 0x00007ff0) >> 4; + + int whichbpp = (m_spriteram[i + 2] & 0x40000000) >> 30; // not 100% sure if this is right, jojo title / characters + int whichpal = (m_spriteram[i + 2] & 0x20000000) >> 29; + int global_xflip = (m_spriteram[i + 2] & 0x10000000) >> 28; + int global_yflip = (m_spriteram[i + 2] & 0x08000000) >> 27; + int global_alpha = (m_spriteram[i + 2] & 0x04000000) >> 26; // alpha / shadow? set on sfiii2 shadows, and big black image in jojo intro + int global_bpp = (m_spriteram[i + 2] & 0x02000000) >> 25; + int global_pal = (m_spriteram[i + 2] & 0x01ff0000) >> 16; + + int gscrollx = (m_unk_vidregs[gscroll] & 0x03ff0000) >> 16; + int gscrolly = (m_unk_vidregs[gscroll] & 0x000003ff) >> 0; start = (start * 0x100) >> 2; - if ((m_spriteram[i+0]&0xf0000000) == 0x80000000) + if ((m_spriteram[i + 0] & 0xf0000000) == 0x80000000) break; - for (j=0;j<(length)*4;j+=4) + for (int j = 0; j < (length) * 4; j += 4) { - uint32_t value1 = (m_spriteram[start+j+0]); - uint32_t value2 = (m_spriteram[start+j+1]); - uint32_t value3 = (m_spriteram[start+j+2]); - + uint32_t value1 = (m_spriteram[start + j + 0]); + uint32_t value2 = (m_spriteram[start + j + 1]); + uint32_t value3 = (m_spriteram[start + j + 2]); //uint8_t* srcdata = (uint8_t*)m_char_ram; //uint32_t sourceoffset = (value1 >>14)&0x7fffff; - int count; - - uint32_t tileno = (value1&0xfffe0000)>>17; - int xpos2 = (value2 & 0x03ff0000)>>16; - int ypos2 = (value2 & 0x000003ff)>>0; - int flipx = (value1 & 0x00001000)>>12; - int flipy = (value1 & 0x00000800)>>11; - int alpha = (value1 & 0x00000400)>>10; //? this one is used for alpha effects on warzard - int bpp = (value1 & 0x00000200)>>9; - int pal = (value1 & 0x000001ff); + uint32_t tileno = (value1 & 0xfffe0000) >> 17; + int xpos2 = (value2 & 0x03ff0000) >> 16; + int ypos2 = (value2 & 0x000003ff) >> 0; + int flipx = (value1 & 0x00001000) >> 12; + int flipy = (value1 & 0x00000800) >> 11; + int alpha = (value1 & 0x00000400) >> 10; //? this one is used for alpha effects on warzard + int bpp = (value1 & 0x00000200) >> 9; + int pal = (value1 & 0x000001ff); /* these are the sizes to actually draw */ - int ysizedraw2 = ((value3 & 0x7f000000)>>24); - int xsizedraw2 = ((value3 & 0x007f0000)>>16); - int xx,yy; + int ysizedraw2 = ((value3 & 0x7f000000) >> 24); + int xsizedraw2 = ((value3 & 0x007f0000) >> 16); + int xx, yy; static const int tilestable[4] = { 8,1,2,4 }; - int ysize2 = ((value3 & 0x0000000c)>>2); - int xsize2 = ((value3 & 0x00000003)>>0); - uint32_t xinc,yinc; + int ysize2 = ((value3 & 0x0000000c) >> 2); + int xsize2 = ((value3 & 0x00000003) >> 0); + uint32_t xinc, yinc; - if (ysize2==0) + if (ysize2 == 0) { - // printf("invalid sprite ysize of 0 tiles\n"); + // printf("invalid sprite ysize of 0 tiles\n"); continue; } - if (xsize2==0) // xsize of 0 tiles seems to be a special command to draw tilemaps + if (xsize2 == 0) // xsize of 0 tiles seems to be a special command to draw tilemaps { - int tilemapnum = ((value3 & 0x00000030)>>4); - //int startline;// = value2 & 0x3ff; - //int endline; - //int height = (value3 & 0x7f000000)>>24; - int uu; -// uint32_t* tmapregs[4] = { m_tilemap20_regs_base, m_tilemap30_regs_base, m_tilemap40_regs_base, m_tilemap50_regs_base }; -// uint32_t* regs; -// regs = tmapregs[tilemapnum]; - //endline = value2; - //startline = endline - height; - - //startline &=0x3ff; - //endline &=0x3ff; - - //printf("tilemap draw %01x %02x %02x %02x\n",tilemapnum, value2, height, regs[0]&0x000003ff ); - - //printf("tilemap draw %01x %d %d\n",tilemapnum, startline, endline ); - + int tilemapnum = ((value3 & 0x00000030) >> 4); /* Urgh, the startline / endline seem to be direct screen co-ordinates regardless of fullscreen zoom - which probably means the fullscreen zoom is applied when rendering everything, not aftewards */ - //for (uu=startline;uu>16; - else xpos2+= (xsize2*16*xinc)>>16; + if (!flipx) xpos2 -= ((xsize2 + 1) * 16 * xinc) >> 16; + else xpos2 += (xsize2 * 16 * xinc) >> 16; - if (flipy) ypos2-= (ysize2*16*yinc)>>16; + if (flipy) ypos2 -= (ysize2 * 16 * yinc) >> 16; { - count = 0; - for (xx=0;xx>16)); - else current_xpos = (xpos+xpos2-((xx*16*xinc)>>16)); + if (!flipx) current_xpos = (xpos + xpos2 + ((xx * 16 * xinc) >> 16)); + else current_xpos = (xpos + xpos2 - ((xx * 16 * xinc) >> 16)); //current_xpos += machine().rand()&0x3ff; current_xpos += gscrollx; current_xpos += 1; - current_xpos &=0x3ff; - if (current_xpos&0x200) current_xpos-=0x400; + current_xpos &= 0x3ff; + if (current_xpos & 0x200) current_xpos -= 0x400; - for (yy=0;yy>16)); - else current_ypos = (ypos+ypos2-((yy*16*yinc)>>16)); + if (flipy) current_ypos = (ypos + ypos2 + ((yy * 16 * yinc) >> 16)); + else current_ypos = (ypos + ypos2 - ((yy * 16 * yinc) >> 16)); current_ypos += gscrolly; - current_ypos = 0x3ff-current_ypos; + current_ypos = 0x3ff - current_ypos; current_ypos -= 17; - current_ypos &=0x3ff; + current_ypos &= 0x3ff; - if (current_ypos&0x200) current_ypos-=0x400; + if (current_ypos & 0x200) current_ypos -= 0x400; //if ( (whichbpp) && (m_screen->frame_number() & 1)) continue; @@ -1242,24 +1243,21 @@ uint32_t cps3_state::screen_update_cps3(screen_device &screen, bitmap_rgb32 &bit } { - int realtileno = tileno+count; + int realtileno = tileno + count; if (global_alpha || alpha) { - cps3_drawgfxzoom(m_renderbuffer_bitmap,m_renderbuffer_clip,m_gfxdecode->gfx(1),realtileno,actualpal,0^flipx,0^flipy,current_xpos,current_ypos,CPS3_TRANSPARENCY_PEN_INDEX_BLEND,0,xinc,yinc, nullptr, 0); + cps3_drawgfxzoom(m_renderbuffer_bitmap, m_renderbuffer_clip, m_gfxdecode->gfx(1), realtileno, actualpal, 0 ^ flipx, 0 ^ flipy, current_xpos, current_ypos, CPS3_TRANSPARENCY_PEN_INDEX_BLEND, 0, xinc, yinc, nullptr, 0); } else { - cps3_drawgfxzoom(m_renderbuffer_bitmap,m_renderbuffer_clip,m_gfxdecode->gfx(1),realtileno,actualpal,0^flipx,0^flipy,current_xpos,current_ypos,CPS3_TRANSPARENCY_PEN_INDEX,0,xinc,yinc, nullptr, 0); + cps3_drawgfxzoom(m_renderbuffer_bitmap, m_renderbuffer_clip, m_gfxdecode->gfx(1), realtileno, actualpal, 0 ^ flipx, 0 ^ flipy, current_xpos, current_ypos, CPS3_TRANSPARENCY_PEN_INDEX, 0, xinc, yinc, nullptr, 0); } count++; } } } } - // */ - - // printf("cell %08x %08x %08x\n",value1, value2, value3); } } } @@ -1267,22 +1265,16 @@ uint32_t cps3_state::screen_update_cps3(screen_device &screen, bitmap_rgb32 &bit /* copy render bitmap with zoom */ { - uint32_t renderx,rendery; - uint32_t srcx, srcy; - uint32_t* srcbitmap; - uint32_t* dstbitmap; - - - srcy=0; - for (rendery=0;rendery<224;rendery++) + uint32_t srcy = 0; + for (uint32_t rendery = 0; rendery < 224; rendery++) { - dstbitmap = &bitmap.pix32(rendery); - srcbitmap = &m_renderbuffer_bitmap.pix32(srcy>>16); - srcx=0; + uint32_t* dstbitmap = &bitmap.pix32(rendery); + uint32_t* srcbitmap = &m_renderbuffer_bitmap.pix32(srcy >> 16); + uint32_t srcx = 0; - for (renderx=0;renderx>16]&0x1ffff]; + dstbitmap[renderx] = m_mame_colours[srcbitmap[srcx >> 16] & 0x1ffff]; srcx += fszx; } @@ -1290,48 +1282,8 @@ uint32_t cps3_state::screen_update_cps3(screen_device &screen, bitmap_rgb32 &bit } } - /* Draw the text layer */ - /* Copy the first 0x800 colours to be used for fg layer rendering */ -// for (offset=0;offset<0x200;offset++) -// { -// int palreadbase = (m_ss_pal_base << 9); -// m_palette->set_pen_color(offset,m_mame_colours[palreadbase+offset]); -// } - - // fg layer (TODO: this could be handled with an actual tilemap) - { - // bank select? (sfiii2 intro) - int bank = 0x800; - if (m_ss_bank_base & 0x01000000) bank = 0x000; - - for (int line = cliprect.top(); line < cliprect.bottom(); line++) - { - rectangle clip = cliprect; - clip.min_y = clip.max_y = line; - - int y = line / 8; - count = (y * 64) + bank; + draw_fg_layer(screen, bitmap, cliprect); - // 'combo meter' in JoJo games uses rowscroll - int rowscroll = m_ss_ram[((line - 1) & 0x1ff) + 0x4000 / 4] >> 16; - - for (x = 0; x < 64; x++) - { - uint32_t data = m_ss_ram[count]; // +0x800 = 2nd bank, used on sfiii2 intro.. - uint32_t tile = (data >> 16) & 0x1ff; - int pal = (data & 0x003f) >> 1; - int flipx = (data & 0x0080) >> 7; - int flipy = (data & 0x0040) >> 6; - pal += m_ss_pal_base << 5; - tile += 0x200; - - cps3_drawgfxzoom(bitmap, clip, m_gfxdecode->gfx(0), tile, pal, flipx, flipy, (x * 8) - rowscroll, y * 8, CPS3_TRANSPARENCY_PEN, 0, 0x10000, 0x10000, nullptr, 0); - cps3_drawgfxzoom(bitmap, clip, m_gfxdecode->gfx(0), tile, pal, flipx, flipy, 512 + (x * 8) - rowscroll, y * 8, CPS3_TRANSPARENCY_PEN, 0, 0x10000, 0x10000, nullptr, 0); - - count++; - } - } - } return 0; } diff --git a/src/mame/includes/cps3.h b/src/mame/includes/cps3.h index 8ca781cddc3..694117a4946 100644 --- a/src/mame/includes/cps3.h +++ b/src/mame/includes/cps3.h @@ -135,6 +135,7 @@ public: SH2_DMA_KLUDGE_CB(dma_callback); virtual void machine_reset() override; virtual void video_start() override; + void draw_fg_layer(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); uint32_t screen_update_cps3(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); INTERRUPT_GEN_MEMBER(cps3_vbl_interrupt); INTERRUPT_GEN_MEMBER(cps3_other_interrupt); -- cgit v1.2.3 From 5d0cfc768f3965d9b8682a147b4dcdddf883195b Mon Sep 17 00:00:00 2001 From: DavidHaywood <28625134+DavidHaywood@users.noreply.github.com> Date: Fri, 28 Sep 2018 12:30:14 +0100 Subject: (unrelated, but weclemanb is clearly a hack, mark it as such) --- src/mame/drivers/wecleman.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mame/drivers/wecleman.cpp b/src/mame/drivers/wecleman.cpp index a6775273d0c..5cf1db7c6e8 100644 --- a/src/mame/drivers/wecleman.cpp +++ b/src/mame/drivers/wecleman.cpp @@ -1297,7 +1297,7 @@ ROM_END ROM_START( weclemanb ) ROM_REGION( 0x40000, "maincpu", 0 ) /* Main CPU Code */ - // I doubt these labels are correct, or one set of roms is bad (17h and 23h differ slightly from parent) + // This set has been hacked, set was provided using same labels as weclemana ROM_LOAD16_BYTE( "602f08.17h", 0x00000, 0x10000, CRC(43241265) SHA1(3da1ed0d15b03845c07f07ec6838ce160d81633d) ) // sldh ROM_LOAD16_BYTE( "602f11.23h", 0x00001, 0x10000, CRC(3ea7dae0) SHA1(d33d67f4cc65a7680e5f43407136b75512a10230) ) // sldh ROM_LOAD16_BYTE( "602a09.18h", 0x20000, 0x10000, CRC(8a9d756f) SHA1(12605e86ce29e6300b5400720baac7b0293d9e66) ) @@ -1750,8 +1750,8 @@ void wecleman_state::init_hotchase() ***************************************************************************/ GAMEL( 1986, wecleman, 0, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v2.01)", 0, layout_wecleman ) -GAMEL( 1986, weclemana, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v2.00, set 1)", 0, layout_wecleman ) -GAMEL( 1986, weclemanb, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v2.00, set 2)", 0, layout_wecleman ) // 1988 release (maybe date hacked?) +GAMEL( 1986, weclemana, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v2.00)", 0, layout_wecleman ) +GAMEL( 1988, weclemanb, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "hack", "WEC Le Mans 24 (v2.00, hack)", 0, layout_wecleman ) // small section of code inserted, year changed to 1988 GAMEL( 1986, weclemanc, wecleman, wecleman, wecleman, wecleman_state, init_wecleman, ROT0, "Konami", "WEC Le Mans 24 (v1.26)", 0, layout_wecleman ) // a version 1.21 is known to exist too, see https://www.youtube.com/watch?v=4l8vYJi1OeU -- cgit v1.2.3