summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu
diff options
context:
space:
mode:
author Olivier Galibert <galibert@pobox.com>2017-03-26 14:52:02 +0200
committer Olivier Galibert <galibert@pobox.com>2017-03-26 14:52:02 +0200
commitbf4250e540164b52222d5168663badea34a871d1 (patch)
tree52e909f3c1defb914e6cb6672e5165b3fc149d40 /src/emu
parentb39dcdc613ecb5dae4788c60534ae2f762f3725f (diff)
disable: Better interface (nw)
Diffstat (limited to 'src/emu')
-rw-r--r--src/emu/debug/debugcpu.cpp62
-rw-r--r--src/emu/machine.h12
2 files changed, 28 insertions, 46 deletions
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index 35d324933ee..9da367f641a 100644
--- a/src/emu/debug/debugcpu.cpp
+++ b/src/emu/debug/debugcpu.cpp
@@ -951,11 +951,8 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
if (memory->has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL)))
{
address_space &space = memory->space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL));
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- return read_memory(space, space.address_to_byte(address), size, true);
- } else
- return read_memory(space, space.address_to_byte(address), size, true);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ return read_memory(space, space.address_to_byte(address), size, true);
}
break;
}
@@ -978,11 +975,8 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
if (memory->has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL)))
{
address_space &space = memory->space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL));
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- return read_memory(space, space.address_to_byte(address), size, false);
- } else
- return read_memory(space, space.address_to_byte(address), size, false);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ return read_memory(space, space.address_to_byte(address), size, false);
}
break;
}
@@ -999,11 +993,8 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
device = get_visible_cpu();
memory = &device->memory();
}
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
- } else
- return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
break;
}
@@ -1019,11 +1010,8 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
device = get_visible_cpu();
memory = &device->memory();
}
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- return expression_read_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size);
- } else
- return expression_read_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ return expression_read_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size);
break;
}
@@ -1168,11 +1156,8 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
if (memory->has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL)))
{
address_space &space = memory->space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_LOGICAL));
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- write_memory(space, space.address_to_byte(address), data, size, true);
- } else
- write_memory(space, space.address_to_byte(address), data, size, true);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ write_memory(space, space.address_to_byte(address), data, size, true);
}
break;
@@ -1190,15 +1175,12 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
if (memory->has_space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL)))
{
address_space &space = memory->space(AS_PROGRAM + (spacenum - EXPSPACE_PROGRAM_PHYSICAL));
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- write_memory(space, space.address_to_byte(address), data, size, false);
- } else
- write_memory(space, space.address_to_byte(address), data, size, false);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ write_memory(space, space.address_to_byte(address), data, size, false);
}
break;
- case EXPSPACE_RAMWRITE:
+ case EXPSPACE_RAMWRITE: {
if (name != nullptr)
device = expression_get_device(name);
if (device == nullptr || !device->interface(memory))
@@ -1206,14 +1188,12 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
device = get_visible_cpu();
memory = &device->memory();
}
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
- } else
- expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
break;
+ }
- case EXPSPACE_OPCODE:
+ case EXPSPACE_OPCODE: {
if (name != nullptr)
device = expression_get_device(name);
if (device == nullptr || !device->interface(memory))
@@ -1221,12 +1201,10 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
device = get_visible_cpu();
memory = &device->memory();
}
- if (disable_se) {
- auto dis = m_machine.disable_side_effect();
- expression_write_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size, data);
- } else
- expression_write_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size, data);
+ auto dis = m_machine.disable_side_effect(disable_se);
+ expression_write_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size, data);
break;
+ }
case EXPSPACE_REGION:
if (name == nullptr)
diff --git a/src/emu/machine.h b/src/emu/machine.h
index bcef9f77f4d..bc35ba5958f 100644
--- a/src/emu/machine.h
+++ b/src/emu/machine.h
@@ -223,7 +223,8 @@ public:
screen_device *first_screen() const { return primary_screen; }
// RAII-based side effect disable
- side_effect_disabler disable_side_effect() { return side_effect_disabler(this); }
+ // NOP-ed when passed false, to make it more easily conditional
+ side_effect_disabler disable_side_effect(bool disable_se = true) { return side_effect_disabler(this, disable_se); }
bool side_effect_disabled() const { return m_side_effect_disabled != 0; }
// additional helpers
@@ -291,13 +292,16 @@ public:
private:
struct side_effect_disabler {
running_machine *m_machine;
+ bool m_disable_se;
- side_effect_disabler(running_machine *m) : m_machine(m) {
- m_machine->disable_side_effect_count();
+ side_effect_disabler(running_machine *m, bool disable_se) : m_machine(m), m_disable_se(disable_se) {
+ if(m_disable_se)
+ m_machine->disable_side_effect_count();
}
~side_effect_disabler() {
- m_machine->enable_side_effect_count();
+ if(m_disable_se)
+ m_machine->enable_side_effect_count();
}
side_effect_disabler(const side_effect_disabler &) = delete;