Fixes to get OSX debugger working again. (no whatsnew)

This commit is contained in:
Wilbert Pol 2010-06-30 21:55:38 +00:00
parent e7e1e04b7f
commit daccd1f46c
2 changed files with 149 additions and 177 deletions

View File

@ -117,7 +117,7 @@ typedef float CGFloat;
+ (NSFont *)defaultFont; + (NSFont *)defaultFont;
- (id)initWithFrame:(NSRect)f type:(int)t machine:(running_machine *)m; - (id)initWithFrame:(NSRect)f type:(debug_view_type)t machine:(running_machine *)m;
- (void)update; - (void)update;

View File

@ -30,6 +30,9 @@
#include "debug/debugcon.h" #include "debug/debugcon.h"
#include "debug/debugcpu.h" #include "debug/debugcpu.h"
#include "debugger.h" #include "debugger.h"
#include "debug/dvdisasm.h"
#include "debug/dvmemory.h"
#include "debug/dvstate.h"
// MAMEOS headers // MAMEOS headers
#include "debugosx.h" #include "debugosx.h"
@ -54,7 +57,7 @@ static NSString *const MAMEAuxiliaryDebugWindowWillCloseNotification
// PROTOTYPES // PROTOTYPES
//============================================================ //============================================================
static void debugwin_view_update(debug_view *view, void *osdprivate); static void debugwin_view_update(debug_view &view, void *osdprivate);
static void console_create_window(running_machine *machine); static void console_create_window(running_machine *machine);
@ -108,7 +111,7 @@ void debugwin_update_during_game(running_machine *machine)
// debugwin_view_update // debugwin_view_update
//============================================================ //============================================================
static void debugwin_view_update(debug_view *view, void *osdprivate) static void debugwin_view_update(debug_view &view, void *osdprivate)
{ {
[(MAMEDebugView *)osdprivate update]; [(MAMEDebugView *)osdprivate update];
} }
@ -299,19 +302,19 @@ void console_create_window(running_machine *machine)
size.x = totalSize.x; size.x = totalSize.x;
// tell them what we think // tell them what we think
debug_view_set_visible_size(view, size); view->set_visible_size(size);
debug_view_set_visible_position(view, origin); view->set_visible_position(origin);
topLeft = origin; topLeft = origin;
} }
} }
- (void)typeCharacterAndScrollToCursor:(char)ch { - (void)typeCharacterAndScrollToCursor:(char)ch {
if (debug_view_get_cursor_supported(view)) { if (view->cursor_supported()) {
debug_view_xy oldPos = debug_view_get_cursor_position(view); debug_view_xy oldPos = view->cursor_position();
debug_view_type_character(view, ch); view->process_char(ch);
{ {
debug_view_xy newPos = debug_view_get_cursor_position(view); debug_view_xy newPos = view->cursor_position();
if ((newPos.x != oldPos.x) || (newPos.y != oldPos.y)) { if ((newPos.x != oldPos.x) || (newPos.y != oldPos.y)) {
[self scrollRectToVisible:NSMakeRect(newPos.x * fontWidth, [self scrollRectToVisible:NSMakeRect(newPos.x * fontWidth,
newPos.y * fontHeight, newPos.y * fontHeight,
@ -320,7 +323,7 @@ void console_create_window(running_machine *machine)
} }
} }
} else { } else {
debug_view_type_character(view, ch); view->process_char(ch);
} }
} }
@ -331,12 +334,12 @@ void console_create_window(running_machine *machine)
} }
- (id)initWithFrame:(NSRect)f type:(int)t machine:(running_machine *)m { - (id)initWithFrame:(NSRect)f type:(debug_view_type)t machine:(running_machine *)m {
if (!(self = [super initWithFrame:f])) if (!(self = [super initWithFrame:f]))
return nil; return nil;
type = t; type = t;
machine = m; machine = m;
view = debug_view_alloc(machine, type, debugwin_view_update, self); view = machine->m_debug_view->alloc_view((debug_view_type)type, debugwin_view_update, self);
if (view == nil) { if (view == nil) {
[self release]; [self release];
return nil; return nil;
@ -350,8 +353,6 @@ void console_create_window(running_machine *machine)
- (void)dealloc { - (void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self]; [[NSNotificationCenter defaultCenter] removeObserver:self];
if (view != NULL)
debug_view_free(view);
if (font != nil) if (font != nil)
[font release]; [font release];
[super dealloc]; [super dealloc];
@ -362,14 +363,14 @@ void console_create_window(running_machine *machine)
debug_view_xy newSize, newOrigin; debug_view_xy newSize, newOrigin;
// resize our frame if the total size has changed // resize our frame if the total size has changed
newSize = debug_view_get_total_size(view); newSize = view->total_size();
if ((newSize.x != totalSize.x) || (newSize.y != totalSize.y)) { if ((newSize.x != totalSize.x) || (newSize.y != totalSize.y)) {
[self setFrameSize:NSMakeSize(fontWidth * newSize.x, fontHeight * newSize.y)]; [self setFrameSize:NSMakeSize(fontWidth * newSize.x, fontHeight * newSize.y)];
totalSize = newSize; totalSize = newSize;
} }
// scroll the view if we're being told to // scroll the view if we're being told to
newOrigin = debug_view_get_visible_position(view); newOrigin = view->visible_position();
if (newOrigin.y != topLeft.y) { if (newOrigin.y != topLeft.y) {
[self scrollPoint:NSMakePoint([self visibleRect].origin.x, newOrigin.y * fontHeight)]; [self scrollPoint:NSMakePoint([self visibleRect].origin.x, newOrigin.y * fontHeight)];
topLeft.y = newOrigin.y; topLeft.y = newOrigin.y;
@ -382,7 +383,7 @@ void console_create_window(running_machine *machine)
- (NSSize)maximumFrameSize { - (NSSize)maximumFrameSize {
debug_view_xy max = debug_view_get_total_size(view); debug_view_xy max = view->total_size();
return NSMakeSize(max.x * fontWidth, max.y * fontHeight); return NSMakeSize(max.x * fontWidth, max.y * fontHeight);
} }
@ -406,28 +407,28 @@ void console_create_window(running_machine *machine)
- (void)windowDidBecomeKey:(NSNotification *)notification { - (void)windowDidBecomeKey:(NSNotification *)notification {
NSWindow *win = [notification object]; NSWindow *win = [notification object];
if ((win == [self window]) && ([win firstResponder] == self) && debug_view_get_cursor_supported(view)) if ((win == [self window]) && ([win firstResponder] == self) && view->cursor_supported())
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
} }
- (void)windowDidResignKey:(NSNotification *)notification { - (void)windowDidResignKey:(NSNotification *)notification {
NSWindow *win = [notification object]; NSWindow *win = [notification object];
if ((win == [self window]) && ([win firstResponder] == self) && debug_view_get_cursor_supported(view)) if ((win == [self window]) && ([win firstResponder] == self) && view->cursor_supported())
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
} }
- (BOOL)acceptsFirstResponder { - (BOOL)acceptsFirstResponder {
return debug_view_get_cursor_supported(view); return view->cursor_supported();
} }
- (BOOL)becomeFirstResponder { - (BOOL)becomeFirstResponder {
if (debug_view_get_cursor_supported(view)) { if (view->cursor_supported()) {
debug_view_xy pos; debug_view_xy pos;
debug_view_set_cursor_visible(view, TRUE); view->set_cursor_visible(true);
pos = debug_view_get_cursor_position(view); pos = view->cursor_position();
[self scrollRectToVisible:NSMakeRect(pos.x * fontWidth, pos.y * fontHeight, fontWidth, fontHeight)]; [self scrollRectToVisible:NSMakeRect(pos.x * fontWidth, pos.y * fontHeight, fontWidth, fontHeight)];
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
return [super becomeFirstResponder]; return [super becomeFirstResponder];
@ -438,7 +439,7 @@ void console_create_window(running_machine *machine)
- (BOOL)resignFirstResponder { - (BOOL)resignFirstResponder {
if (debug_view_get_cursor_supported(view)) if (view->cursor_supported())
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
return [super resignFirstResponder]; return [super resignFirstResponder];
} }
@ -482,12 +483,12 @@ void console_create_window(running_machine *machine)
// work out how much we need to draw // work out how much we need to draw
[self recomputeVisible]; [self recomputeVisible];
origin = debug_view_get_visible_position(view); origin = view->visible_position();
size = debug_view_get_visible_size(view); size = view->visible_size();
[self convertBounds:dirtyRect toPosition:&position size:&clip]; [self convertBounds:dirtyRect toPosition:&position size:&clip];
// this gets the text for the whole visible area // this gets the text for the whole visible area
base = debug_view_get_chars(view); base = view->viewdata();
if (!base) if (!base)
return; return;
@ -545,9 +546,9 @@ void console_create_window(running_machine *machine)
- (void)mouseDown:(NSEvent *)event { - (void)mouseDown:(NSEvent *)event {
NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil]; NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil];
if (debug_view_get_cursor_supported(view)) { if (view->cursor_supported()) {
debug_view_set_cursor_position(view, [self convertLocation:location]); view->set_cursor_position([self convertLocation:location]);
debug_view_set_cursor_visible(view, TRUE); view->set_cursor_visible(true);
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
} }
} }
@ -555,9 +556,9 @@ void console_create_window(running_machine *machine)
- (void)mouseDragged:(NSEvent *)event { - (void)mouseDragged:(NSEvent *)event {
NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil]; NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil];
if (debug_view_get_cursor_supported(view)) { if (view->cursor_supported()) {
[self autoscroll:event]; [self autoscroll:event];
debug_view_set_cursor_position(view, [self convertLocation:location]); view->set_cursor_position([self convertLocation:location]);
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
} }
} }
@ -565,9 +566,9 @@ void console_create_window(running_machine *machine)
- (void)rightMouseDown:(NSEvent *)event { - (void)rightMouseDown:(NSEvent *)event {
NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil]; NSPoint location = [self convertPoint:[event locationInWindow] fromView:nil];
if (debug_view_get_cursor_supported(view)) { if (view->cursor_supported()) {
debug_view_set_cursor_position(view, [self convertLocation:location]); view->set_cursor_position([self convertLocation:location]);
debug_view_set_cursor_visible(view, TRUE); view->set_cursor_visible(true);
[self setNeedsDisplay:YES]; [self setNeedsDisplay:YES];
} }
[super rightMouseDown:event]; [super rightMouseDown:event];
@ -583,15 +584,15 @@ void console_create_window(running_machine *machine)
switch ([str characterAtIndex:0]) { switch ([str characterAtIndex:0]) {
case NSUpArrowFunctionKey: case NSUpArrowFunctionKey:
if (modifiers & NSCommandKeyMask) if (modifiers & NSCommandKeyMask)
debug_view_type_character(view, DCH_CTRLHOME); view->process_char(DCH_CTRLHOME);
else else
debug_view_type_character(view, DCH_UP); view->process_char(DCH_UP);
return; return;
case NSDownArrowFunctionKey: case NSDownArrowFunctionKey:
if (modifiers & NSCommandKeyMask) if (modifiers & NSCommandKeyMask)
debug_view_type_character(view, DCH_CTRLEND); view->process_char(DCH_CTRLEND);
else else
debug_view_type_character(view, DCH_DOWN); view->process_char(DCH_DOWN);
return; return;
case NSLeftArrowFunctionKey: case NSLeftArrowFunctionKey:
if (modifiers & NSCommandKeyMask) if (modifiers & NSCommandKeyMask)
@ -617,12 +618,12 @@ void console_create_window(running_machine *machine)
switch ([str characterAtIndex:0]) { switch ([str characterAtIndex:0]) {
case NSPageUpFunctionKey: case NSPageUpFunctionKey:
if (modifiers & NSAlternateKeyMask) { if (modifiers & NSAlternateKeyMask) {
debug_view_type_character(view, DCH_PUP); view->process_char(DCH_PUP);
return; return;
} }
case NSPageDownFunctionKey: case NSPageDownFunctionKey:
if (modifiers & NSAlternateKeyMask) { if (modifiers & NSAlternateKeyMask) {
debug_view_type_character(view, DCH_PDOWN); view->process_char(DCH_PDOWN);
return; return;
} }
default: default:
@ -702,111 +703,108 @@ void console_create_window(running_machine *machine)
- (BOOL)validateMenuItem:(NSMenuItem *)item { - (BOOL)validateMenuItem:(NSMenuItem *)item {
SEL action = [item action]; SEL action = [item action];
NSInteger tag = [item tag]; NSInteger tag = [item tag];
debug_view_memory *memview = downcast<debug_view_memory *>(view);
if (action == @selector(showChunkSize:)) { if (action == @selector(showChunkSize:)) {
[item setState:((tag == memory_view_get_bytes_per_chunk(view)) ? NSOnState : NSOffState)]; [item setState:((tag == memview->bytes_per_chunk()) ? NSOnState : NSOffState)];
} else if (action == @selector(showPhysicalAddresses:)) { } else if (action == @selector(showPhysicalAddresses:)) {
[item setState:((tag == memory_view_get_physical(view)) ? NSOnState : NSOffState)]; [item setState:((tag == memview->physical()) ? NSOnState : NSOffState)];
} else if (action == @selector(showReverseView:)) { } else if (action == @selector(showReverseView:)) {
[item setState:((tag == memory_view_get_reverse(view)) ? NSOnState : NSOffState)]; [item setState:((tag == memview->reverse()) ? NSOnState : NSOffState)];
} else if (action == @selector(showReverseViewToggle:)) { } else if (action == @selector(showReverseViewToggle:)) {
[item setState:(memory_view_get_reverse(view) ? NSOnState : NSOffState)]; [item setState:(memview->reverse() ? NSOnState : NSOffState)];
} }
return YES; return YES;
} }
- (NSSize)maximumFrameSize { - (NSSize)maximumFrameSize {
const int selected = memory_view_get_subview(view);
const memory_subview_item *subitem;
debug_view_xy max; debug_view_xy max;
running_device *curcpu = debug_cpu_get_visible_cpu(machine);
const debug_view_source *source = view->source_list().match_device(curcpu);
max.x = max.y = 0; max.x = max.y = 0;
for (subitem = memory_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) { for (const debug_view_source *source = view->source_list().head(); source != NULL; source = source->next())
{
debug_view_xy current; debug_view_xy current;
memory_view_set_subview(view, subitem->index); view->set_source(*source);
current = debug_view_get_total_size(view); current = view->total_size();
if (current.x > max.x) if (current.x > max.x)
max.x = current.x; max.x = current.x;
if (current.y > max.y) if (current.y > max.y)
max.y = current.y; max.y = current.y;
} }
memory_view_set_subview(view, selected); view->set_source(*source);
return NSMakeSize(max.x * fontWidth, max.y * fontHeight); return NSMakeSize(max.x * fontWidth, max.y * fontHeight);
} }
- (NSString *)selectedSubviewName { - (NSString *)selectedSubviewName {
const memory_subview_item *subitem = memory_view_get_current_subview(view); const debug_view_source *source = view->source();
if (subitem != NULL) if (source != NULL)
return [NSString stringWithUTF8String:subitem->name]; return [NSString stringWithUTF8String:source->name()];
else else
return @""; return @"";
} }
- (int)selectedSubviewIndex { - (int)selectedSubviewIndex {
const memory_subview_item *subitem = memory_view_get_current_subview(view); const debug_view_source *source = view->source();
if (subitem != NULL) if (source != NULL)
return subitem->index; return view->source_list().index(*source);
else else
return -1; return -1;
} }
- (void)selectSubviewAtIndex:(int)index { - (void)selectSubviewAtIndex:(int)index {
const int selected = memory_view_get_subview(view); const int selected = view->source_list().index(*view->source());
if (selected != index) { if (selected != index) {
memory_view_set_subview(view, index); view->set_source(*view->source_list().by_index(index));
if ([[self window] firstResponder] != self) if ([[self window] firstResponder] != self)
debug_view_set_cursor_visible(view, FALSE); view->set_cursor_visible(false);
} }
} }
- (void)selectSubviewForCPU:(running_device *)device { - (void)selectSubviewForCPU:(running_device *)device {
const int selected = memory_view_get_subview(view); const debug_view_source *selected = view->source();
const memory_subview_item *subitem; const debug_view_source *source = view->source_list().match_device(device);
for (subitem = memory_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) { if ( selected != source ) {
if (subitem->space->cpu == device) { view->set_source(*source);
if (selected != subitem->index) {
memory_view_set_subview(view, subitem->index);
if ([[self window] firstResponder] != self) if ([[self window] firstResponder] != self)
debug_view_set_cursor_visible(view, FALSE); view->set_cursor_visible(false);
}
break;
}
} }
} }
- (NSString *)expression { - (NSString *)expression {
return [NSString stringWithUTF8String:memory_view_get_expression(view)]; return [NSString stringWithUTF8String:downcast<debug_view_memory *>(view)->expression()];
} }
- (void)setExpression:(NSString *)exp { - (void)setExpression:(NSString *)exp {
memory_view_set_expression(view, [exp UTF8String]); downcast<debug_view_memory *>(view)->set_expression([exp UTF8String]);
} }
- (IBAction)showChunkSize:(id)sender { - (IBAction)showChunkSize:(id)sender {
memory_view_set_bytes_per_chunk(view, [sender tag]); downcast<debug_view_memory *>(view)->set_bytes_per_chunk([sender tag]);
} }
- (IBAction)showPhysicalAddresses:(id)sender { - (IBAction)showPhysicalAddresses:(id)sender {
memory_view_set_physical(view, [sender tag]); downcast<debug_view_memory *>(view)->set_physical([sender tag]);
} }
- (IBAction)showReverseView:(id)sender { - (IBAction)showReverseView:(id)sender {
memory_view_set_reverse(view, [sender tag]); downcast<debug_view_memory *>(view)->set_reverse([sender tag]);
} }
- (IBAction)showReverseViewToggle:(id)sender { - (IBAction)showReverseViewToggle:(id)sender {
memory_view_set_reverse(view, !memory_view_get_reverse(view)); downcast<debug_view_memory *>(view)->set_reverse(!downcast<debug_view_memory *>(view)->reverse());
} }
@ -854,12 +852,12 @@ void console_create_window(running_machine *machine)
- (void)insertSubviewItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index { - (void)insertSubviewItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index {
const memory_subview_item *subitem; for (const debug_view_source *source = view->source_list().head(); source != NULL; source = source->next())
for (subitem = memory_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) { {
[[menu insertItemWithTitle:[NSString stringWithUTF8String:subitem->name] [[menu insertItemWithTitle:[NSString stringWithUTF8String:source->name()]
action:NULL action:NULL
keyEquivalent:@"" keyEquivalent:@""
atIndex:index++] setTag:subitem->index]; atIndex:index++] setTag:view->source_list().index(*source)];
} }
if (index < [menu numberOfItems]) if (index < [menu numberOfItems])
[menu insertItem:[NSMenuItem separatorItem] atIndex:index++]; [menu insertItem:[NSMenuItem separatorItem] atIndex:index++];
@ -950,13 +948,14 @@ void console_create_window(running_machine *machine)
BOOL haveCursor = NO, isCurrent = NO; BOOL haveCursor = NO, isCurrent = NO;
debug_cpu_breakpoint *breakpoint = NULL; debug_cpu_breakpoint *breakpoint = NULL;
if (debug_view_get_cursor_visible(view)) { if (view->cursor_visible()) {
const address_space *space = disasm_view_get_current_subview(view)->space; if (debug_cpu_get_visible_cpu(machine) == view->source()->device()) {
isCurrent = (debug_cpu_get_visible_cpu(machine) == space->cpu); isCurrent = YES;
if (!useConsole || isCurrent) { if (!useConsole || isCurrent) {
offs_t address = memory_byte_to_address(space, disasm_view_get_selected_address(view)); offs_t address = downcast<debug_view_disasm *>(view)->selected_address();
haveCursor = YES; haveCursor = YES;
breakpoint = [self findBreakpointAtAddress:address inAddressSpace:space]; breakpoint = [self findBreakpointAtAddress:address inAddressSpace:downcast<const debug_view_disasm_source *>(view->source())->space()];
}
} }
} }
@ -996,7 +995,7 @@ void console_create_window(running_machine *machine)
} else if (action == @selector(debugRunToCursor:)) { } else if (action == @selector(debugRunToCursor:)) {
return isCurrent; return isCurrent;
} else if (action == @selector(showRightColumn:)) { } else if (action == @selector(showRightColumn:)) {
[item setState:((disasm_view_get_right_column(view) == [item tag]) ? NSOnState : NSOffState)]; [item setState:((downcast<debug_view_disasm *>(view)->right_column() == [item tag]) ? NSOnState : NSOffState)];
return YES; return YES;
} else { } else {
return YES; return YES;
@ -1005,84 +1004,80 @@ void console_create_window(running_machine *machine)
- (NSSize)maximumFrameSize { - (NSSize)maximumFrameSize {
const int selected = disasm_view_get_subview(view);
const disasm_subview_item *subitem;
debug_view_xy max; debug_view_xy max;
running_device *curcpu = debug_cpu_get_visible_cpu(machine);
const debug_view_source *source = view->source_list().match_device(curcpu);
max.x = max.y = 0; max.x = max.y = 0;
for (subitem = disasm_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) { for (const debug_view_source *source = view->source_list().head(); source != NULL; source = source->next())
{
debug_view_xy current; debug_view_xy current;
disasm_view_set_subview(view, subitem->index); view->set_source(*source);
current = debug_view_get_total_size(view); current = view->total_size();
if (current.x > max.x) if (current.x > max.x)
max.x = current.x; max.x = current.x;
if (current.y > max.y) if (current.y > max.y)
max.y = current.y; max.y = current.y;
} }
disasm_view_set_subview(view, selected); view->set_source(*source);
return NSMakeSize(max.x * fontWidth, max.y * fontHeight); return NSMakeSize(max.x * fontWidth, max.y * fontHeight);
} }
- (NSString *)selectedSubviewName { - (NSString *)selectedSubviewName {
const disasm_subview_item *subitem = disasm_view_get_current_subview(view); const debug_view_source *source = view->source();
if (subitem != NULL) if (source != NULL)
return [NSString stringWithUTF8String:subitem->name]; return [NSString stringWithUTF8String:source->name()];
else else
return @""; return @"";
} }
- (int)selectedSubviewIndex { - (int)selectedSubviewIndex {
const disasm_subview_item *subitem = disasm_view_get_current_subview(view); const debug_view_source *source = view->source();
if (subitem != NULL) if (source != NULL)
return subitem->index; return view->source_list().index(*source);
else else
return -1; return -1;
} }
- (void)selectSubviewAtIndex:(int)index { - (void)selectSubviewAtIndex:(int)index {
const int selected = disasm_view_get_subview(view); const int selected = view->source_list().index(*view->source());
if (selected != index) { if (selected != index) {
disasm_view_set_subview(view, index); view->set_source(*view->source_list().by_index(index));
if ([[self window] firstResponder] != self) if ([[self window] firstResponder] != self)
debug_view_set_cursor_visible(view, FALSE); view->set_cursor_visible(false);
} }
} }
- (void)selectSubviewForCPU:(running_device *)device { - (void)selectSubviewForCPU:(running_device *)device {
const int selected = disasm_view_get_subview(view); const debug_view_source *selected = view->source();
const disasm_subview_item *subitem; const debug_view_source *source = view->source_list().match_device(device);
for (subitem = disasm_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) { if ( selected != source ) {
if (subitem->space->cpu == device) { view->set_source(*source);
if (selected != subitem->index) {
disasm_view_set_subview(view, subitem->index);
if ([[self window] firstResponder] != self) if ([[self window] firstResponder] != self)
debug_view_set_cursor_visible(view, FALSE); view->set_cursor_visible(false);
}
break;
}
} }
} }
- (NSString *)expression { - (NSString *)expression {
return [NSString stringWithUTF8String:disasm_view_get_expression(view)]; return [NSString stringWithUTF8String:downcast<debug_view_disasm *>(view)->expression()];
} }
- (void)setExpression:(NSString *)exp { - (void)setExpression:(NSString *)exp {
disasm_view_set_expression(view, [exp UTF8String]); downcast<debug_view_disasm *>(view)->set_expression([exp UTF8String]);
} }
- (IBAction)debugToggleBreakpoint:(id)sender { - (IBAction)debugToggleBreakpoint:(id)sender {
if (debug_view_get_cursor_visible(view)) { if (view->cursor_visible()) {
const address_space *space = disasm_view_get_current_subview(view)->space; const address_space *space = downcast<const debug_view_disasm_source *>(view->source())->space();
if (!useConsole || (debug_cpu_get_visible_cpu(machine) == space->cpu)) { if (!useConsole || (debug_cpu_get_visible_cpu(machine) == space->cpu)) {
offs_t address = memory_byte_to_address(space, disasm_view_get_selected_address(view)); offs_t address = downcast<debug_view_disasm *>(view)->selected_address();
debug_cpu_breakpoint *bp = [self findBreakpointAtAddress:address inAddressSpace:space]; debug_cpu_breakpoint *bp = [self findBreakpointAtAddress:address inAddressSpace:space];
// if it doesn't exist, add a new one // if it doesn't exist, add a new one
@ -1098,7 +1093,6 @@ void console_create_window(running_machine *machine)
debug_cpu_breakpoint_set(space->cpu, address, NULL, NULL); debug_cpu_breakpoint_set(space->cpu, address, NULL, NULL);
else else
debug_cpu_breakpoint_clear(machine, bp->index); debug_cpu_breakpoint_clear(machine, bp->index);
debug_view_update_type(machine, DVT_DISASSEMBLY);
} }
} }
} }
@ -1106,10 +1100,10 @@ void console_create_window(running_machine *machine)
- (IBAction)debugToggleBreakpointEnable:(id)sender { - (IBAction)debugToggleBreakpointEnable:(id)sender {
if (debug_view_get_cursor_visible(view)) { if (view->cursor_visible()) {
const address_space *space = disasm_view_get_current_subview(view)->space; const address_space *space = downcast<const debug_view_disasm_source *>(view->source())->space();
if (!useConsole || (debug_cpu_get_visible_cpu(machine) == space->cpu)) { if (!useConsole || (debug_cpu_get_visible_cpu(machine) == space->cpu)) {
offs_t address = memory_byte_to_address(space, disasm_view_get_selected_address(view)); offs_t address = downcast<debug_view_disasm *>(view)->selected_address();
debug_cpu_breakpoint *bp = [self findBreakpointAtAddress:address inAddressSpace:space]; debug_cpu_breakpoint *bp = [self findBreakpointAtAddress:address inAddressSpace:space];
if (bp != NULL) { if (bp != NULL) {
@ -1122,7 +1116,6 @@ void console_create_window(running_machine *machine)
debug_console_execute_command(machine, [command UTF8String], 1); debug_console_execute_command(machine, [command UTF8String], 1);
} else { } else {
debug_cpu_breakpoint_enable(machine, bp->index, !bp->enabled); debug_cpu_breakpoint_enable(machine, bp->index, !bp->enabled);
debug_view_update_type(machine, DVT_DISASSEMBLY);
} }
} }
} }
@ -1131,10 +1124,10 @@ void console_create_window(running_machine *machine)
- (IBAction)debugRunToCursor:(id)sender { - (IBAction)debugRunToCursor:(id)sender {
if (debug_view_get_cursor_visible(view)) { if (view->cursor_visible()) {
const address_space *space = disasm_view_get_current_subview(view)->space; const address_space *space = downcast<const debug_view_disasm_source *>(view->source())->space();
if (debug_cpu_get_visible_cpu(machine) == space->cpu) { if (debug_cpu_get_visible_cpu(machine) == space->cpu) {
offs_t address = memory_byte_to_address(space, disasm_view_get_selected_address(view)); offs_t address = downcast<debug_view_disasm *>(view)->selected_address();
if (useConsole) { if (useConsole) {
NSString *command = [NSString stringWithFormat:@"go %lX", (unsigned long)address]; NSString *command = [NSString stringWithFormat:@"go %lX", (unsigned long)address];
debug_console_execute_command(machine, [command UTF8String], 1); debug_console_execute_command(machine, [command UTF8String], 1);
@ -1147,7 +1140,7 @@ void console_create_window(running_machine *machine)
- (IBAction)showRightColumn:(id)sender { - (IBAction)showRightColumn:(id)sender {
disasm_view_set_right_column(view, (disasm_right_column) [sender tag]); downcast<debug_view_disasm *>(view)->set_right_column((disasm_right_column) [sender tag]);
} }
@ -1216,12 +1209,12 @@ void console_create_window(running_machine *machine)
- (void)insertSubviewItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index { - (void)insertSubviewItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index {
const disasm_subview_item *subitem; for (const debug_view_source *source = view->source_list().head(); source != NULL; source = source->next())
for (subitem = disasm_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) { {
[[menu insertItemWithTitle:[NSString stringWithUTF8String:subitem->name] [[menu insertItemWithTitle:[NSString stringWithUTF8String:source->name()]
action:NULL action:NULL
keyEquivalent:@"" keyEquivalent:@""
atIndex:index++] setTag:subitem->index]; atIndex:index++] setTag:view->source_list().index(*source)];
} }
if (index < [menu numberOfItems]) if (index < [menu numberOfItems])
[menu insertItem:[NSMenuItem separatorItem] atIndex:index++]; [menu insertItem:[NSMenuItem separatorItem] atIndex:index++];
@ -1237,7 +1230,7 @@ void console_create_window(running_machine *machine)
@implementation MAMERegistersView @implementation MAMERegistersView
- (id)initWithFrame:(NSRect)f machine:(running_machine *)m { - (id)initWithFrame:(NSRect)f machine:(running_machine *)m {
if (!(self = [super initWithFrame:f type:DVT_REGISTERS machine:m])) if (!(self = [super initWithFrame:f type:DVT_STATE machine:m]))
return nil; return nil;
return self; return self;
} }
@ -1249,67 +1242,44 @@ void console_create_window(running_machine *machine)
- (NSSize)maximumFrameSize { - (NSSize)maximumFrameSize {
const int selected = registers_view_get_subview(view);
const registers_subview_item *subitem;
debug_view_xy max; debug_view_xy max;
running_device *curcpu = debug_cpu_get_visible_cpu(machine);
const debug_view_source *source = view->source_list().match_device(curcpu);
max.x = max.y = 0; max.x = max.y = 0;
for (subitem = registers_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) { for (const debug_view_source *source = view->source_list().head(); source != NULL; source = source->next())
{
debug_view_xy current; debug_view_xy current;
registers_view_set_subview(view, subitem->index); view->set_source(*source);
current = debug_view_get_total_size(view); current = view->total_size();
if (current.x > max.x) if (current.x > max.x)
max.x = current.x; max.x = current.x;
if (current.y > max.y) if (current.y > max.y)
max.y = current.y; max.y = current.y;
} }
registers_view_set_subview(view, selected); view->set_source(*source);
return NSMakeSize(max.x * fontWidth, max.y * fontHeight); return NSMakeSize(max.x * fontWidth, max.y * fontHeight);
} }
- (NSString *)selectedSubviewName { - (NSString *)selectedSubviewName {
const registers_subview_item *subitem = registers_view_get_current_subview(view);
if (subitem != NULL)
return [NSString stringWithUTF8String:subitem->name];
else
return @""; return @"";
} }
- (int)selectedSubviewIndex { - (int)selectedSubviewIndex {
const registers_subview_item *subitem = registers_view_get_current_subview(view);
if (subitem != NULL)
return subitem->index;
else
return -1; return -1;
} }
- (void)selectSubviewAtIndex:(int)index { - (void)selectSubviewAtIndex:(int)index {
const int selected = registers_view_get_subview(view);
if (selected != index) {
registers_view_set_subview(view, index);
if ([[self window] firstResponder] != self)
debug_view_set_cursor_visible(view, FALSE);
}
} }
- (void)selectSubviewForCPU:(running_device *)device { - (void)selectSubviewForCPU:(running_device *)device {
const int selected = registers_view_get_subview(view); //dv = get_view(dmain, DVT_STATE);
const registers_subview_item *subitem; view->set_source(*view->source_list().match_device(device));
device_state_interface *stateintf = device_state(device);
for (subitem = registers_view_get_subview_list(view); subitem != NULL; subitem = subitem->next) {
if (subitem->stateintf == stateintf) {
if (selected != subitem->index) {
registers_view_set_subview(view, subitem->index);
if ([[self window] firstResponder] != self)
debug_view_set_cursor_visible(view, FALSE);
}
break;
}
}
} }
@end @end
@ -1541,17 +1511,18 @@ void console_create_window(running_machine *machine)
- (IBAction)debugSoftReset:(id)sender { - (IBAction)debugSoftReset:(id)sender {
mame_schedule_soft_reset(machine); machine->schedule_soft_reset();
debug_cpu_go(machine, ~0);
} }
- (IBAction)debugHardReset:(id)sender { - (IBAction)debugHardReset:(id)sender {
mame_schedule_hard_reset(machine); machine->schedule_hard_reset();
} }
- (IBAction)debugExit:(id)sender { - (IBAction)debugExit:(id)sender {
mame_schedule_exit(machine); machine->schedule_exit();
} }
@ -1759,9 +1730,10 @@ void console_create_window(running_machine *machine)
- (void)setCPU:(running_device *)device { - (void)setCPU:(running_device *)device {
[regView selectSubviewForCPU:device]; [regView selectSubviewForCPU:device];
[dasmView selectSubviewForCPU:device]; [dasmView selectSubviewForCPU:device];
[window setTitle:[NSString stringWithFormat:@"Debug: %s - %@", [window setTitle:[NSString stringWithFormat:@"Debug: %s - %s '%s'",
device->machine->gamedrv->name, device->machine->gamedrv->name,
[regView selectedSubviewName]]]; device->name(),
device->tag()]];
} }