diff options
Diffstat (limited to 'src/mame/drivers/cv1k.cpp')
-rw-r--r-- | src/mame/drivers/cv1k.cpp | 23 |
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)); } |