diff --git a/src/mame/drivers/blackt96.cpp b/src/mame/drivers/blackt96.cpp index b3a07ae66c0..cfabbf3c0f1 100644 --- a/src/mame/drivers/blackt96.cpp +++ b/src/mame/drivers/blackt96.cpp @@ -376,7 +376,7 @@ static MACHINE_CONFIG_START( blackt96, blackt96_state ) MCFG_SNK68_SPR_GFXDECODE("gfxdecode") MCFG_SNK68_SPR_PALETTE("palette") MCFG_SNK68_SPR_SET_TILE_INDIRECT( blackt96_state, tile_callback ) - + MCFG_SNK68_SPR_NO_PARTIAL MCFG_SPEAKER_STANDARD_STEREO("lspeaker", "rspeaker") diff --git a/src/mame/video/snk68_spr.cpp b/src/mame/video/snk68_spr.cpp index fccf9140446..b55e7b18056 100644 --- a/src/mame/video/snk68_spr.cpp +++ b/src/mame/video/snk68_spr.cpp @@ -13,7 +13,8 @@ snk68_spr_device::snk68_spr_device(const machine_config &mconfig, const char *ta m_palette(*this), m_spriteram(*this, "^spriteram"), m_screen(*this, "^screen"), - m_flipscreen(0) + m_flipscreen(0), + m_partialupdates(1) { m_newtilecb = snk68_tile_indirection_delegate(FUNC(snk68_spr_device::tile_callback_noindirect), this); } @@ -51,7 +52,11 @@ void snk68_spr_device::set_tile_indirect_cb(device_t &device,snk68_tile_indirect dev.m_newtilecb = newtilecb; } - +void snk68_spr_device::static_set_no_partial(device_t &device) +{ + snk68_spr_device &dev = downcast(device); + dev.m_partialupdates = 0; +} void snk68_spr_device::device_start() { @@ -87,7 +92,7 @@ WRITE16_MEMBER(snk68_spr_device::spriteram_w) int vpos = m_screen->vpos(); if (vpos > 0) - m_screen->update_partial(vpos - 1); + if (m_partialupdates) m_screen->update_partial(vpos - 1); m_spriteram[offset] = newword; } diff --git a/src/mame/video/snk68_spr.h b/src/mame/video/snk68_spr.h index 802ce5b3213..8a0494e0a7b 100644 --- a/src/mame/video/snk68_spr.h +++ b/src/mame/video/snk68_spr.h @@ -6,6 +6,9 @@ typedef device_delegate snk68_tile_indirection_de snk68_spr_device::static_set_palette_tag(*device, "^" _palette_tag); #define MCFG_SNK68_SPR_SET_TILE_INDIRECT( _class, _method) \ snk68_spr_device::set_tile_indirect_cb(*device, snk68_tile_indirection_delegate(&_class::_method, #_class "::" #_method, NULL, (_class *)0)); +#define MCFG_SNK68_SPR_NO_PARTIAL \ + snk68_spr_device::static_set_no_partial(*device); + class snk68_spr_device : public device_t { @@ -16,6 +19,7 @@ public: static void static_set_gfxdecode_tag(device_t &device, const char *tag); static void static_set_palette_tag(device_t &device, const char *tag); static void set_tile_indirect_cb(device_t &device,snk68_tile_indirection_delegate newtilecb); + static void static_set_no_partial(device_t &device); DECLARE_READ16_MEMBER(spriteram_r); DECLARE_WRITE16_MEMBER(spriteram_w); @@ -24,7 +28,7 @@ public: snk68_tile_indirection_delegate m_newtilecb; - void tile_callback_noindirect(int& tile, int& fx, int& ft, int& region); + void tile_callback_noindirect(int& tile, int& fx, int& fy, int& region); void set_flip(int flip); protected: @@ -37,6 +41,7 @@ private: required_shared_ptr m_spriteram; required_device m_screen; int m_flipscreen; + int m_partialupdates; // the original hardware needs this, the cloned hardware does not. };