summaryrefslogtreecommitdiffstatshomepage
path: root/src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m
diff options
context:
space:
mode:
Diffstat (limited to 'src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m')
-rw-r--r--src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m138
1 files changed, 138 insertions, 0 deletions
diff --git a/src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m b/src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m
new file mode 100644
index 00000000000..3a965fe1404
--- /dev/null
+++ b/src/osd/modules/debugger/osx/debugosxdisassemblyviewer.m
@@ -0,0 +1,138 @@
+// license:BSD-3-Clause
+// copyright-holders:Vas Crabb
+//============================================================
+//
+// debugosxdisassemblyviewer.m - MacOS X Cocoa debug window handling
+//
+// Copyright (c) 1996-2015, Nicola Salmoria and the MAME Team.
+// Visit http://mamedev.org for licensing and usage restrictions.
+//
+//============================================================
+
+#import "debugosxdisassemblyviewer.h"
+
+#import "debugosxdebugview.h"
+#import "debugosxdisassemblyview.h"
+
+#include "debug/debugcpu.h"
+
+
+@implementation MAMEDisassemblyViewer
+
+- (id)initWithMachine:(running_machine &)m console:(MAMEDebugConsole *)c {
+ NSScrollView *dasmScroll;
+ NSView *expressionContainer;
+ NSPopUpButton *actionButton, *subviewButton;
+ NSRect contentBounds, expressionFrame;
+
+ if (!(self = [super initWithMachine:m title:@"Disassembly" console:c]))
+ return nil;
+ contentBounds = [[window contentView] bounds];
+
+ // create the expression field
+ expressionField = [[NSTextField alloc] initWithFrame:NSMakeRect(0, 0, 100, 19)];
+ [expressionField setAutoresizingMask:(NSViewWidthSizable | NSViewMaxXMargin | NSViewMinYMargin)];
+ [expressionField setFont:[[MAMEDebugView class] defaultFont]];
+ [expressionField setFocusRingType:NSFocusRingTypeNone];
+ [expressionField setTarget:self];
+ [expressionField setAction:@selector(doExpression:)];
+ [expressionField setDelegate:self];
+ expressionFrame = [expressionField frame];
+ expressionFrame.size.width = (contentBounds.size.width - expressionFrame.size.height) / 2;
+ [expressionField setFrameSize:expressionFrame.size];
+
+ // create the subview popup
+ subviewButton = [[NSPopUpButton alloc] initWithFrame:NSOffsetRect(expressionFrame,
+ expressionFrame.size.width,
+ 0)];
+ [subviewButton setAutoresizingMask:(NSViewWidthSizable | NSViewMinXMargin | NSViewMinYMargin)];
+ [subviewButton setBezelStyle:NSShadowlessSquareBezelStyle];
+ [subviewButton setFocusRingType:NSFocusRingTypeNone];
+ [subviewButton setFont:[[MAMEDebugView class] defaultFont]];
+ [subviewButton setTarget:self];
+ [subviewButton setAction:@selector(changeSubview:)];
+ [[subviewButton cell] setArrowPosition:NSPopUpArrowAtBottom];
+
+ // create a container for the expression field and subview popup
+ expressionFrame = NSMakeRect(expressionFrame.size.height,
+ contentBounds.size.height - expressionFrame.size.height,
+ contentBounds.size.width - expressionFrame.size.height,
+ expressionFrame.size.height);
+ expressionContainer = [[NSView alloc] initWithFrame:expressionFrame];
+ [expressionContainer setAutoresizingMask:(NSViewWidthSizable | NSViewMinYMargin)];
+ [expressionContainer addSubview:expressionField];
+ [expressionField release];
+ [expressionContainer addSubview:subviewButton];
+ [subviewButton release];
+ [[window contentView] addSubview:expressionContainer];
+ [expressionContainer release];
+
+ // create the disassembly view
+ dasmView = [[MAMEDisassemblyView alloc] initWithFrame:NSMakeRect(0, 0, 100, 100)
+ machine:*machine
+ useConsole:NO];
+ [dasmView insertSubviewItemsInMenu:[subviewButton menu] atIndex:0];
+ dasmScroll = [[NSScrollView alloc] initWithFrame:NSMakeRect(0,
+ 0,
+ contentBounds.size.width,
+ expressionFrame.origin.y)];
+ [dasmScroll setDrawsBackground:YES];
+ [dasmScroll setAutoresizingMask:(NSViewWidthSizable | NSViewHeightSizable)];
+ [dasmScroll setHasHorizontalScroller:YES];
+ [dasmScroll setHasVerticalScroller:YES];
+ [dasmScroll setAutohidesScrollers:YES];
+ [dasmScroll setBorderType:NSNoBorder];
+ [dasmScroll setDocumentView:dasmView];
+ [dasmView release];
+ [[window contentView] addSubview:dasmScroll];
+ [dasmScroll release];
+
+ // create the action popup
+ actionButton = [[self class] newActionButtonWithFrame:NSMakeRect(0,
+ expressionFrame.origin.y,
+ expressionFrame.size.height,
+ expressionFrame.size.height)];
+ [actionButton setAutoresizingMask:(NSViewMaxXMargin | NSViewMinYMargin)];
+ [dasmView insertActionItemsInMenu:[actionButton menu] atIndex:1];
+ [[window contentView] addSubview:actionButton];
+ [actionButton release];
+
+ // set default state
+ [dasmView selectSubviewForCPU:debug_cpu_get_visible_cpu(*machine)];
+ [dasmView setExpression:@"curpc"];
+ [expressionField setStringValue:@"curpc"];
+ [expressionField selectText:self];
+ [subviewButton selectItemAtIndex:[subviewButton indexOfItemWithTag:[dasmView selectedSubviewIndex]]];
+ [window makeFirstResponder:expressionField];
+ [window setTitle:[NSString stringWithFormat:@"Disassembly: %@", [dasmView selectedSubviewName]]];
+
+ // calculate the optimal size for everything
+ {
+ NSSize desired = [NSScrollView frameSizeForContentSize:[dasmView maximumFrameSize]
+ hasHorizontalScroller:YES
+ hasVerticalScroller:YES
+ borderType:[dasmScroll borderType]];
+ [self cascadeWindowWithDesiredSize:desired forView:dasmScroll];
+ }
+
+ // don't forget the result
+ return self;
+}
+
+
+- (void)dealloc {
+ [super dealloc];
+}
+
+
+- (id <MAMEDebugViewExpressionSupport>)documentView {
+ return dasmView;
+}
+
+
+- (IBAction)changeSubview:(id)sender {
+ [dasmView selectSubviewAtIndex:[[sender selectedItem] tag]];
+ [window setTitle:[NSString stringWithFormat:@"Disassembly: %@", [dasmView selectedSubviewName]]];
+}
+
+@end