summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/cv1k.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/cv1k.cpp')
-rw-r--r--src/mame/drivers/cv1k.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/src/mame/drivers/cv1k.cpp b/src/mame/drivers/cv1k.cpp
index 7483d5a52ea..a8979fb08c4 100644
--- a/src/mame/drivers/cv1k.cpp
+++ b/src/mame/drivers/cv1k.cpp
@@ -339,7 +339,7 @@ WRITE8_MEMBER( cv1k_state::serial_rtc_eeprom_w )
static ADDRESS_MAP_START( cv1k_map, AS_PROGRAM, 64, cv1k_state )
AM_RANGE(0x00000000, 0x003fffff) AM_ROM AM_REGION("maincpu", 0) AM_WRITENOP AM_SHARE("rombase") // mmmbanc writes here on startup for some reason..
- AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM AM_SHARE("mainram") AM_MIRROR(0x800000) // work RAM
+ AM_RANGE(0x0c000000, 0x0c7fffff) AM_RAM AM_SHARE("mainram")// work RAM
AM_RANGE(0x10000000, 0x10000007) AM_READWRITE8(flash_io_r, flash_io_w, 0xffffffffffffffffU)
AM_RANGE(0x10400000, 0x10400007) AM_DEVWRITE8("ymz770", ymz770_device, write, 0xffffffffffffffffU)
AM_RANGE(0x10C00000, 0x10C00007) AM_READWRITE8(serial_rtc_eeprom_r, serial_rtc_eeprom_w, 0xffffffffffffffffU)
@@ -354,7 +354,7 @@ static ADDRESS_MAP_START( cv1k_d_map, AS_PROGRAM, 64, cv1k_state )
AM_RANGE(0x10400000, 0x10400007) AM_DEVWRITE8("ymz770", ymz770_device, write, 0xffffffffffffffffU)
AM_RANGE(0x10C00000, 0x10C00007) AM_READWRITE8(serial_rtc_eeprom_r, serial_rtc_eeprom_w, 0xffffffffffffffffU)
// AM_RANGE(0x18000000, 0x18000057) // blitter, installed on reset
- AM_RANGE(0xf0000000, 0xf0ffffff) AM_RAM // mem mapped cache (sh3 internal?)
+ AM_RANGE(0xf0000000, 0xf0ffffff) AM_RAM // mem mapped cache (sh3 internal?)
ADDRESS_MAP_END
static ADDRESS_MAP_START( cv1k_port, AS_IO, 64, cv1k_state )
@@ -833,10 +833,13 @@ ROM_START( dfkbl )
ROM_LOAD16_WORD_SWAP( "u24", 0x400000, 0x400000, CRC(31f9eb0a) SHA1(322158779e969bb321241065dd49c1167b91ff6c) )
ROM_END
-READ64_MEMBER( cv1k_state::speedup_r )
+READ64_MEMBER(cv1k_state::speedup_r)
{
- if (m_maincpu->pc()== m_idlepc ) m_maincpu->spin_until_time( attotime::from_usec(10));
- return m_ram[m_idleramoffs/8];
+ offs_t pc = downcast<cpu_device *>(&space.device())->pc();
+
+ if (pc == m_idlepc || pc == m_idlepc + 2) m_maincpu->spin_until_time(attotime::from_usec(10));
+
+ return m_ram[m_idleramoffs / 8];
}
void cv1k_state::install_speedups(uint32_t idleramoff, uint32_t idlepc, bool is_typed)
@@ -844,12 +847,16 @@ void cv1k_state::install_speedups(uint32_t idleramoff, uint32_t idlepc, bool is_
m_idleramoffs = idleramoff;
m_idlepc = idlepc;
+ m_maincpu->sh2drc_set_options(SH2DRC_FASTEST_OPTIONS);
+
+ m_maincpu->sh2drc_add_pcflush(idlepc+2);
+
m_maincpu->space(AS_PROGRAM).install_read_handler(0xc000000+m_idleramoffs, 0xc000000+m_idleramoffs+7, read64_delegate(FUNC(cv1k_state::speedup_r),this));
- m_maincpu->add_fastram(0x00000000, 0x003fffff, true, m_rombase);
+ m_maincpu->sh2drc_add_fastram(0x00000000, 0x003fffff, true, m_rombase);
- m_maincpu->add_fastram(0x0c000000, 0x0c000000+m_idleramoffs-1, false, m_ram);
- m_maincpu->add_fastram(0x0c000000+m_idleramoffs+8, is_typed ? 0x0cffffff : 0x0c7fffff, false, m_ram + ((m_idleramoffs+8)/8));
+ m_maincpu->sh2drc_add_fastram(0x0c000000, 0x0c000000+m_idleramoffs-1, false, m_ram);
+ m_maincpu->sh2drc_add_fastram(0x0c000000+m_idleramoffs+8, is_typed ? 0x0cffffff : 0x0c7fffff, false, m_ram + ((m_idleramoffs+8)/8));
}