diff options
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 |
commit | b7981f2a59191814e169a17f0b06437e455892bf (patch) | |
tree | 7db4f48681e6c67d34d047386ddda2740122e8d5 | |
parent | 1b21bbafcc224234b33b659730594b3e34ea8f9a (diff) | |
parent | 3589a77cae310757deefe6fff95b61a638823750 (diff) |
Merge pull request #2184 from PugsyMAME/master
Fixed writes to decrypted opcode memory
-rw-r--r-- | src/emu/debug/debugcpu.cpp | 51 |
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) |