mirror of
https://github.com/holub/mame
synced 2025-04-21 07:52:35 +03:00
Fix sega outrun and system 16b, some confusion between regions and shares and a bank initialized too late
This commit is contained in:
parent
518efdf926
commit
4537a4b428
@ -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));
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -285,6 +285,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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user