summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--src/emu/debug/debugcpu.cpp51
1 files changed, 48 insertions, 3 deletions
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index 3b765d79cc2..962a8e025cd 100644
--- a/src/emu/debug/debugcpu.cpp
+++ b/src/emu/debug/debugcpu.cpp
@@ -987,7 +987,6 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
break;
}
- case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE:
{
device_t *device = nullptr;
@@ -1008,6 +1007,26 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
break;
}
+ case EXPSPACE_OPCODE:
+ {
+ device_t *device = nullptr;
+ device_memory_interface *memory;
+
+ if (name != nullptr)
+ device = expression_get_device(name);
+ if (device == nullptr || !device->interface(memory))
+ {
+ device = get_visible_cpu();
+ memory = &device->memory();
+ }
+ if (!with_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);
+ break;
+ }
+
case EXPSPACE_REGION:
if (name == nullptr)
break;
@@ -1179,7 +1198,6 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
}
break;
- case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE:
if (name != nullptr)
device = expression_get_device(name);
@@ -1195,6 +1213,21 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
break;
+ case EXPSPACE_OPCODE:
+ if (name != nullptr)
+ device = expression_get_device(name);
+ if (device == nullptr || !device->interface(memory))
+ {
+ device = get_visible_cpu();
+ memory = &device->memory();
+ }
+ if (!with_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);
+ break;
+
case EXPSPACE_REGION:
if (name == nullptr)
break;
@@ -1367,7 +1400,6 @@ expression_error::error_code debugger_cpu::expression_validate(void *param, cons
return expression_error::NO_SUCH_MEMORY_SPACE;
break;
- case EXPSPACE_OPCODE:
case EXPSPACE_RAMWRITE:
if (name)
{
@@ -1381,6 +1413,19 @@ expression_error::error_code debugger_cpu::expression_validate(void *param, cons
return expression_error::NO_SUCH_MEMORY_SPACE;
break;
+ case EXPSPACE_OPCODE:
+ if (name)
+ {
+ device = expression_get_device(name);
+ if (device == nullptr || !device->interface(memory))
+ return expression_error::INVALID_MEMORY_NAME;
+ }
+ if (!device)
+ device = get_visible_cpu();
+ if (!device->interface(memory) || !memory->has_space(AS_DECRYPTED_OPCODES))
+ return expression_error::NO_SUCH_MEMORY_SPACE;
+ break;
+
case EXPSPACE_REGION:
if (!name)
return expression_error::MISSING_MEMORY_NAME;