From 8a4f24f66f828cae232f42ba134ab94dc5d7a842 Mon Sep 17 00:00:00 2001 From: David Haywood Date: Mon, 25 Jan 2016 04:27:22 +0000 Subject: [PATCH] temp workaround for regression issue (nw) --- src/mame/includes/dynax.h | 23 ++++++++++++++++++++--- src/mame/video/dynax.cpp | 23 +++++++++++++++-------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/mame/includes/dynax.h b/src/mame/includes/dynax.h index a831d6c28bc..d7df40b21d8 100644 --- a/src/mame/includes/dynax.h +++ b/src/mame/includes/dynax.h @@ -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 m_screen; required_device m_palette; optional_device m_rtc; - optional_region_ptr m_gfx_region; + optional_region_ptr m_gfx_region1; + optional_region_ptr m_gfx_region2; + optional_region_ptr m_gfx_region3; + optional_region_ptr m_gfx_region4; + optional_region_ptr m_gfx_region5; + optional_region_ptr m_gfx_region6; + optional_region_ptr m_gfx_region7; + optional_region_ptr m_gfx_region8; + + static memory_region * gfxregions[]; // up to 8 layers, 2 images per layer (interleaved on screen) std::unique_ptr 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 ); diff --git a/src/mame/video/dynax.cpp b/src/mame/video/dynax.cpp index 0355a1b35a5..09350bd1785 100644 --- a/src/mame/video/dynax.cpp +++ b/src/mame/video/dynax.cpp @@ -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));