diff options
Diffstat (limited to 'src/osd/modules/debugger/osx/memoryview.mm')
-rw-r--r-- | src/osd/modules/debugger/osx/memoryview.mm | 199 |
1 files changed, 139 insertions, 60 deletions
diff --git a/src/osd/modules/debugger/osx/memoryview.mm b/src/osd/modules/debugger/osx/memoryview.mm index b2c512d094b..24521e81ba4 100644 --- a/src/osd/modules/debugger/osx/memoryview.mm +++ b/src/osd/modules/debugger/osx/memoryview.mm @@ -9,7 +9,6 @@ #include "emu.h" #import "memoryview.h" -#include "debug/debugcpu.h" #include "debug/debugvw.h" #include "util/xmlfile.h" @@ -36,7 +35,7 @@ if (action == @selector(showChunkSize:)) { - [item setState:((tag == memview->get_data_format()) ? NSOnState : NSOffState)]; + [item setState:((tag == int(memview->get_data_format())) ? NSOnState : NSOffState)]; return YES; } else if (action == @selector(showPhysicalAddresses:)) @@ -58,6 +57,11 @@ { return (memview->chunks_per_row() + [item tag]) > 0; } + else if (action == @selector(showAddressRadix:)) + { + [item setState:((memview->address_radix() == [item tag]) ? NSOnState : NSOffState)]; + return YES; + } else { return [super validateMenuItem:item]; @@ -68,7 +72,7 @@ - (NSSize)maximumFrameSize { debug_view_xy max(0, 0); debug_view_source const *source = view->source(); - for (debug_view_source const *source = view->first_source(); source != nullptr; source = source->next()) + for (auto &source : view->source_list()) { view->set_source(*source); debug_view_xy const current = view->total_size(); @@ -101,19 +105,23 @@ - (int)selectedSubviewIndex { debug_view_source const *source = view->source(); if (source != nullptr) - return view->source_list().indexof(*source); + return view->source_index(*source); else return -1; } - (void)selectSubviewAtIndex:(int)index { - int const selected = view->source_list().indexof(*view->source()); + int const selected = [self selectedSubviewIndex]; if (selected != index) { - view->set_source(*view->source_list().find(index)); - if ([[self window] firstResponder] != self) - view->set_cursor_visible(false); + const debug_view_source *source = view->source(index); + if (source != nullptr) + { + view->set_source(*source); + if ([[self window] firstResponder] != self) + view->set_cursor_visible(false); + } } } @@ -139,23 +147,21 @@ - (BOOL)selectSubviewForSpace:(address_space *)space { if (space == nullptr) return NO; - debug_view_memory_source const *source = downcast<debug_view_memory_source const *>(view->first_source()); - while ((source != nullptr) && (source->space() != space)) - source = downcast<debug_view_memory_source *>(source->next()); - if (source != nullptr) + for (auto &ptr : view->source_list()) { - if (view->source() != source) + debug_view_memory_source const *const source = downcast<debug_view_memory_source const *>(ptr.get()); + if (source->space() == space) { - view->set_source(*source); - if ([[self window] firstResponder] != self) - view->set_cursor_visible(false); + if (view->source() != source) + { + view->set_source(*source); + if ([[self window] firstResponder] != self) + view->set_cursor_visible(false); + } + return YES; } - return YES; - } - else - { - return NO; } + return NO; } @@ -175,7 +181,7 @@ - (IBAction)showChunkSize:(id)sender { - downcast<debug_view_memory *>(view)->set_data_format([sender tag]); + downcast<debug_view_memory *>(view)->set_data_format(debug_view_memory::data_format([sender tag])); } @@ -183,6 +189,9 @@ downcast<debug_view_memory *>(view)->set_physical([sender tag]); } +- (IBAction)showAddressRadix:(id)sender { + downcast<debug_view_memory *>(view)->set_address_radix([sender tag]); +} - (IBAction)showReverseView:(id)sender { downcast<debug_view_memory *>(view)->set_reverse([sender tag]); @@ -203,55 +212,125 @@ - (void)saveConfigurationToNode:(util::xml::data_node *)node { [super saveConfigurationToNode:node]; debug_view_memory *const memView = downcast<debug_view_memory *>(view); - node->set_attribute_int("reverse", memView->reverse() ? 1 : 0); - node->set_attribute_int("addressmode", memView->physical() ? 1 : 0); - node->set_attribute_int("dataformat", memView->get_data_format()); - node->set_attribute_int("rowchunks", memView->chunks_per_row()); + node->set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, memView->reverse() ? 1 : 0); + node->set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_MODE, memView->physical() ? 1 : 0); + node->get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_RADIX, memView->address_radix()); + node->set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_DATA_FORMAT, int(memView->get_data_format())); + node->set_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ROW_CHUNKS, memView->chunks_per_row()); } - (void)restoreConfigurationFromNode:(util::xml::data_node const *)node { [super restoreConfigurationFromNode:node]; debug_view_memory *const memView = downcast<debug_view_memory *>(view); - memView->set_reverse(0 != node->get_attribute_int("reverse", memView->reverse() ? 1 : 0)); - memView->set_physical(0 != node->get_attribute_int("addressmode", memView->physical() ? 1 : 0)); - memView->set_data_format(node->get_attribute_int("dataformat", memView->get_data_format())); - memView->set_chunks_per_row(node->get_attribute_int("rowchunks", memView->chunks_per_row())); + memView->set_reverse(0 != node->get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_REVERSE_COLUMNS, memView->reverse() ? 1 : 0)); + memView->set_physical(0 != node->get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_MODE, memView->physical() ? 1 : 0)); + memView->set_address_radix(node->get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ADDRESS_RADIX, memView->address_radix())); + memView->set_data_format(debug_view_memory::data_format(node->get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_DATA_FORMAT, int(memView->get_data_format())))); + memView->set_chunks_per_row(node->get_attribute_int(osd::debugger::ATTR_WINDOW_MEMORY_ROW_CHUNKS, memView->chunks_per_row())); } - (void)insertActionItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index { - NSInteger tag; - for (tag = 1; tag <= 8; tag <<= 1) { - NSString *title = [NSString stringWithFormat:@"%ld-byte Chunks", (long)tag]; - NSMenuItem *chunkItem = [menu insertItemWithTitle:title - action:@selector(showChunkSize:) - keyEquivalent:[NSString stringWithFormat:@"%ld", (long)tag] - atIndex:index++]; - [chunkItem setTarget:self]; - [chunkItem setTag:tag]; - } + NSMenuItem *chunkItem1 = [menu insertItemWithTitle:@"1-byte Chunks (Hex)" + action:@selector(showChunkSize:) + keyEquivalent:@"1" + atIndex:index++]; + [chunkItem1 setTarget:self]; + [chunkItem1 setTag:int(debug_view_memory::data_format::HEX_8BIT)]; - NSMenuItem *chunkItem = [menu insertItemWithTitle:@"32-bit floats" - action:@selector(showChunkSize:) - keyEquivalent:@"F" - atIndex:index++]; - [chunkItem setTarget:self]; - [chunkItem setTag:9]; - - NSMenuItem *chunkItem2 = [menu insertItemWithTitle:@"64-bit floats" - action:@selector(showChunkSize:) - keyEquivalent:@"D" - atIndex:index++]; + NSMenuItem *chunkItem2 = [menu insertItemWithTitle:@"2-byte Chunks (Hex)" + action:@selector(showChunkSize:) + keyEquivalent:@"2" + atIndex:index++]; [chunkItem2 setTarget:self]; - [chunkItem2 setTag:10]; + [chunkItem2 setTag:int(debug_view_memory::data_format::HEX_16BIT)]; + + NSMenuItem *chunkItem4 = [menu insertItemWithTitle:@"4-byte Chunks (Hex)" + action:@selector(showChunkSize:) + keyEquivalent:@"4" + atIndex:index++]; + [chunkItem4 setTarget:self]; + [chunkItem4 setTag:int(debug_view_memory::data_format::HEX_32BIT)]; + + NSMenuItem *chunkItem8 = [menu insertItemWithTitle:@"8-byte Chunks (Hex)" + action:@selector(showChunkSize:) + keyEquivalent:@"8" + atIndex:index++]; + [chunkItem8 setTarget:self]; + [chunkItem8 setTag:int(debug_view_memory::data_format::HEX_64BIT)]; + + NSMenuItem *chunkItem12 = [menu insertItemWithTitle:@"1-byte Chunks (Octal)" + action:@selector(showChunkSize:) + keyEquivalent:@"3" + atIndex:index++]; + [chunkItem12 setTarget:self]; + [chunkItem12 setTag:int(debug_view_memory::data_format::OCTAL_8BIT)]; + + NSMenuItem *chunkItem13 = [menu insertItemWithTitle:@"2-byte Chunks (Octal)" + action:@selector(showChunkSize:) + keyEquivalent:@"5" + atIndex:index++]; + [chunkItem13 setTarget:self]; + [chunkItem13 setTag:int(debug_view_memory::data_format::OCTAL_16BIT)]; + + NSMenuItem *chunkItem14 = [menu insertItemWithTitle:@"4-byte Chunks (Octal)" + action:@selector(showChunkSize:) + keyEquivalent:@"7" + atIndex:index++]; + [chunkItem14 setTarget:self]; + [chunkItem14 setTag:int(debug_view_memory::data_format::OCTAL_32BIT)]; + + NSMenuItem *chunkItem15 = [menu insertItemWithTitle:@"8-byte Chunks (Octal)" + action:@selector(showChunkSize:) + keyEquivalent:@"9" + atIndex:index++]; + [chunkItem15 setTarget:self]; + [chunkItem15 setTag:int(debug_view_memory::data_format::OCTAL_64BIT)]; + + NSMenuItem *chunkItem9 = [menu insertItemWithTitle:@"32-bit Floating Point" + action:@selector(showChunkSize:) + keyEquivalent:@"F" + atIndex:index++]; + [chunkItem9 setTarget:self]; + [chunkItem9 setTag:int(debug_view_memory::data_format::FLOAT_32BIT)]; + + NSMenuItem *chunkItem10 = [menu insertItemWithTitle:@"64-bit Floating Point" + action:@selector(showChunkSize:) + keyEquivalent:@"D" + atIndex:index++]; + [chunkItem10 setTarget:self]; + [chunkItem10 setTag:int(debug_view_memory::data_format::FLOAT_64BIT)]; + + NSMenuItem *chunkItem11 = [menu insertItemWithTitle:@"80-bit Floating Point" + action:@selector(showChunkSize:) + keyEquivalent:@"E" + atIndex:index++]; + [chunkItem11 setTarget:self]; + [chunkItem11 setTag:int(debug_view_memory::data_format::FLOAT_80BIT)]; + + [menu insertItem:[NSMenuItem separatorItem] atIndex:index++]; + + NSMenuItem *hexadecimalItem = [menu insertItemWithTitle:@"Hexadecimal Addresses" + action:@selector(showAddressRadix:) + keyEquivalent:@"H" + atIndex:index++]; + [hexadecimalItem setTarget:self]; + [hexadecimalItem setTag:16]; + + NSMenuItem *decimalItem = [menu insertItemWithTitle:@"Decimal Addresses" + action:@selector(showAddressRadix:) + keyEquivalent:@"" + atIndex:index++]; + [decimalItem setTarget:self]; + [decimalItem setTag:10]; - NSMenuItem *chunkItem3 = [menu insertItemWithTitle:@"80-bit floats" - action:@selector(showChunkSize:) - keyEquivalent:@"E" - atIndex:index++]; - [chunkItem3 setTarget:self]; - [chunkItem3 setTag:11]; + NSMenuItem *octalItem = [menu insertItemWithTitle:@"Octal Addresses" + action:@selector(showAddressRadix:) + keyEquivalent:@"O" + atIndex:index++]; + [octalItem setTarget:self]; + [octalItem setTag:8]; [menu insertItem:[NSMenuItem separatorItem] atIndex:index++]; @@ -299,12 +378,12 @@ - (void)insertSubviewItemsInMenu:(NSMenu *)menu atIndex:(NSInteger)index { - for (const debug_view_source *source = view->source_list().first(); source != nullptr; source = source->next()) + for (auto &source : view->source_list()) { [[menu insertItemWithTitle:[NSString stringWithUTF8String:source->name()] action:NULL keyEquivalent:@"" - atIndex:index++] setTag:view->source_list().indexof(*source)]; + atIndex:index++] setTag:view->source_index(*source)]; } if (index < [menu numberOfItems]) [menu insertItem:[NSMenuItem separatorItem] atIndex:index++]; |