temp workaround for regression issue (nw)

This commit is contained in:
David Haywood 2016-01-25 04:27:22 +00:00
parent abbb4acf04
commit 8a4f24f66f
2 changed files with 35 additions and 11 deletions

View File

@ -23,7 +23,15 @@ public:
, m_screen(*this, "screen")
, m_palette(*this, "palette")
, m_rtc(*this, "rtc")
, m_gfx_region(*this, "gfx")
, m_gfx_region1(*this, "gfx1")
, m_gfx_region2(*this, "gfx2")
, m_gfx_region3(*this, "gfx3")
, m_gfx_region4(*this, "gfx4")
, m_gfx_region5(*this, "gfx5")
, m_gfx_region6(*this, "gfx6")
, m_gfx_region7(*this, "gfx7")
, m_gfx_region8(*this, "gfx8")
{
}
@ -36,7 +44,16 @@ public:
optional_device<screen_device> m_screen;
required_device<palette_device> m_palette;
optional_device<msm6242_device> m_rtc;
optional_region_ptr<UINT8> m_gfx_region;
optional_region_ptr<UINT8> m_gfx_region1;
optional_region_ptr<UINT8> m_gfx_region2;
optional_region_ptr<UINT8> m_gfx_region3;
optional_region_ptr<UINT8> m_gfx_region4;
optional_region_ptr<UINT8> m_gfx_region5;
optional_region_ptr<UINT8> m_gfx_region6;
optional_region_ptr<UINT8> m_gfx_region7;
optional_region_ptr<UINT8> m_gfx_region8;
static memory_region * gfxregions[];
// up to 8 layers, 2 images per layer (interleaved on screen)
std::unique_ptr<UINT8[]> m_pixmap[8][2];
@ -286,7 +303,7 @@ public:
DECLARE_VIDEO_START(neruton);
inline void blitter_plot_pixel( int layer, int mask, int x, int y, int pen, int wrap, int flags );
int blitter_drawgfx( int layer, int mask, const char *gfx, int src, int pen, int x, int y, int wrap, int flags );
int blitter_drawgfx( int layer, int mask, memory_region *gfx, int src, int pen, int x, int y, int wrap, int flags );
void dynax_blitter_start( int flags );
void jantouki_blitter_start( int flags );
void jantouki_blitter2_start( int flags );

View File

@ -275,18 +275,18 @@ WRITE8_MEMBER(dynax_state::dynax_flipscreen_w)
}
static const char *const gfxregions[] = { "gfx1", "gfx2", "gfx3", "gfx4", "gfx5", "gfx6", "gfx7", "gfx8" };
WRITE8_MEMBER(dynax_state::dynax_blit_romregion_w)
{
if (data < ARRAY_LENGTH(gfxregions))
if (data < 8)
m_blit_romregion = data;
LOG(("GFX%X ", data + 1));
}
WRITE8_MEMBER(dynax_state::dynax_blit2_romregion_w)
{
if (data + 1 < ARRAY_LENGTH(gfxregions))
if (data + 1 < 8)
m_blit2_romregion = data + 1;
LOG(("GFX%X' ", data + 2));
}
@ -391,9 +391,13 @@ void dynax_state::blitter_plot_pixel( int layer, int mask, int x, int y, int pen
---- --1- 0 = Ignore the pens specified in ROM, draw everything with the pen supplied as parameter
---- ---0 Clear
*/
int dynax_state::blitter_drawgfx( int layer, int mask, const char *gfx, int src, int pen, int x, int y, int wrap, int flags )
int dynax_state::blitter_drawgfx( int layer, int mask, memory_region *gfx, int src, int pen, int x, int y, int wrap, int flags )
{
size_t rom_size = m_gfx_region.bytes();
if (!gfx)
return 0;
size_t rom_size = gfx->bytes();
UINT8* rom_data = gfx->base();
if (m_layer_layout == LAYOUT_HNORIDUR) // e.g. yarunara
pen = ((pen >> 4) & 0xf) | ((mask & 0x10) ? ((pen & 0x08) << 1) : 0);
@ -474,7 +478,7 @@ int dynax_state::blitter_drawgfx( int layer, int mask, const char *gfx, int src,
return src;
}
UINT8 cmd = m_gfx_region[src++];
UINT8 cmd = rom_data[src++];
src &= 0xfffff;
if (!(flags & 0x02)) // Ignore the pens specified in ROM, draw everything with the pen supplied as parameter
pen = (pen & 0xf0) | ((cmd & 0xf0) >> 4);
@ -501,7 +505,7 @@ int dynax_state::blitter_drawgfx( int layer, int mask, const char *gfx, int src,
LOG(("\nGFXROM %s OVER %08x",gfx,src));
return src;
}
x = sx + m_gfx_region[src++];
x = sx + rom_data[src++];
src &= 0xfffff;
/* fall through into next case */
@ -512,7 +516,7 @@ int dynax_state::blitter_drawgfx( int layer, int mask, const char *gfx, int src,
LOG(("\nGFXROM %s OVER %08x",gfx,src));
return src;
}
cmd = m_gfx_region[src++];
cmd = rom_data[src++];
src &= 0xfffff;
/* fall through into next case */
@ -542,6 +546,7 @@ int dynax_state::blitter_drawgfx( int layer, int mask, const char *gfx, int src,
void dynax_state::dynax_blitter_start(int flags )
{
int blit_newsrc;
memory_region * gfxregions[] = { memregion("gfx1"), memregion("gfx2"), memregion("gfx3"), memregion("gfx4"), memregion("gfx5"), memregion("gfx6"), memregion("gfx7"), memregion("gfx8") };
LOG(("XY=%X,%X SRC=%X BLIT=%X\n", m_blit_x, m_blit_y, m_blit_src, flags));
@ -569,6 +574,7 @@ void dynax_state::dynax_blitter_start(int flags )
void dynax_state::jantouki_blitter_start( int flags )
{
int blit_newsrc;
memory_region * gfxregions[] = { memregion("gfx1"), memregion("gfx2"), memregion("gfx3"), memregion("gfx4"), memregion("gfx5"), memregion("gfx6"), memregion("gfx7"), memregion("gfx8") };
LOG(("XY=%X,%X SRC=%X BLIT=%X\n", m_blit_x, m_blit_y, m_blit_src, flags));
@ -596,6 +602,7 @@ void dynax_state::jantouki_blitter_start( int flags )
void dynax_state::jantouki_blitter2_start( int flags )
{
int blit2_newsrc;
memory_region * gfxregions[] = { memregion("gfx1"), memregion("gfx2"), memregion("gfx3"), memregion("gfx4"), memregion("gfx5"), memregion("gfx6"), memregion("gfx7"), memregion("gfx8") };
LOG(("XY'=%X,%X SRC'=%X BLIT'=%02X\n", m_blit2_x, m_blit2_y, m_blit2_src, flags));