summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mephisto_modular_tm.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mephisto_modular_tm.cpp')
-rw-r--r--src/mame/drivers/mephisto_modular_tm.cpp23
1 files changed, 18 insertions, 5 deletions
diff --git a/src/mame/drivers/mephisto_modular_tm.cpp b/src/mame/drivers/mephisto_modular_tm.cpp
index fadca7622bb..09562d8fe84 100644
--- a/src/mame/drivers/mephisto_modular_tm.cpp
+++ b/src/mame/drivers/mephisto_modular_tm.cpp
@@ -76,6 +76,7 @@ public:
protected:
virtual void machine_start() override;
virtual void machine_reset() override;
+ virtual void device_post_load() override { install_bootrom(m_bootrom_enabled); }
private:
// devices/pointers
@@ -90,9 +91,9 @@ private:
void mmtm_8m_map(address_map &map);
void nvram_map(address_map &map);
- bool m_bootrom_enabled;
- TIMER_DEVICE_CALLBACK_MEMBER(disable_bootrom) { m_bootrom_enabled = false; }
- u32 bootrom_r(offs_t offset) { return (m_bootrom_enabled) ? m_rom[offset] : m_mainram[offset]; }
+ void install_bootrom(bool enable);
+ TIMER_DEVICE_CALLBACK_MEMBER(disable_bootrom) { install_bootrom(false); }
+ bool m_bootrom_enabled = false;
void set_cpu_freq();
};
@@ -107,10 +108,23 @@ void mmtm_state::machine_reset()
set_cpu_freq();
// disable bootrom after reset
- m_bootrom_enabled = true;
+ install_bootrom(true);
m_disable_bootrom->adjust(m_maincpu->cycles_to_attotime(50));
}
+void mmtm_state::install_bootrom(bool enable)
+{
+ address_space &program = m_maincpu->space(AS_PROGRAM);
+ program.unmap_readwrite(0, std::max(m_rom.bytes(), m_mainram.bytes()) - 1);
+
+ if (enable)
+ program.install_rom(0, m_rom.bytes() - 1, m_rom);
+ else
+ program.install_ram(0, m_mainram.bytes() - 1, m_mainram);
+
+ m_bootrom_enabled = enable;
+}
+
void mmtm_state::set_cpu_freq()
{
// "Mephisto X" were usually overclocked at tournaments
@@ -140,7 +154,6 @@ void mmtm_state::nvram_map(address_map &map)
void mmtm_state::mmtm_2m_map(address_map &map)
{
map(0x00000000, 0x0003ffff).ram().share("mainram");
- map(0x00000000, 0x0000000b).r(FUNC(mmtm_state::bootrom_r));
map(0x80000000, 0x801fffff).ram();
map(0xf0000000, 0xf003ffff).rom().region("maincpu", 0);
map(0xfc000000, 0xfc001fff).m("nvram_map", FUNC(address_map_bank_device::amap8));