summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author ajrhacker <ajrhacker@users.noreply.github.com>2017-03-24 18:48:10 -0400
committer GitHub <noreply@github.com>2017-03-24 18:48:10 -0400
commitb7981f2a59191814e169a17f0b06437e455892bf (patch)
tree7db4f48681e6c67d34d047386ddda2740122e8d5
parent1b21bbafcc224234b33b659730594b3e34ea8f9a (diff)
parent3589a77cae310757deefe6fff95b61a638823750 (diff)
Merge pull request #2184 from PugsyMAME/master
Fixed writes to decrypted opcode memory
-rw-r--r--src/emu/debug/debugcpu.cpp51
1 files changed, 41 insertions, 10 deletions
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp
index ecd4996b320..342bf9d9461 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;
@@ -1000,13 +999,32 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi
device = get_visible_cpu();
memory = &device->memory();
}
- if (!with_se) {
+ if (!with_se)
+ auto dis = m_machine.disable_side_effect();
+ return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
+ 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_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
- } else
+ if (memory->has_space(AS_DECRYPTED_OPCODES + (spacenum - EXPSPACE_OPCODE)))
+ return expression_read_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size);
+ else
return expression_read_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size);
break;
- }
+ }
case EXPSPACE_REGION:
if (name == nullptr)
@@ -1179,7 +1197,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);
@@ -1188,12 +1205,26 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres
device = get_visible_cpu();
memory = &device->memory();
}
- if (!with_se) {
+ if (!with_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);
+ 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();
+ if (memory->has_space(AS_DECRYPTED_OPCODES + (spacenum - EXPSPACE_OPCODE)))
+ expression_write_program_direct(memory->space(AS_DECRYPTED_OPCODES), (spacenum == EXPSPACE_OPCODE), address, size, data);
+ else
+ expression_write_program_direct(memory->space(AS_PROGRAM), (spacenum == EXPSPACE_OPCODE), address, size, data);
+ break;
case EXPSPACE_REGION:
if (name == nullptr)