diff options
Diffstat (limited to 'src/mame/konami/k007121.h')
| -rw-r--r-- | src/mame/konami/k007121.h | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/src/mame/konami/k007121.h b/src/mame/konami/k007121.h index 7119089764d..d4355dc0951 100644 --- a/src/mame/konami/k007121.h +++ b/src/mame/konami/k007121.h @@ -11,6 +11,8 @@ class k007121_device : public device_t, public device_gfx_interface, public device_video_interface { public: + using sprite_delegate = device_delegate<void (int &code, int &color, int colbank)>; + template<typename T, typename U> k007121_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock, const gfx_decode_entry *gfxinfo, T &&palette_tag, U &&screen_tag) : k007121_device(mconfig, tag, owner, clock) @@ -21,10 +23,18 @@ public: } k007121_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + // configuration + void set_spr_dx(int dx, int flip_dx) + { + m_spr_dx = dx; + m_spr_flip_dx = flip_dx; + } + auto set_irq_cb() { return m_irq_cb.bind(); } //auto set_firq_cb() { return m_firq_cb.bind(); } // unused auto set_nmi_cb() { return m_nmi_cb.bind(); } auto set_flipscreen_cb() { return m_flipscreen_cb.bind(); } + template <typename... T> void set_sprite_callback(T &&... args) { m_sprite_cb.set(std::forward<T>(args)...); } void set_spriteram(uint8_t *spriteram) { m_spriteram = spriteram; } void register_tilemap(tilemap_t *tilemap) { m_tilemaps.push_back(tilemap); } @@ -37,14 +47,17 @@ public: uint8_t scroll_r(offs_t offset) { return m_scrollram[offset & 0x3f]; } void scroll_w(offs_t offset, uint8_t data) { m_scrollram[offset & 0x3f] = data; } - void sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, int base_color, int global_x_offset, int bank_base, bitmap_ind8 &priority_bitmap, uint32_t pri_mask); + void sprites_draw(bitmap_ind16 &bitmap, const rectangle &cliprect, bitmap_ind8 &priority_bitmap, uint32_t pri_mask); protected: - // device-level overrides + // device_t implementation virtual void device_start() override ATTR_COLD; virtual void device_reset() override ATTR_COLD; private: + // configuration + int32_t m_spr_dx, m_spr_flip_dx; + // internal state uint8_t m_ctrlram[8]; uint8_t m_scrollram[0x40]; @@ -58,6 +71,7 @@ private: devcb_write_line m_irq_cb; devcb_write_line m_firq_cb; devcb_write_line m_nmi_cb; + sprite_delegate m_sprite_cb; void sprites_buffer(); TIMER_CALLBACK_MEMBER(scanline); |
