diff options
| author | 2026-04-03 01:49:18 +0900 | |
|---|---|---|
| committer | 2026-04-03 03:49:18 +1100 | |
| commit | 3793fb6a56942de886ab594d649f5e817ab866c5 (patch) | |
| tree | fc01cfb4c3b75018df87c85e20d78ce7a2f083f7 | |
| parent | ef2d23e2a03c16d880a46044b835c19cddb11a98 (diff) | |
namco/namco_c123tmap.cpp, namco/namco_c169roz.cpp, shared/namco_c355spr.cpp: Use device_delegate for callbacks. (#15170)
| -rw-r--r-- | src/mame/dataeast/deco32.cpp | 2 | ||||
| -rw-r--r-- | src/mame/namco/gal3.cpp | 2 | ||||
| -rw-r--r-- | src/mame/namco/namco_c123tmap.cpp | 5 | ||||
| -rw-r--r-- | src/mame/namco/namco_c123tmap.h | 10 | ||||
| -rw-r--r-- | src/mame/namco/namco_c169roz.cpp | 3 | ||||
| -rw-r--r-- | src/mame/namco/namco_c169roz.h | 5 | ||||
| -rw-r--r-- | src/mame/namco/namcofl.cpp | 6 | ||||
| -rw-r--r-- | src/mame/namco/namconb1.cpp | 16 | ||||
| -rw-r--r-- | src/mame/namco/namcos1.cpp | 2 | ||||
| -rw-r--r-- | src/mame/namco/namcos2.cpp | 11 | ||||
| -rw-r--r-- | src/mame/namco/namcos21_c67.cpp | 1 | ||||
| -rw-r--r-- | src/mame/namco/namcos21_de.cpp | 1 | ||||
| -rw-r--r-- | src/mame/shared/namco_c355spr.cpp | 2 | ||||
| -rw-r--r-- | src/mame/shared/namco_c355spr.h | 26 |
14 files changed, 47 insertions, 45 deletions
diff --git a/src/mame/dataeast/deco32.cpp b/src/mame/dataeast/deco32.cpp index acd38f0c590..c42fadfe8a6 100644 --- a/src/mame/dataeast/deco32.cpp +++ b/src/mame/dataeast/deco32.cpp @@ -2194,7 +2194,7 @@ void dragngun_state::lockloadu(machine_config &config) void dragngun_state::namco_sprites(machine_config &config) { NAMCO_C355SPR(config, m_sprgenzoom, 0); - m_sprgenzoom->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate(&dragngun_state::sprite_bank_callback, this)); + m_sprgenzoom->set_tile_callback(FUNC(dragngun_state::sprite_bank_callback)); m_sprgenzoom->set_palette(m_palette); m_sprgenzoom->set_transparent_pen(15); m_sprgenzoom->set_colors(32); diff --git a/src/mame/namco/gal3.cpp b/src/mame/namco/gal3.cpp index 45076aea016..ce4480c6f30 100644 --- a/src/mame/namco/gal3.cpp +++ b/src/mame/namco/gal3.cpp @@ -667,7 +667,6 @@ void gal3_state::gal3(machine_config &config) m_c355spr[0]->set_screen("lscreen"); m_c355spr[0]->set_palette(m_palette[0]); m_c355spr[0]->set_scroll_offsets(0x26, 0x19); - m_c355spr[0]->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate()); m_c355spr[0]->set_mix_callback(FUNC(gal3_state::sprite_mix_callback)); m_c355spr[0]->set_color_base(0x1000); // TODO : verify palette offset m_c355spr[0]->set_external_prifill(true); @@ -697,7 +696,6 @@ void gal3_state::gal3(machine_config &config) m_c355spr[1]->set_screen("rscreen"); m_c355spr[1]->set_palette(m_palette[1]); m_c355spr[1]->set_scroll_offsets(0x26, 0x19); - m_c355spr[1]->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate()); m_c355spr[1]->set_mix_callback(FUNC(gal3_state::sprite_mix_callback)); m_c355spr[1]->set_color_base(0x1000); // TODO : verify palette offset m_c355spr[1]->set_external_prifill(true); diff --git a/src/mame/namco/namco_c123tmap.cpp b/src/mame/namco/namco_c123tmap.cpp index 6da3424d755..bbf21a27d74 100644 --- a/src/mame/namco/namco_c123tmap.cpp +++ b/src/mame/namco/namco_c123tmap.cpp @@ -22,6 +22,7 @@ DEFINE_DEVICE_TYPE(NAMCO_C123TMAP, namco_c123tmap_device, "namco_c123tmap", "Nam namco_c123tmap_device::namco_c123tmap_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, NAMCO_C123TMAP, tag, owner, clock), device_gfx_interface(mconfig, *this, gfxinfo), + m_tilemapinfo(*this), m_color_base(0), m_xoffs(0), m_yoffs(0), @@ -33,6 +34,8 @@ namco_c123tmap_device::namco_c123tmap_device(const machine_config &mconfig, cons void namco_c123tmap_device::device_start() { + m_tilemapinfo.cb.resolve_safe(); + const int size = m_tmap3_half_height ? 0x8000 : 0x10000; m_tilemapinfo.videoram = std::make_unique<uint16_t[]>(size); @@ -93,7 +96,7 @@ template<int Offset> TILE_GET_INFO_MEMBER(namco_c123tmap_device::get_tile_info) { const uint16_t *vram = &m_tilemapinfo.videoram[Offset]; - int tile, mask; + int tile = 0, mask = 0; m_tilemapinfo.cb(vram[tile_index], tile, mask); tileinfo.mask_data = m_mask + mask * 8; tileinfo.set(0, tile, 0, 0); diff --git a/src/mame/namco/namco_c123tmap.h b/src/mame/namco/namco_c123tmap.h index 560f48d7d87..20615046e95 100644 --- a/src/mame/namco/namco_c123tmap.h +++ b/src/mame/namco/namco_c123tmap.h @@ -12,6 +12,8 @@ class namco_c123tmap_device : public device_t, public device_gfx_interface { public: + using c123_tilemap_delegate = device_delegate<void(uint16_t, int&, int&)>; + // construction/destruction namco_c123tmap_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); @@ -23,8 +25,7 @@ public: } void set_tmap3_half_height() { m_tmap3_half_height = true; } - typedef delegate<void(uint16_t, int&, int&)> c123_tilemap_delegate; - void set_tile_callback(c123_tilemap_delegate tilemap_cb) { m_tilemapinfo.cb = tilemap_cb; } + template <typename... T> void set_tile_callback(T &&... args) { m_tilemapinfo.cb.set(std::forward<T>(args)...); } // 16 bit handlers void videoram16_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); @@ -52,6 +53,11 @@ private: struct info { + info(namco_c123tmap_device &owner) + : cb(owner) + { + } + uint16_t control[0x40 / 2]; /** * [0x1] 0x02/2 tilemap#0.scrollx diff --git a/src/mame/namco/namco_c169roz.cpp b/src/mame/namco/namco_c169roz.cpp index 759ee73276d..4fad7aac255 100644 --- a/src/mame/namco/namco_c169roz.cpp +++ b/src/mame/namco/namco_c169roz.cpp @@ -28,6 +28,7 @@ DEFINE_DEVICE_TYPE(NAMCO_C169ROZ, namco_c169roz_device, "namco_c169roz", "Namco namco_c169roz_device::namco_c169roz_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock) : device_t(mconfig, NAMCO_C169ROZ, tag, owner, clock), device_gfx_interface(mconfig, *this, gfxinfo), + m_c169_cb(*this), m_color_base(0), m_is_namcofl(false), m_mask(*this, "mask") @@ -36,6 +37,8 @@ namco_c169roz_device::namco_c169roz_device(const machine_config &mconfig, const void namco_c169roz_device::device_start() { + m_c169_cb.resolve_safe(); + m_videoram.resize(m_ramsize); std::fill(std::begin(m_videoram), std::end(m_videoram), 0x0000); diff --git a/src/mame/namco/namco_c169roz.h b/src/mame/namco/namco_c169roz.h index cd748506443..bf2a487fc1a 100644 --- a/src/mame/namco/namco_c169roz.h +++ b/src/mame/namco/namco_c169roz.h @@ -13,6 +13,8 @@ class namco_c169roz_device : public device_t, public device_gfx_interface { public: + using c169_tilemap_delegate = device_delegate<void (uint16_t, int&, int&, int)>; + // construction/destruction namco_c169roz_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); @@ -25,8 +27,7 @@ public: uint16_t videoram_r(offs_t offset); void videoram_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); - typedef delegate<void (uint16_t, int&, int&, int)> c169_tilemap_delegate; - void set_tile_callback(c169_tilemap_delegate tilemap_cb) { m_c169_cb = tilemap_cb; } + template <typename... T> void set_tile_callback(T &&... args) { m_c169_cb.set(std::forward<T>(args)...); } void draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri, uint8_t prival = 0, uint8_t primask = uint8_t(~0)); void mark_all_dirty(); diff --git a/src/mame/namco/namcofl.cpp b/src/mame/namco/namcofl.cpp index 8d9a3da29d8..20862b4776a 100644 --- a/src/mame/namco/namcofl.cpp +++ b/src/mame/namco/namcofl.cpp @@ -719,21 +719,21 @@ void namcofl_state::namcofl(machine_config &config) m_c169roz->set_palette(m_c116); m_c169roz->set_is_namcofl(true); m_c169roz->set_ram_words(0x20000 / 2); - m_c169roz->set_tile_callback(namco_c169roz_device::c169_tilemap_delegate(&namcofl_state::roz_cb, this)); + m_c169roz->set_tile_callback(FUNC(namcofl_state::roz_cb)); m_c169roz->set_color_base(0x1800); NAMCO_C355SPR(config, m_c355spr, 0); m_c355spr->set_screen(m_screen); m_c355spr->set_palette(m_c116); m_c355spr->set_scroll_offsets(0, 0); - m_c355spr->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate(&namcofl_state::objcode2tile, this)); + m_c355spr->set_tile_callback(FUNC(namcofl_state::objcode2tile)); m_c355spr->set_mix_callback(FUNC(namcofl_state::sprite_mix_callback)); m_c355spr->set_color_base(0); m_c355spr->set_buffer(1); NAMCO_C123TMAP(config, m_c123tmap, 0); m_c123tmap->set_palette(m_c116); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namcofl_state::tilemap_cb, this)); + m_c123tmap->set_tile_callback(FUNC(namcofl_state::tilemap_cb)); m_c123tmap->set_color_base(0x1000); NAMCO_C116(config, m_c116, 0); diff --git a/src/mame/namco/namconb1.cpp b/src/mame/namco/namconb1.cpp index b86c6e17a7f..1c3235b47d3 100644 --- a/src/mame/namco/namconb1.cpp +++ b/src/mame/namco/namconb1.cpp @@ -998,7 +998,7 @@ void namconb1_state::namconb1(machine_config &config) m_c355spr->set_screen(m_screen); m_c355spr->set_palette(m_c116); m_c355spr->set_scroll_offsets(0x26, 0x19); - m_c355spr->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate(&namconb1_state::NB1objcode2tile, this)); + m_c355spr->set_tile_callback(FUNC(namconb1_state::NB1objcode2tile)); m_c355spr->set_mix_callback(FUNC(namconb1_state::sprite_mix_callback)); m_c355spr->set_buffer(2); // triple buffered m_c355spr->set_color_base(0); @@ -1006,7 +1006,7 @@ void namconb1_state::namconb1(machine_config &config) NAMCO_C123TMAP(config, m_c123tmap); m_c123tmap->set_palette(m_c116); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namconb1_state::NB1TilemapCB, this)); + m_c123tmap->set_tile_callback(FUNC(namconb1_state::NB1TilemapCB)); m_c123tmap->set_color_base(0x1000); NAMCO_C116(config, m_c116); @@ -1046,22 +1046,22 @@ void namconb2_state::machbrkr(machine_config &config) { namconb2(config); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namconb2_state::NB2TilemapCB_machbrkr, this)); + m_c123tmap->set_tile_callback(FUNC(namconb2_state::NB2TilemapCB_machbrkr)); - m_c169roz->set_tile_callback(namco_c169roz_device::c169_tilemap_delegate(&namconb2_state::NB2RozCB_machbrkr, this)); + m_c169roz->set_tile_callback(FUNC(namconb2_state::NB2RozCB_machbrkr)); - m_c355spr->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate(&namconb2_state::NB2objcode2tile_machbrkr, this)); + m_c355spr->set_tile_callback(FUNC(namconb2_state::NB2objcode2tile_machbrkr)); } void namconb2_state::outfxies(machine_config &config) { namconb2(config); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namconb2_state::NB2TilemapCB_outfxies, this)); + m_c123tmap->set_tile_callback(FUNC(namconb2_state::NB2TilemapCB_outfxies)); - m_c169roz->set_tile_callback(namco_c169roz_device::c169_tilemap_delegate(&namconb2_state::NB2RozCB_outfxies, this)); + m_c169roz->set_tile_callback(FUNC(namconb2_state::NB2RozCB_outfxies)); - m_c355spr->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate(&namconb2_state::NB2objcode2tile_outfxies, this)); + m_c355spr->set_tile_callback(FUNC(namconb2_state::NB2objcode2tile_outfxies)); } diff --git a/src/mame/namco/namcos1.cpp b/src/mame/namco/namcos1.cpp index 0fad0683f62..f9696fc2ce3 100644 --- a/src/mame/namco/namcos1.cpp +++ b/src/mame/namco/namcos1.cpp @@ -1056,7 +1056,7 @@ void namcos1_state::ns1(machine_config &config) NAMCO_C123TMAP(config, m_c123tmap, 0); m_c123tmap->set_palette(m_c116); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namcos1_state::TilemapCB, this)); + m_c123tmap->set_tile_callback(FUNC(namcos1_state::TilemapCB)); m_c123tmap->set_color_base(0x0800); m_c123tmap->set_offset(73, 16); m_c123tmap->set_tmap3_half_height(); diff --git a/src/mame/namco/namcos2.cpp b/src/mame/namco/namcos2.cpp index 109bbcc0f5f..1b155c7d120 100644 --- a/src/mame/namco/namcos2.cpp +++ b/src/mame/namco/namcos2.cpp @@ -1754,7 +1754,7 @@ void namcos2_base_state::configure_c123tmap_standard(machine_config &config) { NAMCO_C123TMAP(config, m_c123tmap); m_c123tmap->set_palette(m_c116); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&namcos2_base_state::TilemapCB, this)); + m_c123tmap->set_tile_callback(FUNC(namcos2_base_state::TilemapCB)); m_c123tmap->set_color_base(16*256); } @@ -1773,7 +1773,6 @@ void sgunner_state::configure_c355spr_standard(machine_config &config) m_c355spr->set_screen(m_screen); m_c355spr->set_palette(m_c116); m_c355spr->set_scroll_offsets(0x26, 0x19); - m_c355spr->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate()); m_c355spr->set_mix_callback(FUNC(sgunner_state::sprite_mix_callback_c355)); m_c355spr->set_color_base(0); } @@ -1925,14 +1924,14 @@ void finallap_state::finalap2(machine_config &config) { base_fl(config); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&finallap_state::TilemapCB_finalap2, this)); + m_c123tmap->set_tile_callback(FUNC(finallap_state::TilemapCB_finalap2)); } void finallap_state::finalap3(machine_config &config) { finallap_c68(config); - m_c123tmap->set_tile_callback(namco_c123tmap_device::c123_tilemap_delegate(&finallap_state::TilemapCB_finalap2, this)); + m_c123tmap->set_tile_callback(FUNC(finallap_state::TilemapCB_finalap2)); } @@ -2030,7 +2029,7 @@ void sgunner_state::luckywld(machine_config &config) m_slave->set_addrmap(AS_PROGRAM, &sgunner_state::slave_luckywld_am); configure_c169roz_standard(config); - m_c169roz->set_tile_callback(namco_c169roz_device::c169_tilemap_delegate(&sgunner_state::RozCB_luckywld, this)); + m_c169roz->set_tile_callback(FUNC(sgunner_state::RozCB_luckywld)); } void metlhawk_state::metlhawk(machine_config &config) @@ -2059,7 +2058,7 @@ void metlhawk_state::metlhawk(machine_config &config) configure_c123tmap_standard(config); configure_c169roz_standard(config); - m_c169roz->set_tile_callback(namco_c169roz_device::c169_tilemap_delegate(&metlhawk_state::RozCB_metlhawk, this)); + m_c169roz->set_tile_callback(FUNC(metlhawk_state::RozCB_metlhawk)); m_c140->add_route(0, "speaker", 1.0, 0); m_c140->add_route(1, "speaker", 1.0, 1); diff --git a/src/mame/namco/namcos21_c67.cpp b/src/mame/namco/namcos21_c67.cpp index 08cb640595a..2efbf3d0e26 100644 --- a/src/mame/namco/namcos21_c67.cpp +++ b/src/mame/namco/namcos21_c67.cpp @@ -859,7 +859,6 @@ void namcos21_c67_state::namcos21(machine_config &config) m_c355spr->set_screen(m_screen); m_c355spr->set_palette(m_palette); m_c355spr->set_scroll_offsets(0x26, 0x19); - m_c355spr->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate()); m_c355spr->set_mix_callback(FUNC(namcos21_c67_state::sprite_mix_callback)); m_c355spr->set_color_base(0x1000); m_c355spr->set_external_prifill(true); diff --git a/src/mame/namco/namcos21_de.cpp b/src/mame/namco/namcos21_de.cpp index 0f38e2777c9..23252f0ed1a 100644 --- a/src/mame/namco/namcos21_de.cpp +++ b/src/mame/namco/namcos21_de.cpp @@ -200,7 +200,6 @@ void namco_de_pcbstack_device::device_add_mconfig(machine_config &config) m_c355spr->set_screen(m_screen); m_c355spr->set_palette(m_palette); m_c355spr->set_scroll_offsets(0x26, 0x19); - m_c355spr->set_tile_callback(namco_c355spr_device::c355_obj_code2tile_delegate()); m_c355spr->set_mix_callback(FUNC(namco_de_pcbstack_device::sprite_mix_callback)); m_c355spr->set_color_base(0x1000); m_c355spr->set_external_prifill(true); diff --git a/src/mame/shared/namco_c355spr.cpp b/src/mame/shared/namco_c355spr.cpp index efff32943ff..40ce7215e89 100644 --- a/src/mame/shared/namco_c355spr.cpp +++ b/src/mame/shared/namco_c355spr.cpp @@ -71,6 +71,7 @@ namco_c355spr_device::namco_c355spr_device(const machine_config &mconfig, device device_t(mconfig, type, tag, owner, clock), device_gfx_interface(mconfig, *this), device_video_interface(mconfig, *this), + m_code2tile(*this, DEVICE_SELF, FUNC(namco_c355spr_device::default_code2tile)), m_pri_cb(*this, DEVICE_SELF, FUNC(namco_c355spr_device::default_priority)), m_mix_cb(*this, DEVICE_SELF, FUNC(namco_c355spr_device::default_mix)), m_read_spritetile(*this, DEVICE_SELF, FUNC(namco_c355spr_device::read_spritetile)), @@ -257,6 +258,7 @@ void namco_c355spr_device::device_start() gfx(0)->set_colorbase(m_colbase); gfx(0)->set_granularity(m_granularity); + m_code2tile.resolve(); m_pri_cb.resolve(); screen().register_screen_bitmap(m_renderbitmap); diff --git a/src/mame/shared/namco_c355spr.h b/src/mame/shared/namco_c355spr.h index 18f7744c2ae..c1f03c8c7fb 100644 --- a/src/mame/shared/namco_c355spr.h +++ b/src/mame/shared/namco_c355spr.h @@ -11,6 +11,14 @@ class namco_c355spr_device : public device_t, public device_gfx_interface, public device_video_interface { public: + using c355_obj_code2tile_delegate = device_delegate<int (int)>; + using c355_obj_entry_attr_delegate = device_delegate<u16(int, u8)>; + using c355_obj_entry_attr_which_delegate = device_delegate<u16(int, u8, int)>; + using c355_obj_entry_delegate = device_delegate<u16(int)>; + using c355_obj_entry_which_delegate = device_delegate<u16(int, int)>; + using c355_priority_delegate = device_delegate<int(int)>; + using c355_mix_delegate = device_delegate<bool (u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri)>; + // construction/destruction namco_c355spr_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock = 0); @@ -28,6 +36,7 @@ public: // the Namco code currently requires us to allocate memory in the device, the Data East hookup uses access callbacks void set_device_allocates_spriteram(bool allocate_memory) { m_device_allocates_spriteram = allocate_memory; } + template <typename... T> void set_tile_callback(T &&... args) { m_code2tile.set(std::forward<T>(args)...); } template <typename... T> void set_priority_callback(T &&... args) { m_pri_cb.set(std::forward<T>(args)...); } template <typename... T> void set_mix_callback(T &&... args) { m_mix_cb.set(std::forward<T>(args)...); } template <typename... T> void set_read_spritetile(T &&... args) { m_read_spritetile.set(std::forward<T>(args)...); } @@ -42,23 +51,6 @@ public: void position_w(offs_t offset, u16 data, u16 mem_mask = ~0); void vblank(int state); - typedef delegate<int (int)> c355_obj_code2tile_delegate; - typedef device_delegate<u16(int, u8)> c355_obj_entry_attr_delegate; - typedef device_delegate<u16(int, u8, int)> c355_obj_entry_attr_which_delegate; - typedef device_delegate<u16(int)> c355_obj_entry_delegate; - typedef device_delegate<u16(int, int)> c355_obj_entry_which_delegate; - typedef device_delegate<int(int)> c355_priority_delegate; - typedef device_delegate<bool (u16 &dest, u8 &destpri, u16 colbase, u16 src, int srcpri, int pri)> c355_mix_delegate; - - void set_tile_callback(c355_obj_code2tile_delegate cb) - { - if (!cb.isnull()) - m_code2tile = cb; - else - m_code2tile = c355_obj_code2tile_delegate(&namco_c355spr_device::default_code2tile, this); - } - - void draw(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect, int pri = 0); void draw(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect, int pri = 0); |
