summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/cpu/mips/mips3.c2
-rw-r--r--src/emu/cpu/mips/mips3drc.c4
-rw-r--r--src/emu/cpu/rsp/rsp.c2
-rw-r--r--src/emu/cpu/rsp/rspdrc.c4
-rw-r--r--src/emu/cpu/sh2/sh2.c4
-rw-r--r--src/emu/cpu/sh2/sh2drc.c5
-rw-r--r--src/emu/mconfig.c1
-rw-r--r--src/emu/mconfig.h5
-rw-r--r--src/mame/drivers/aleck64.c1
-rw-r--r--src/mess/drivers/n64.c1
10 files changed, 19 insertions, 10 deletions
diff --git a/src/emu/cpu/mips/mips3.c b/src/emu/cpu/mips/mips3.c
index 5ceff4b5462..fed4a116752 100644
--- a/src/emu/cpu/mips/mips3.c
+++ b/src/emu/cpu/mips/mips3.c
@@ -192,7 +192,7 @@ mips3_device::mips3_device(const machine_config &mconfig, device_type type, cons
memset(m_fastram, 0, sizeof(m_fastram));
memset(m_hotspot, 0, sizeof(m_hotspot));
- m_isdrc = mconfig.options().drc() ? true : false;
+ m_isdrc = (mconfig.options().drc() && !mconfig.m_force_no_drc) ? true : false;
}
diff --git a/src/emu/cpu/mips/mips3drc.c b/src/emu/cpu/mips/mips3drc.c
index b454d10f74a..74cdace57ce 100644
--- a/src/emu/cpu/mips/mips3drc.c
+++ b/src/emu/cpu/mips/mips3drc.c
@@ -150,7 +150,7 @@ inline void mips3_device::save_fast_iregs(drcuml_block *block)
void mips3_device::mips3drc_set_options(UINT32 options)
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
m_drcoptions = options;
}
@@ -196,7 +196,7 @@ void mips3_device::add_fastram(offs_t start, offs_t end, UINT8 readonly, void *b
void mips3_device::mips3drc_add_hotspot(offs_t pc, UINT32 opcode, UINT32 cycles)
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
if (m_hotspot_select < ARRAY_LENGTH(m_hotspot))
{
m_hotspot[m_hotspot_select].pc = pc;
diff --git a/src/emu/cpu/rsp/rsp.c b/src/emu/cpu/rsp/rsp.c
index 1bb36af0612..ed26eb66603 100644
--- a/src/emu/cpu/rsp/rsp.c
+++ b/src/emu/cpu/rsp/rsp.c
@@ -139,7 +139,7 @@ rsp_device::rsp_device(const machine_config &mconfig, const char *tag, device_t
, m_sp_reg_w_func(*this)
, m_sp_set_status_func(*this)
{
- m_isdrc = mconfig.options().drc() ? true : false;
+ m_isdrc = (mconfig.options().drc() && !mconfig.m_force_no_drc) ? true : false;
}
offs_t rsp_device::disasm_disassemble(char *buffer, offs_t pc, const UINT8 *oprom, const UINT8 *opram, UINT32 options)
diff --git a/src/emu/cpu/rsp/rspdrc.c b/src/emu/cpu/rsp/rspdrc.c
index c33b0d95c36..ae719af5959 100644
--- a/src/emu/cpu/rsp/rspdrc.c
+++ b/src/emu/cpu/rsp/rspdrc.c
@@ -183,7 +183,7 @@ static void cfunc_write32(void *param)
void rsp_device::rspdrc_set_options(UINT32 options)
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
m_drcoptions = options;
}
@@ -307,7 +307,7 @@ void rsp_device::execute_run_drc()
void rsp_device::rspdrc_flush_drc_cache()
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
m_cache_dirty = TRUE;
}
diff --git a/src/emu/cpu/sh2/sh2.c b/src/emu/cpu/sh2/sh2.c
index 179cc533dc3..a60b8215a26 100644
--- a/src/emu/cpu/sh2/sh2.c
+++ b/src/emu/cpu/sh2/sh2.c
@@ -171,7 +171,7 @@ sh2_device::sh2_device(const machine_config &mconfig, const char *tag, device_t
, m_out_of_cycles(NULL)
, m_debugger_temp(0)
{
- m_isdrc = mconfig.options().drc() ? true : false;
+ m_isdrc = (mconfig.options().drc() && !mconfig.m_force_no_drc) ? true : false;
}
@@ -208,7 +208,7 @@ sh2_device::sh2_device(const machine_config &mconfig, device_type type, const ch
, m_nocode(NULL)
, m_out_of_cycles(NULL)
{
- m_isdrc = mconfig.options().drc() ? true : false;
+ m_isdrc = (mconfig.options().drc() && !mconfig.m_force_no_drc);
}
sh1_device::sh1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock)
diff --git a/src/emu/cpu/sh2/sh2drc.c b/src/emu/cpu/sh2/sh2drc.c
index 9c636f6cf84..4069f3287c7 100644
--- a/src/emu/cpu/sh2/sh2drc.c
+++ b/src/emu/cpu/sh2/sh2drc.c
@@ -11,6 +11,7 @@
#include "debugger.h"
#include "sh2.h"
#include "sh2comn.h"
+#include "mconfig.h"
extern unsigned DasmSH2(char *buffer, unsigned pc, UINT16 opcode);
@@ -2945,7 +2946,7 @@ int sh2_device::generate_group_12(drcuml_block *block, compiler_state *compiler,
void sh2_device::sh2drc_set_options(UINT32 options)
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
m_drcoptions = options;
}
@@ -2957,7 +2958,7 @@ void sh2_device::sh2drc_set_options(UINT32 options)
void sh2_device::sh2drc_add_pcflush(offs_t address)
{
- if (!machine().options().drc()) return;
+ if (!(mconfig().options().drc() && !mconfig().m_force_no_drc)) return;
if (m_pcfsel < ARRAY_LENGTH(m_pcflushes))
m_pcflushes[m_pcfsel++] = address;
diff --git a/src/emu/mconfig.c b/src/emu/mconfig.c
index 55dd19148f3..f313ce4cf99 100644
--- a/src/emu/mconfig.c
+++ b/src/emu/mconfig.c
@@ -25,6 +25,7 @@ machine_config::machine_config(const game_driver &gamedrv, emu_options &options)
: m_minimum_quantum(attotime::zero),
m_watchdog_vblank_count(0),
m_watchdog_time(attotime::zero),
+ m_force_no_drc(false),
m_default_layout(NULL),
m_gamedrv(gamedrv),
m_options(options)
diff --git a/src/emu/mconfig.h b/src/emu/mconfig.h
index a96367ccced..f17ea06e632 100644
--- a/src/emu/mconfig.h
+++ b/src/emu/mconfig.h
@@ -17,6 +17,7 @@
#ifndef __MCONFIG_H__
#define __MCONFIG_H__
+#include "emuopts.h"
//**************************************************************************
// CONSTANTS
@@ -61,6 +62,7 @@ public:
std::string m_perfect_cpu_quantum; // tag of CPU to use for "perfect" scheduling
INT32 m_watchdog_vblank_count; // number of VBLANKs until the watchdog kills us
attotime m_watchdog_time; // length of time until the watchdog kills us
+ bool m_force_no_drc; // whether or not to force DRC off
// other parameters
const char * m_default_layout; // default layout for this machine
@@ -133,6 +135,9 @@ ATTR_COLD device_t *MACHINE_CONFIG_NAME(_name)(machine_config &config, device_t
#define MCFG_QUANTUM_PERFECT_CPU(_cputag) \
config.m_perfect_cpu_quantum = owner->subtag(_cputag);
+// recompilation parameters
+#define MCFG_FORCE_NO_DRC() \
+ config.m_force_no_drc = true;
// watchdog configuration
#define MCFG_WATCHDOG_VBLANK_INIT(_count) \
diff --git a/src/mame/drivers/aleck64.c b/src/mame/drivers/aleck64.c
index 00df3236cce..9cc7e4c5854 100644
--- a/src/mame/drivers/aleck64.c
+++ b/src/mame/drivers/aleck64.c
@@ -837,6 +837,7 @@ static MACHINE_CONFIG_START( aleck64, aleck64_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", VR4300BE, 93750000)
+ MCFG_FORCE_NO_DRC()
MCFG_MIPS3_ICACHE_SIZE(16384)
MCFG_MIPS3_DCACHE_SIZE(8192)
MCFG_MIPS3_SYSTEM_CLOCK(62500000)
diff --git a/src/mess/drivers/n64.c b/src/mess/drivers/n64.c
index add05b32cf3..6969d242e3f 100644
--- a/src/mess/drivers/n64.c
+++ b/src/mess/drivers/n64.c
@@ -389,6 +389,7 @@ static MACHINE_CONFIG_START( n64, n64_mess_state )
/* basic machine hardware */
MCFG_CPU_ADD("maincpu", VR4300BE, 93750000)
+ MCFG_FORCE_NO_DRC()
MCFG_CPU_CONFIG(config)
MCFG_CPU_PROGRAM_MAP(n64_map)
MCFG_CPU_VBLANK_INT_DRIVER("screen", n64_mess_state, n64_reset_poll)