diff options
author | cam900 <dbtlrchl@naver.com> | 2018-05-11 10:54:17 +0900 |
---|---|---|
committer | Vas Crabb <cuavas@users.noreply.github.com> | 2018-05-11 11:54:16 +1000 |
commit | 85c788bb9ab6127c51d0546c601b7b5860d4339a (patch) | |
tree | dd048d5e99a05de800ad106d176285aff7c9b63a /src/mame/drivers/system16.cpp | |
parent | 863e837f20dba64c4b59bf5c026243d833388419 (diff) |
rf5c68.cpp Updates, etc (#3515)
* rf5c68.cpp : Add save states, Add device_rom_interface, because Datasheet says it's can connect with ROM, Add notes
fmtowns.cpp, segas18.cpp, segas32.cpp, system16.cpp : Reduce runtime tag lookups
megacd.cpp, system16.cpp, segas32.cpp : Fix bit manipulations
fmtowns.cpp, system16.cpp : Reduce duplicates
* segas18.cpp : Add output finders
* rf5c68.cpp : Add rom_bank_updated
* rf5c68.cpp : Add device_memory_interface instead device_rom_interface
* segas18.cpp : Fix regression
Diffstat (limited to 'src/mame/drivers/system16.cpp')
-rw-r--r-- | src/mame/drivers/system16.cpp | 140 |
1 files changed, 59 insertions, 81 deletions
diff --git a/src/mame/drivers/system16.cpp b/src/mame/drivers/system16.cpp index b3255f63472..fb5b5e9b6f1 100644 --- a/src/mame/drivers/system16.cpp +++ b/src/mame/drivers/system16.cpp @@ -301,15 +301,7 @@ WRITE16_MEMBER(segas1x_bootleg_state::sys16_tilebank_w) { if (ACCESSING_BITS_0_7) { - switch (offset & 1) - { - case 0: - m_tile_bank0 = data & 0x0f; - break; - case 1: - m_tile_bank1 = data & 0x0f; - break; - } + m_tile_bank[offset & 1] = data & 0x0f; } } @@ -393,7 +385,7 @@ READ8_MEMBER(segas1x_bootleg_state::tturfbl_soundbank_r) WRITE8_MEMBER(segas1x_bootleg_state::tturfbl_soundbank_w) { - uint8_t *mem = memregion("soundcpu")->base(); + uint8_t *mem = m_soundcpu_region->base(); switch(data) { @@ -493,11 +485,11 @@ void segas1x_bootleg_state::sound_7759_map(address_map &map) WRITE8_MEMBER(segas1x_bootleg_state::upd7759_bank_w)//* { - int offs, size = memregion("soundcpu")->bytes() - 0x10000; + int offs, size = m_soundcpu_region->bytes() - 0x10000; m_upd7759->reset_w(data & 0x40); offs = 0x10000 + (data * 0x4000) % size; - membank("bank1")->set_base(memregion("soundcpu")->base() + offs); + membank("bank1")->set_base(m_soundcpu_region->base() + offs); } @@ -515,24 +507,24 @@ void segas1x_bootleg_state::sound_7759_io_map(address_map &map) void segas1x_bootleg_state::set_tile_bank( int data ) { - m_tile_bank0 = (data >> 4) & 0x0f; - m_tile_bank1 = data & 0x0f; + m_tile_bank[0] = (data >> 4) & 0x0f; + m_tile_bank[1] = data & 0x0f; } void segas1x_bootleg_state::set_fg_page( int data ) { - m_fg_page[0] = data >> 12; - m_fg_page[1] = (data >> 8) & 0x0f; - m_fg_page[2] = (data >> 4) & 0x0f; - m_fg_page[3] = data & 0x0f; + m_fg_page[0][0] = data >> 12; + m_fg_page[0][1] = (data >> 8) & 0x0f; + m_fg_page[0][2] = (data >> 4) & 0x0f; + m_fg_page[0][3] = data & 0x0f; } void segas1x_bootleg_state::set_bg_page( int data ) { - m_bg_page[0] = data >> 12; - m_bg_page[1] = (data >> 8) & 0x0f; - m_bg_page[2] = (data >> 4) & 0x0f; - m_bg_page[3] = data & 0x0f; + m_bg_page[0][0] = data >> 12; + m_bg_page[0][1] = (data >> 8) & 0x0f; + m_bg_page[0][2] = (data >> 4) & 0x0f; + m_bg_page[0][3] = data & 0x0f; } @@ -668,27 +660,10 @@ void segas1x_bootleg_state::datsu_set_pages( ) set_bg_page(page); } -WRITE16_MEMBER(segas1x_bootleg_state::datsu_page0_w) -{ - COMBINE_DATA(&m_datsu_page[0]); - datsu_set_pages(); -} - -WRITE16_MEMBER(segas1x_bootleg_state::datsu_page1_w) -{ - COMBINE_DATA(&m_datsu_page[1]); - datsu_set_pages(); -} - -WRITE16_MEMBER(segas1x_bootleg_state::datsu_page2_w) -{ - COMBINE_DATA(&m_datsu_page[2]); - datsu_set_pages(); -} - -WRITE16_MEMBER(segas1x_bootleg_state::datsu_page3_w) +template<int Page> +WRITE16_MEMBER(segas1x_bootleg_state::datsu_page_w) { - COMBINE_DATA(&m_datsu_page[3]); + COMBINE_DATA(&m_datsu_page[Page]); datsu_set_pages(); } @@ -703,10 +678,10 @@ void segas1x_bootleg_state::bayrouteb2_map(address_map &map) map(0x718008, 0x718009).w(this, FUNC(segas1x_bootleg_state::s16bl_fgscrollx_bank_w)); // and tile bank map(0x718010, 0x718011).w(this, FUNC(segas1x_bootleg_state::s16bl_bgscrolly_w)); map(0x718018, 0x718019).w(this, FUNC(segas1x_bootleg_state::s16bl_bgscrollx_w)); - map(0x718020, 0x718021).w(this, FUNC(segas1x_bootleg_state::datsu_page0_w)); - map(0x718022, 0x718023).w(this, FUNC(segas1x_bootleg_state::datsu_page1_w)); - map(0x718024, 0x718025).w(this, FUNC(segas1x_bootleg_state::datsu_page2_w)); - map(0x718026, 0x718027).w(this, FUNC(segas1x_bootleg_state::datsu_page3_w)); + map(0x718020, 0x718021).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<0>)); + map(0x718022, 0x718023).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<1>)); + map(0x718024, 0x718025).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<2>)); + map(0x718026, 0x718027).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<3>)); map(0x800000, 0x800fff).ram().w(this, FUNC(segas1x_bootleg_state::paletteram_w)).share("paletteram"); map(0x900000, 0x900001).portr("DSW1"); @@ -737,10 +712,10 @@ void segas1x_bootleg_state::dduxbl_map(address_map &map) map(0xC46008, 0xC46009).w(this, FUNC(segas1x_bootleg_state::s16bl_fgscrollx_w)); map(0xC46010, 0xC46011).w(this, FUNC(segas1x_bootleg_state::s16bl_bgscrolly_w)); map(0xC46018, 0xC46019).w(this, FUNC(segas1x_bootleg_state::s16bl_bgscrollx_w)); - map(0xC46020, 0xC46021).w(this, FUNC(segas1x_bootleg_state::datsu_page0_w)); - map(0xC46022, 0xC46023).w(this, FUNC(segas1x_bootleg_state::datsu_page1_w)); - map(0xC46024, 0xC46025).w(this, FUNC(segas1x_bootleg_state::datsu_page2_w)); - map(0xC46026, 0xC46027).w(this, FUNC(segas1x_bootleg_state::datsu_page3_w)); + map(0xC46020, 0xC46021).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<0>)); + map(0xC46022, 0xC46023).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<1>)); + map(0xC46024, 0xC46025).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<2>)); + map(0xC46026, 0xC46027).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<3>)); map(0xffc000, 0xffffff).ram(); // work ram } @@ -1000,10 +975,10 @@ void segas1x_bootleg_state::tturfbl_map(address_map &map) map(0xC46008, 0xC46009).w(this, FUNC(segas1x_bootleg_state::s16bl_fgscrollx_w)); map(0xC46010, 0xC46011).w(this, FUNC(segas1x_bootleg_state::s16bl_bgscrolly_w)); map(0xC46018, 0xC46019).w(this, FUNC(segas1x_bootleg_state::s16bl_bgscrollx_w)); - map(0xC46020, 0xC46021).w(this, FUNC(segas1x_bootleg_state::datsu_page0_w)); - map(0xc46022, 0xc46023).w(this, FUNC(segas1x_bootleg_state::datsu_page1_w)); - map(0xC46024, 0xC46025).w(this, FUNC(segas1x_bootleg_state::datsu_page2_w)); - map(0xC46026, 0xC46027).w(this, FUNC(segas1x_bootleg_state::datsu_page3_w)); + map(0xC46020, 0xC46021).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<0>)); + map(0xc46022, 0xc46023).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<1>)); + map(0xC46024, 0xC46025).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<2>)); + map(0xC46026, 0xC46027).w(this, FUNC(segas1x_bootleg_state::datsu_page_w<3>)); } /***************************************************************************/ @@ -1020,8 +995,8 @@ WRITE16_MEMBER(segas1x_bootleg_state::sys18_tilebank_w) { if (ACCESSING_BITS_0_7) { - m_tile_bank0 = (data >> 0) & 0x0f; - m_tile_bank1 = (data >> 4) & 0x0f; + m_tile_bank[0] = (data >> 0) & 0x0f; + m_tile_bank[1] = (data >> 4) & 0x0f; } } @@ -1046,7 +1021,7 @@ void segas1x_bootleg_state::sound_18_map(address_map &map) WRITE8_MEMBER(segas1x_bootleg_state::sys18_soundbank_w) { - uint8_t *mem = memregion("soundcpu")->base(); + uint8_t *mem = m_soundcpu_region->base(); int rom = (data >> 6) & 3; int bank = (data & 0x3f); int mask = m_sound_info[rom * 2 + 0]; @@ -1067,6 +1042,12 @@ void segas1x_bootleg_state::sound_18_io_map(address_map &map) map(0xc0, 0xc0).r(m_soundlatch, FUNC(generic_latch_8_device::read)); } +void segas1x_bootleg_state::pcm_map(address_map &map) +{ + map.unmap_value_high(); + map(0x0000, 0xffff).ram(); +} + /*************************************************************************** @@ -1211,7 +1192,7 @@ READ8_MEMBER(segas1x_bootleg_state::shdancbl_soundbank_r) WRITE8_MEMBER(segas1x_bootleg_state::shdancbl_bankctrl_w) { - uint8_t *mem = memregion("soundcpu")->base(); + uint8_t *mem = m_soundcpu_region->base(); switch (data) { @@ -1326,7 +1307,7 @@ void segas1x_bootleg_state::mwalkbl_map(address_map &map) WRITE8_MEMBER(segas1x_bootleg_state::sys18bl_okibank_w) // TODO: verify correctness { //popmessage("okibank: %02x\n", data); - membank("okibank")->set_entry(data & 0x07); + m_okibank->set_entry(data & 0x07); } /* bootleg doesn't have real vdp or i/o */ @@ -1382,17 +1363,17 @@ void segas1x_bootleg_state::sys18bl_oki_map(address_map &map) WRITE16_MEMBER(segas1x_bootleg_state::ddcrewbl_spritebank_w) { -// printf("banking write %08x: %04x (%04x %04x)\n", m_maincpu->pc(), offset*2, data&mem_mask, mem_mask); +// printf("banking write %08x: %04x (%04x %04x)\n", m_maincpu->pc(), offset<<1, data&mem_mask, mem_mask); data &= mem_mask; // offset &= 0x7; offset += 4; - int maxbanks = memregion("sprites")->bytes() / 0x40000; + int maxbanks = m_sprites_region->bytes() >> 18; if (data >= maxbanks) data = 255; - m_sprites->set_bank((offset) * 2 + 0, data * 2 + 0); - m_sprites->set_bank((offset) * 2 + 1, data * 2 + 1); + m_sprites->set_bank((offset << 1) | 0, (data << 1) | 0); + m_sprites->set_bank((offset << 1) | 1, (data << 1) | 1); } @@ -2481,18 +2462,15 @@ MACHINE_CONFIG_START(segas1x_bootleg_state::system18) MCFG_DEVICE_ADD("3438.0", YM3438, 8000000) MCFG_SOUND_ROUTE(0, "lspeaker", 0.40) MCFG_SOUND_ROUTE(1, "rspeaker", 0.40) - MCFG_SOUND_ROUTE(2, "lspeaker", 0.40) - MCFG_SOUND_ROUTE(3, "rspeaker", 0.40) MCFG_DEVICE_ADD("3438.1", YM3438, 8000000) MCFG_SOUND_ROUTE(0, "lspeaker", 0.40) MCFG_SOUND_ROUTE(1, "rspeaker", 0.40) - MCFG_SOUND_ROUTE(2, "lspeaker", 0.40) - MCFG_SOUND_ROUTE(3, "rspeaker", 0.40) MCFG_DEVICE_ADD("5c68", RF5C68, 8000000) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "lspeaker", 1.0) MCFG_SOUND_ROUTE(ALL_OUTPUTS, "rspeaker", 1.0) + MCFG_DEVICE_ADDRESS_MAP(0, pcm_map) MACHINE_CONFIG_END @@ -3784,7 +3762,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,common) if (m_soundbank.found()) { - m_soundbank->configure_entries(0, 8, memregion("soundcpu")->base(), 0x4000); + m_soundbank->configure_entries(0, 8, m_soundcpu_region->base(), 0x4000); m_soundbank->set_entry(0); } } @@ -3869,7 +3847,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,bayrouteb1) DRIVER_INIT_MEMBER(segas1x_bootleg_state,bayrouteb2) { - uint8_t *mem = memregion("soundcpu")->base(); + uint8_t *mem = m_soundcpu_region->base(); memcpy(mem, mem + 0x10000, 0x8000); @@ -3885,7 +3863,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,goldnaxeb2) DRIVER_INIT_MEMBER(segas1x_bootleg_state,tturfbl) { - uint8_t *mem = memregion("soundcpu")->base(); + uint8_t *mem = m_soundcpu_region->base(); memcpy(mem, mem + 0x10000, 0x8000); @@ -3937,26 +3915,26 @@ WRITE16_MEMBER(segas1x_bootleg_state::altbeastbl_gfx_w) } case 0x10: { - m_bg_page[0] = (data >> 0) & 0x0f; - m_fg_page[0] = (data >> 4) & 0x0f; + m_bg_page[0][0] = (data >> 0) & 0x0f; + m_fg_page[0][0] = (data >> 4) & 0x0f; break; } case 0x11: { - m_bg_page[1] = (data >> 0) & 0x0f; - m_fg_page[1] = (data >> 4) & 0x0f; + m_bg_page[0][1] = (data >> 0) & 0x0f; + m_fg_page[0][1] = (data >> 4) & 0x0f; break; } case 0x12: { - m_bg_page[2] = (data >> 0) & 0x0f; - m_fg_page[2] = (data >> 4) & 0x0f; + m_bg_page[0][2] = (data >> 0) & 0x0f; + m_fg_page[0][2] = (data >> 4) & 0x0f; break; } case 0x13: { - m_bg_page[3] = (data >> 0) & 0x0f; - m_fg_page[3] = (data >> 4) & 0x0f; + m_bg_page[0][3] = (data >> 0) & 0x0f; + m_fg_page[0][3] = (data >> 4) & 0x0f; break; } } @@ -3990,7 +3968,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,beautyb) /* Sys18 */ DRIVER_INIT_MEMBER(segas1x_bootleg_state,shdancbl) { - uint8_t *mem = memregion("soundcpu")->base();; + uint8_t *mem = m_soundcpu_region->base();; /* Copy first 32K of IC45 to Z80 address space */ memcpy(mem, mem + 0x10000, 0x8000); @@ -4004,7 +3982,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state,shdancbl) DRIVER_INIT_MEMBER(segas1x_bootleg_state,astormbl) { - uint8_t *RAM = memregion("soundcpu")->base(); + uint8_t *RAM = m_soundcpu_region->base(); static const int astormbl_sound_info[] = { 0x0f, 0x00000, // ROM #1 = 128K @@ -4031,7 +4009,7 @@ DRIVER_INIT_MEMBER(segas1x_bootleg_state, sys18bl_oki) m_splittab_fg_x = &m_textram[0x0f80/2]; m_splittab_bg_x = &m_textram[0x0fc0/2]; - membank("okibank")->configure_entries(0, 8, memregion("oki")->base() + 0x30000, 0x10000); + m_okibank->configure_entries(0, 8, memregion("oki")->base() + 0x30000, 0x10000); } DRIVER_INIT_MEMBER(segas1x_bootleg_state, astormb2) |