summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/debug/debugcpu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/debug/debugcpu.cpp')
-rw-r--r--src/emu/debug/debugcpu.cpp104
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;