summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/debugger/osx/disassemblyview.m
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/debugger/osx/disassemblyview.m')
-rw-r--r--src/osd/modules/debugger/osx/disassemblyview.m108
1 files changed, 85 insertions, 23 deletions
diff --git a/src/osd/modules/debugger/osx/disassemblyview.m b/src/osd/modules/debugger/osx/disassemblyview.m
index 2592aeefdfc..16f70404c41 100644
--- a/src/osd/modules/debugger/osx/disassemblyview.m
+++ b/src/osd/modules/debugger/osx/disassemblyview.m
@@ -11,10 +11,10 @@
#import "disassemblyview.h"
+#include "debugger.h"
#include "debug/debugcon.h"
#include "debug/debugcpu.h"
#include "debug/debugvw.h"
-#include "debug/dvdisasm.h"
@implementation MAMEDisassemblyView
@@ -199,13 +199,43 @@
}
-- (void)selectSubviewForCPU:(device_t *)device {
- const debug_view_source *selected = view->source();
- const debug_view_source *source = view->source_for_device(device);
- if ( selected != source ) {
- view->set_source(*source);
- if ([[self window] firstResponder] != self)
- view->set_cursor_visible(false);
+- (BOOL)selectSubviewForDevice:(device_t *)device {
+ debug_view_source const *const source = view->source_for_device(device);
+ if (source != NULL)
+ {
+ if (view->source() != source)
+ {
+ view->set_source(*source);
+ if ([[self window] firstResponder] != self)
+ view->set_cursor_visible(false);
+ }
+ return YES;
+ }
+ else
+ {
+ return NO;
+ }
+}
+
+
+- (BOOL)selectSubviewForSpace:(address_space *)space {
+ if (space == NULL) return NO;
+ debug_view_disasm_source const *source = downcast<debug_view_disasm_source const *>(view->first_source());
+ while ((source != NULL) && (&source->space() != space))
+ source = downcast<debug_view_disasm_source *>(source->next());
+ if (source != NULL)
+ {
+ if (view->source() != source)
+ {
+ view->set_source(*source);
+ if ([[self window] firstResponder] != self)
+ view->set_cursor_visible(false);
+ }
+ return YES;
+ }
+ else
+ {
+ return NO;
}
}
@@ -220,50 +250,82 @@
}
+- (debug_view_disasm_source const *)source {
+ return downcast<debug_view_disasm_source const *>(view->source());
+}
+
+
- (IBAction)debugToggleBreakpoint:(id)sender {
- if (view->cursor_visible()) {
+ if (view->cursor_visible())
+ {
address_space &space = downcast<const debug_view_disasm_source *>(view->source())->space();
- if (!useConsole || (debug_cpu_get_visible_cpu(*machine) == &space.device())) {
- offs_t address = downcast<debug_view_disasm *>(view)->selected_address();
+ if (!useConsole || (debug_cpu_get_visible_cpu(*machine) == &space.device()))
+ {
+ offs_t const address = downcast<debug_view_disasm *>(view)->selected_address();
device_debug::breakpoint *bp = [self findBreakpointAtAddress:address inAddressSpace:space];
// if it doesn't exist, add a new one
- if (useConsole) {
+ if (useConsole)
+ {
NSString *command;
if (bp == NULL)
command = [NSString stringWithFormat:@"bpset %lX", (unsigned long)address];
else
command = [NSString stringWithFormat:@"bpclear %X", (unsigned)bp->index()];
debug_console_execute_command(*machine, [command UTF8String], 1);
- } else {
+ }
+ else
+ {
if (bp == NULL)
- space.device().debug()->breakpoint_set(address, NULL, NULL);
+ {
+ UINT32 const bpnum = space.device().debug()->breakpoint_set(address, NULL, NULL);
+ debug_console_printf(*machine, "Breakpoint %X set\n", bpnum);
+ }
else
- space.device().debug()->breakpoint_clear(bp->index());
+ {
+ int const bpnum = bp->index();
+ space.device().debug()->breakpoint_clear(bpnum);
+ debug_console_printf(*machine, "Breakpoint %X cleared\n", (UINT32)bpnum);
+ }
}
+
+ // fail to do this and the display doesn't update
+ machine->debug_view().update_all();
+ debugger_refresh_display(*machine);
}
}
}
- (IBAction)debugToggleBreakpointEnable:(id)sender {
- if (view->cursor_visible()) {
+ if (view->cursor_visible())
+ {
address_space &space = downcast<const debug_view_disasm_source *>(view->source())->space();
- if (!useConsole || (debug_cpu_get_visible_cpu(*machine) == &space.device())) {
- offs_t address = downcast<debug_view_disasm *>(view)->selected_address();
+ if (!useConsole || (debug_cpu_get_visible_cpu(*machine) == &space.device()))
+ {
+ offs_t const address = downcast<debug_view_disasm *>(view)->selected_address();
device_debug::breakpoint *bp = [self findBreakpointAtAddress:address inAddressSpace:space];
-
- if (bp != NULL) {
- NSString *command;
- if (useConsole) {
+ if (bp != NULL)
+ {
+ if (useConsole)
+ {
+ NSString *command;
if (bp->enabled())
command = [NSString stringWithFormat:@"bpdisable %X", (unsigned)bp->index()];
else
command = [NSString stringWithFormat:@"bpenable %X", (unsigned)bp->index()];
debug_console_execute_command(*machine, [command UTF8String], 1);
- } else {
+ }
+ else
+ {
space.device().debug()->breakpoint_enable(bp->index(), !bp->enabled());
+ debug_console_printf(*machine,
+ "Breakpoint %X %s\n",
+ (UINT32)bp->index(),
+ bp->enabled() ? "enabled" : "disabled");
}
+ machine->debug_view().update_all();
+ debugger_refresh_display(*machine);
}
}
}