summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2020-11-24 12:33:17 +0100
committer Olivier Galibert <galibert@pobox.com>2020-11-24 12:33:31 +0100
commit4537a4b428f4241c85259f3c2b779ef77d7d7580 (patch)
treeca2274df7772cec6620788fd70ddb8b752881bde
parent518efdf92634e9f0478ccd52b3f1867a079c75a4 (diff)
Fix sega outrun and system 16b, some confusion between regions and shares and a bank initialized too late
-rw-r--r--src/mame/drivers/segaorun.cpp4
-rw-r--r--src/mame/drivers/segas16b.cpp3
-rw-r--r--src/mame/machine/315_5195.cpp25
-rw-r--r--src/mame/machine/315_5195.h1
4 files changed, 31 insertions, 2 deletions
diff --git a/src/mame/drivers/segaorun.cpp b/src/mame/drivers/segaorun.cpp
index 338578930ef..369dde654a2 100644
--- a/src/mame/drivers/segaorun.cpp
+++ b/src/mame/drivers/segaorun.cpp
@@ -448,7 +448,7 @@ void segaorun_state::memory_mapper(sega_315_5195_mapper_device &mapper, uint8_t
mapper.map_as_handler(0x90000, 0x10000, 0xf00000, read16_delegate(*this, FUNC(segaorun_state::sega_road_control_0_r)), write16_delegate(*this, FUNC(segaorun_state::sega_road_control_0_w)));
mapper.map_as_ram(0x80000, 0x01000, 0xf0f000, "segaic16road:roadram", write16_delegate(*this));
mapper.map_as_ram(0x60000, 0x08000, 0xf18000, "cpu1ram", write16_delegate(*this));
- mapper.map_as_ram(0x00000, 0x60000, 0xf00000, "cpu1rom", write16_delegate(*this, FUNC(segaorun_state::nop_w)));
+ mapper.map_as_region(0x00000, 0x60000, 0xf00000, "subcpu", write16_delegate(*this, FUNC(segaorun_state::nop_w)));
break;
case 4:
@@ -876,7 +876,7 @@ void segaorun_state::sub_map(address_map &map)
{
map.unmap_value_high();
map.global_mask(0xfffff);
- map(0x000000, 0x05ffff).rom().share("cpu1rom");
+ map(0x000000, 0x05ffff).rom();
map(0x060000, 0x067fff).mirror(0x018000).ram().share("cpu1ram");
map(0x080000, 0x080fff).mirror(0x00f000).ram().share("segaic16road:roadram");
map(0x090000, 0x09ffff).rw(m_segaic16road, FUNC(segaic16_road_device::segaic16_road_control_0_r), FUNC(segaic16_road_device::segaic16_road_control_0_w));
diff --git a/src/mame/drivers/segas16b.cpp b/src/mame/drivers/segas16b.cpp
index 7e47e8b3517..00ce76e02fd 100644
--- a/src/mame/drivers/segas16b.cpp
+++ b/src/mame/drivers/segas16b.cpp
@@ -1291,6 +1291,9 @@ void segas16b_state::machine_reset()
for (int banknum = 0; banknum < 16; banknum++)
m_sprites->set_bank(banknum, banklist[banknum]);
}
+
+ // ensure the sound bank points somewhere sane
+ membank("soundbank")->set_base(memregion("soundcpu")->base() + 0x10000);
}
diff --git a/src/mame/machine/315_5195.cpp b/src/mame/machine/315_5195.cpp
index d97b51cbc4d..21778a618ef 100644
--- a/src/mame/machine/315_5195.cpp
+++ b/src/mame/machine/315_5195.cpp
@@ -286,6 +286,31 @@ void sega_315_5195_mapper_device::map_as_ram(u32 offset, u32 length, offs_t mirr
//-------------------------------------------------
+// map_as_region - map a region as ROM, with an
+// optional write handler
+//-------------------------------------------------
+
+void sega_315_5195_mapper_device::map_as_region(u32 offset, u32 length, offs_t mirror, const char *region_name, write16_delegate whandler)
+{
+ // determine parameters
+ region_info info;
+ compute_region(info, m_curregion, length, mirror, offset);
+ LOG("Map %06X-%06X (%06X) as REGION(%s) with handler=%s\n", info.start, info.end, info.mirror, region_name,
+ whandler.isnull() ? "none" : whandler.name());
+
+ // map now
+ m_space->install_rom(info.start, info.end, info.mirror, owner()->memregion(region_name)->base());
+
+ // either install a write handler or a write bank, as appropriate
+ if (!whandler.isnull())
+ m_space->install_write_handler(info.start, info.end, 0, info.mirror, 0, whandler);
+
+ // clear this rom bank reference
+ m_banks[m_curregion].clear();
+}
+
+
+//-------------------------------------------------
// map_as_handler - map a region as a pair of
// read write handlers
//-------------------------------------------------
diff --git a/src/mame/machine/315_5195.h b/src/mame/machine/315_5195.h
index f12d8bc14a7..3934d426d5a 100644
--- a/src/mame/machine/315_5195.h
+++ b/src/mame/machine/315_5195.h
@@ -57,6 +57,7 @@ public:
// mapping helpers
void map_as_rom(u32 offset, u32 length, offs_t mirror, const char *bank_name, const char *decrypted_bank_name, offs_t rgnoffset, write16_delegate whandler);
void map_as_ram(u32 offset, u32 length, offs_t mirror, const char *bank_share_name, write16_delegate whandler);
+ void map_as_region(u32 offset, u32 length, offs_t mirror, const char *region_name, write16_delegate whandler);
void map_as_handler(u32 offset, u32 length, offs_t mirror, read16_delegate rhandler, write16_delegate whandler);
// perform an explicit configuration (for bootlegs with hard-coded mappings)