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;