diff options
Diffstat (limited to 'src/emu/debug/debugcpu.cpp')
-rw-r--r-- | src/emu/debug/debugcpu.cpp | 104 |
1 files changed, 67 insertions, 37 deletions
diff --git a/src/emu/debug/debugcpu.cpp b/src/emu/debug/debugcpu.cpp index 957834ec831..9da367f641a 100644 --- a/src/emu/debug/debugcpu.cpp +++ b/src/emu/debug/debugcpu.cpp @@ -929,7 +929,7 @@ device_t* debugger_cpu::expression_get_device(const char *tag) space -------------------------------------------------*/ -u64 debugger_cpu::expression_read_memory(void *param, const char *name, expression_space spacenum, u32 address, int size, bool with_se) +u64 debugger_cpu::expression_read_memory(void *param, const char *name, expression_space spacenum, u32 address, int size, bool disable_se) { switch (spacenum) { @@ -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 (!with_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,16 +975,12 @@ 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 (!with_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; } - case EXPSPACE_OPCODE: case EXPSPACE_RAMWRITE: { device_t *device = nullptr; @@ -1000,14 +993,28 @@ u64 debugger_cpu::expression_read_memory(void *param, const char *name, expressi 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 - 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; } + 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(); + } + 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; + } + case EXPSPACE_REGION: if (name == nullptr) break; @@ -1128,7 +1135,7 @@ u64 debugger_cpu::expression_read_memory_region(const char *rgntag, offs_t addre space -------------------------------------------------*/ -void debugger_cpu::expression_write_memory(void *param, const char *name, expression_space spacenum, u32 address, int size, u64 data, bool with_se) +void debugger_cpu::expression_write_memory(void *param, const char *name, expression_space spacenum, u32 address, int size, u64 data, bool disable_se) { device_t *device = nullptr; device_memory_interface *memory; @@ -1149,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 (!with_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; @@ -1171,16 +1175,25 @@ 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 (!with_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_OPCODE: - case EXPSPACE_RAMWRITE: + case EXPSPACE_RAMWRITE: { + if (name != nullptr) + device = expression_get_device(name); + if (device == nullptr || !device->interface(memory)) + { + device = get_visible_cpu(); + memory = &device->memory(); + } + 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: { if (name != nullptr) device = expression_get_device(name); if (device == nullptr || !device->interface(memory)) @@ -1188,12 +1201,10 @@ void debugger_cpu::expression_write_memory(void *param, const char *name, expres device = get_visible_cpu(); memory = &device->memory(); } - 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); + 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) @@ -1367,7 +1378,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 +1391,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; @@ -3318,7 +3341,14 @@ void device_debug::tracer::update(offs_t pc) // print the address std::string buffer; int logaddrchars = m_debug.logaddrchars(); - buffer = string_format("%0*X: ", logaddrchars, pc); + if (m_debug.is_octal()) + { + buffer = string_format("%0*o: ", logaddrchars*3/2, pc); + } + else + { + buffer = string_format("%0*X: ", logaddrchars, pc); + } // print the disassembly std::string dasm; |