From c0f052599e38ca29e9db8331ca6f075579d34218 Mon Sep 17 00:00:00 2001 From: cam900 Date: Thu, 14 Jun 2018 23:05:48 +0900 Subject: [PATCH] sf.cpp : Cleanups (#3630) * sf.cpp : Reduce duplicates, Reduce RAM usage of tilemap, Reduce runtime tag lookups * sf.cpp : Revert tilemap things - each tile of tilemaps are never updated, Fix build --- src/mame/drivers/sf.cpp | 54 +++++++++++++++++------------------------ src/mame/includes/sf.h | 20 ++++++++------- src/mame/video/sf.cpp | 4 +-- 3 files changed, 35 insertions(+), 43 deletions(-) diff --git a/src/mame/drivers/sf.cpp b/src/mame/drivers/sf.cpp index 455e7b1dddb..b7b61248e26 100644 --- a/src/mame/drivers/sf.cpp +++ b/src/mame/drivers/sf.cpp @@ -140,25 +140,17 @@ WRITE8_MEMBER(sf_state::soundcmd_w) WRITE8_MEMBER(sf_state::sound2_bank_w) { - membank("bank1")->set_entry(data); + m_audiobank->set_entry(data); } -WRITE8_MEMBER(sf_state::msm1_5205_w) +template +WRITE8_MEMBER(sf_state::msm_w) { - m_msm1->reset_w(BIT(data, 7)); + m_msm[Chip]->reset_w(BIT(data, 7)); /* ?? bit 6?? */ - m_msm1->data_w(data); - m_msm1->vclk_w(1); - m_msm1->vclk_w(0); -} - -WRITE8_MEMBER(sf_state::msm2_5205_w) -{ - m_msm2->reset_w(BIT(data, 7)); - /* ?? bit 6?? */ - m_msm2->data_w(data); - m_msm2->vclk_w(1); - m_msm2->vclk_w(0); + m_msm[Chip]->data_w(data); + m_msm[Chip]->vclk_w(1); + m_msm[Chip]->vclk_w(0); } void sf_state::sfan_map(address_map &map) @@ -245,15 +237,15 @@ void sf_state::sound_map(address_map &map) void sf_state::sound2_map(address_map &map) { map(0x0000, 0x7fff).rom(); - map(0x8000, 0xffff).bankr("bank1"); + map(0x8000, 0xffff).bankr("audiobank"); map(0x0000, 0xffff).nopw(); /* avoid cluttering up error.log */ } void sf_state::sound2_io_map(address_map &map) { map.global_mask(0xff); - map(0x00, 0x00).w(FUNC(sf_state::msm1_5205_w)); - map(0x01, 0x01).w(FUNC(sf_state::msm2_5205_w)); + map(0x00, 0x00).w(FUNC(sf_state::msm_w<0>)); + map(0x01, 0x01).w(FUNC(sf_state::msm_w<1>)); map(0x01, 0x01).r(m_soundlatch, FUNC(generic_latch_8_device::read)); map(0x02, 0x02).w(FUNC(sf_state::sound2_bank_w)); } @@ -497,8 +489,8 @@ static const gfx_layout char_layout = RGN_FRAC(1,1), 2, { 4, 0 }, - { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16 }, + { STEP4(0,1), STEP4(4*2,1) }, + { STEP8(0,1*16) }, 16*8 }; @@ -508,10 +500,8 @@ static const gfx_layout sprite_layout = RGN_FRAC(1,2), 4, { 4, 0, RGN_FRAC(1,2)+4, RGN_FRAC(1,2) }, - { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3, - 16*16+0, 16*16+1, 16*16+2, 16*16+3, 16*16+8+0, 16*16+8+1, 16*16+8+2, 16*16+8+3 }, - { 0*16, 1*16, 2*16, 3*16, 4*16, 5*16, 6*16, 7*16, - 8*16, 9*16, 10*16, 11*16, 12*16, 13*16, 14*16, 15*16 }, + { STEP4(0,1), STEP4(4*2,1), STEP4(4*2*2*16,1), STEP4(4*2*2*16+8,1) }, + { STEP16(0,1*16) }, 64*8 }; @@ -530,7 +520,7 @@ void sf_state::machine_start() save_item(NAME(m_bgscroll)); save_item(NAME(m_fgscroll)); - membank("bank1")->configure_entries(0, 256, memregion("audio2")->base() + 0x8000, 0x8000); + m_audiobank->configure_entries(0, 256, memregion("audio2")->base() + 0x8000, 0x8000); } void sf_state::machine_reset() @@ -679,7 +669,7 @@ ROM_START( sf ) ROM_REGION( 0x004000, "gfx4", 0 ) ROM_LOAD( "sf-27.4d", 0x000000, 0x004000, CRC(2b09b36d) SHA1(9fe1dd3a9396fbb06f30247cfe526653553beca1) ) /* Characters planes 1-2 */ - ROM_REGION( 0x40000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x40000, "tilerom", 0 ) /* background tilemaps */ ROM_LOAD( "sf-37.4h", 0x000000, 0x010000, CRC(23d09d3d) SHA1(a0c71abc49c5fe59487a63b502e3d03021bfef13) ) ROM_LOAD( "sf-36.3h", 0x010000, 0x010000, CRC(ea16df6c) SHA1(68709a314b775c500817fc17d40a80204b2ae06c) ) ROM_LOAD( "sf-32.3g", 0x020000, 0x010000, CRC(72df2bd9) SHA1(9a0da618139673738b6b3302207255e44c5491a2) ) @@ -749,7 +739,7 @@ ROM_START( sfua ) ROM_REGION( 0x004000, "gfx4", 0 ) ROM_LOAD( "sf-27.4d", 0x000000, 0x004000, CRC(2b09b36d) SHA1(9fe1dd3a9396fbb06f30247cfe526653553beca1) ) /* Characters planes 1-2 */ - ROM_REGION( 0x40000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x40000, "tilerom", 0 ) /* background tilemaps */ ROM_LOAD( "sf-37.4h", 0x000000, 0x010000, CRC(23d09d3d) SHA1(a0c71abc49c5fe59487a63b502e3d03021bfef13) ) ROM_LOAD( "sf-36.3h", 0x010000, 0x010000, CRC(ea16df6c) SHA1(68709a314b775c500817fc17d40a80204b2ae06c) ) ROM_LOAD( "sf-32.3g", 0x020000, 0x010000, CRC(72df2bd9) SHA1(9a0da618139673738b6b3302207255e44c5491a2) ) @@ -819,7 +809,7 @@ ROM_START( sfj ) ROM_REGION( 0x004000, "gfx4", 0 ) ROM_LOAD( "sf-27.4d", 0x000000, 0x004000, CRC(2b09b36d) SHA1(9fe1dd3a9396fbb06f30247cfe526653553beca1) ) /* Characters planes 1-2 */ - ROM_REGION( 0x40000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x40000, "tilerom", 0 ) /* background tilemaps */ ROM_LOAD( "sf-37.4h", 0x000000, 0x010000, CRC(23d09d3d) SHA1(a0c71abc49c5fe59487a63b502e3d03021bfef13) ) ROM_LOAD( "sf-36.3h", 0x010000, 0x010000, CRC(ea16df6c) SHA1(68709a314b775c500817fc17d40a80204b2ae06c) ) ROM_LOAD( "sf-32.3g", 0x020000, 0x010000, CRC(72df2bd9) SHA1(9a0da618139673738b6b3302207255e44c5491a2) ) @@ -886,7 +876,7 @@ ROM_START( sfan ) ROM_REGION( 0x004000, "gfx4", 0 ) ROM_LOAD( "sf-27.4d", 0x000000, 0x004000, CRC(2b09b36d) SHA1(9fe1dd3a9396fbb06f30247cfe526653553beca1) ) /* Characters planes 1-2 */ - ROM_REGION( 0x40000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x40000, "tilerom", 0 ) /* background tilemaps */ ROM_LOAD( "sf-37.4h", 0x000000, 0x010000, CRC(23d09d3d) SHA1(a0c71abc49c5fe59487a63b502e3d03021bfef13) ) ROM_LOAD( "sf-36.3h", 0x010000, 0x010000, CRC(ea16df6c) SHA1(68709a314b775c500817fc17d40a80204b2ae06c) ) ROM_LOAD( "sf-32.3g", 0x020000, 0x010000, CRC(72df2bd9) SHA1(9a0da618139673738b6b3302207255e44c5491a2) ) @@ -954,7 +944,7 @@ ROM_START( sfjan ) ROM_LOAD( "sf_27.4d.27256", 0x000000, 0x004000, CRC(59416e03) SHA1(028e74e0b23c5063883d19f94da35719be4feada) ) // First half FF, second half matches known ROM_CONTINUE( 0, 0x004000 ) - ROM_REGION( 0x40000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x40000, "tilerom", 0 ) /* background tilemaps */ ROM_LOAD( "sf-37.4h", 0x000000, 0x010000, CRC(23d09d3d) SHA1(a0c71abc49c5fe59487a63b502e3d03021bfef13) ) // sf_37.4h.27c512 ROM_LOAD( "sf-36.3h", 0x010000, 0x010000, CRC(ea16df6c) SHA1(68709a314b775c500817fc17d40a80204b2ae06c) ) // sf_36.3h.27c512 ROM_LOAD( "sf-32.3g", 0x020000, 0x010000, CRC(72df2bd9) SHA1(9a0da618139673738b6b3302207255e44c5491a2) ) // sf_32.3g.27c512 @@ -1023,7 +1013,7 @@ ROM_START( sfw ) ROM_REGION( 0x004000, "gfx4", 0 ) ROM_LOAD( "sf-27.4d", 0x000000, 0x004000, CRC(2b09b36d) SHA1(9fe1dd3a9396fbb06f30247cfe526653553beca1) ) /* Characters planes 1-2 */ - ROM_REGION( 0x40000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x40000, "tilerom", 0 ) /* background tilemaps */ ROM_LOAD( "sf-37.4h", 0x000000, 0x010000, CRC(23d09d3d) SHA1(a0c71abc49c5fe59487a63b502e3d03021bfef13) ) ROM_LOAD( "sf-36.3h", 0x010000, 0x010000, CRC(ea16df6c) SHA1(68709a314b775c500817fc17d40a80204b2ae06c) ) ROM_LOAD( "sf-32.3g", 0x020000, 0x010000, CRC(72df2bd9) SHA1(9a0da618139673738b6b3302207255e44c5491a2) ) @@ -1087,7 +1077,7 @@ ROM_START( sfp ) ROM_REGION( 0x004000, "gfx4", 0 ) ROM_LOAD( "vram.4d", 0x000000, 0x004000, CRC(bfadfb32) SHA1(8443ad9f02da5fb032017fc0c657b1bdc15e4f27) ) /* Characters planes 1-2 */ - ROM_REGION( 0x40000, "gfx5", 0 ) /* background tilemaps */ + ROM_REGION( 0x40000, "tilerom", 0 ) /* background tilemaps */ ROM_LOAD( "bks1j10.5h", 0x000000, 0x010000, CRC(4934aacd) SHA1(15274ae8b26799e15c7a66ff89ffd386de1659d3) ) ROM_LOAD( "bks1j18.3h", 0x010000, 0x010000, CRC(551ffc88) SHA1(4f9213f4e80033f910dd8aae44b2c6d9ba760d61) ) ROM_LOAD( "ms1j10.3g", 0x020000, 0x010000, CRC(f92958b8) SHA1(da8fa64ea9ad27c737225681c49f7c57cc7afeed) ) diff --git a/src/mame/includes/sf.h b/src/mame/includes/sf.h index 4ec2d943b46..ef6e682c981 100644 --- a/src/mame/includes/sf.h +++ b/src/mame/includes/sf.h @@ -13,24 +13,24 @@ class sf_state : public driver_device { public: - sf_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag), + sf_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), m_maincpu(*this, "maincpu"), m_audiocpu(*this, "audiocpu"), - m_msm1(*this, "msm1"), - m_msm2(*this, "msm2"), + m_msm(*this, "msm%u", 1U), m_gfxdecode(*this, "gfxdecode"), m_palette(*this, "palette"), m_soundlatch(*this, "soundlatch"), m_videoram(*this, "videoram"), - m_objectram(*this, "objectram") + m_objectram(*this, "objectram"), + m_tilerom(*this, "tilerom"), + m_audiobank(*this, "audiobank") { } /* devices */ required_device m_maincpu; required_device m_audiocpu; - required_device m_msm1; - required_device m_msm2; + required_device_array m_msm; required_device m_gfxdecode; required_device m_palette; required_device m_soundlatch; @@ -38,6 +38,9 @@ public: /* memory pointers */ required_shared_ptr m_videoram; required_shared_ptr m_objectram; + required_region_ptr m_tilerom; + + required_memory_bank m_audiobank; /* video-related */ tilemap_t *m_bg_tilemap; @@ -55,8 +58,7 @@ public: DECLARE_WRITE16_MEMBER(bg_scroll_w); DECLARE_WRITE16_MEMBER(fg_scroll_w); DECLARE_WRITE16_MEMBER(gfxctrl_w); - DECLARE_WRITE8_MEMBER(msm1_5205_w); - DECLARE_WRITE8_MEMBER(msm2_5205_w); + template DECLARE_WRITE8_MEMBER(msm_w); TILE_GET_INFO_MEMBER(get_bg_tile_info); TILE_GET_INFO_MEMBER(get_fg_tile_info); TILE_GET_INFO_MEMBER(get_tx_tile_info); diff --git a/src/mame/video/sf.cpp b/src/mame/video/sf.cpp index 1e6cebb2130..fe1e62bee9e 100644 --- a/src/mame/video/sf.cpp +++ b/src/mame/video/sf.cpp @@ -11,7 +11,7 @@ TILE_GET_INFO_MEMBER(sf_state::get_bg_tile_info) { - uint8_t *base = memregion("gfx5")->base() + 2 * tile_index; + uint8_t *base = &m_tilerom[2 * tile_index]; int attr = base[0x10000]; int color = base[0]; int code = (base[0x10000 + 1] << 8) | base[1]; @@ -23,7 +23,7 @@ TILE_GET_INFO_MEMBER(sf_state::get_bg_tile_info) TILE_GET_INFO_MEMBER(sf_state::get_fg_tile_info) { - uint8_t *base = memregion("gfx5")->base() + 0x20000 + 2 * tile_index; + uint8_t *base = &m_tilerom[0x20000 + 2 * tile_index]; int attr = base[0x10000]; int color = base[0]; int code = (base[0x10000 + 1] << 8) | base[1];