From e0490c08c73659083f3359594db0cfb4073d643e Mon Sep 17 00:00:00 2001 From: stephena Date: Thu, 1 Sep 2005 19:14:09 +0000 Subject: [PATCH] Some cleanups for the RomListWidget. Separated the disassembly stuff into their own columns, making things easier to read but also making it much easier to edit specific parts of a line. Still TODO is actually patch ROM when editing the 'bytes' field, and also possibly edit the label field (which would translate to creating a new define at that address). git-svn-id: svn://svn.code.sf.net/p/stella/code/trunk@758 8b62c5a3-ac7e-4cc8-8f21-d9a121418aba --- stella/src/debugger/Debugger.cxx | 37 ++++++------- stella/src/debugger/Debugger.hxx | 11 ++-- stella/src/debugger/gui/RomListWidget.cxx | 65 ++++++++++++++++++----- stella/src/debugger/gui/RomListWidget.hxx | 10 +++- stella/src/debugger/gui/RomWidget.cxx | 12 +++-- 5 files changed, 88 insertions(+), 47 deletions(-) diff --git a/stella/src/debugger/Debugger.cxx b/stella/src/debugger/Debugger.cxx index eecf08de7..78708b8b7 100644 --- a/stella/src/debugger/Debugger.cxx +++ b/stella/src/debugger/Debugger.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Debugger.cxx,v 1.90 2005-08-31 19:15:10 stephena Exp $ +// $Id: Debugger.cxx,v 1.91 2005-09-01 19:14:09 stephena Exp $ //============================================================================ #include "bspf.hxx" @@ -782,38 +782,31 @@ const string& Debugger::disassemble(int start, int lines) { } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -void Debugger::disassemble(StringList& addrLabel, IntArray& addr, - StringList& data, int start, int lines) +void Debugger::disassemble(IntArray& addr, StringList& addrLabel, + StringList& bytes, StringList& data, + int start, int lines) { char buf[255], bbuf[255]; - string result; + string tmp; - do { - result = ""; - - const char *label = equateList->getFormatted(start, 4); - addrLabel.push_back(label); + do + { + tmp = equateList->getFormatted(start, 4); + addrLabel.push_back(tmp + ":"); addr.push_back(start); - result += label; - result += ": "; - int count = myCpuDebug->disassemble(start, buf, equateList); + tmp = ""; for(int i=0; i 0 && start <= 0xffff); + data.push_back(buf); + } + while(--lines > 0 && start <= 0xffff); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/stella/src/debugger/Debugger.hxx b/stella/src/debugger/Debugger.hxx index 6a3a8a4e7..5e1acf8ad 100644 --- a/stella/src/debugger/Debugger.hxx +++ b/stella/src/debugger/Debugger.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: Debugger.hxx,v 1.73 2005-08-31 19:15:10 stephena Exp $ +// $Id: Debugger.hxx,v 1.74 2005-09-01 19:14:09 stephena Exp $ //============================================================================ #ifndef DEBUGGER_HXX @@ -77,7 +77,7 @@ typedef uInt16 (Debugger::*DEBUGGER_WORD_METHOD)(); for all debugging operations in Stella (parser, 6502 debugger, etc). @author Stephen Anthony - @version $Id: Debugger.hxx,v 1.73 2005-08-31 19:15:10 stephena Exp $ + @version $Id: Debugger.hxx,v 1.74 2005-09-01 19:14:09 stephena Exp $ */ class Debugger : public DialogContainer { @@ -186,10 +186,11 @@ class Debugger : public DialogContainer /** Disassemble from the starting address the specified number of lines - and place addresses and data in given arrays. + and place addresses, bytes and data in given arrays. */ - void disassemble(StringList& addrLabel, IntArray& addr, - StringList& data, int start, int lines); + void disassemble(IntArray& addr, StringList& addrLabel, + StringList& bytes, StringList& data, + int start, int lines); int step(); int trace(); diff --git a/stella/src/debugger/gui/RomListWidget.cxx b/stella/src/debugger/gui/RomListWidget.cxx index 9e5ddb609..2d7d2bdaf 100644 --- a/stella/src/debugger/gui/RomListWidget.cxx +++ b/stella/src/debugger/gui/RomListWidget.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: RomListWidget.cxx,v 1.2 2005-08-31 19:15:10 stephena Exp $ +// $Id: RomListWidget.cxx,v 1.3 2005-09-01 19:14:09 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -29,7 +29,8 @@ RomListWidget::RomListWidget(GuiObject* boss, const GUI::Font& font, myMenu(NULL), myHighlightedItem(-1) { - myMenu = new ContextMenu(this, instance()->consoleFont()); + setFont(font); + myMenu = new ContextMenu(this, font); StringList l; l.push_back("Add bookmark"); @@ -39,6 +40,9 @@ RomListWidget::RomListWidget(GuiObject* boss, const GUI::Font& font, l.push_back("Set PC"); myMenu->setList(l); + + myLabelWidth = font.getMaxCharWidth() * 16; + myBytesWidth = font.getMaxCharWidth() * 12; } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -47,6 +51,16 @@ RomListWidget::~RomListWidget() delete myMenu; } +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +void RomListWidget::setList(StringList& label, StringList& bytes, StringList& disasm, + BoolArray& state) +{ + myLabel = label; + myDisasm = disasm; + + CheckListWidget::setList(bytes, state); +} + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - void RomListWidget::handleMouseDown(int x, int y, int button, int clickCount) { @@ -56,8 +70,8 @@ void RomListWidget::handleMouseDown(int x, int y, int button, int clickCount) myMenu->setPos(x + getAbsX(), y + getAbsY()); myMenu->show(); } - else - ListWidget::handleMouseDown(x, y, button, clickCount); + + ListWidget::handleMouseDown(x, y, button, clickCount); } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -101,29 +115,38 @@ void RomListWidget::drawWidget(bool hilite) const int y = _y + 2 + _rowHeight * i; - GUI::Rect r(getEditRect()); + GUI::Rect l = getLineRect(); + GUI::Rect r = getEditRect(); - // Draw highlighted item inverted, on a highlighted background. + // Draw highlighted item in a frame if (_highlightedItem == pos) { - fb.fillRect(_x + r.left - 3, _y + 1 + _rowHeight * i, - _w - r.left, _rowHeight, - kHiliteColor); + fb.frameRect(_x + l.left - 3, _y + 1 + _rowHeight * i, + _w - l.left, _rowHeight, + kHiliteColor); } // Draw the selected item inverted, on a highlighted background. - if (_selectedItem == pos) + if (_selectedItem == pos && _hasFocus) { - if (_hasFocus && !_editMode) + if (!_editMode) fb.fillRect(_x + r.left - 3, _y + 1 + _rowHeight * i, - _w - r.left, _rowHeight, + r.width(), _rowHeight, kTextColorHi); else fb.frameRect(_x + r.left - 3, _y + 1 + _rowHeight * i, - _w - r.left, _rowHeight, + r.width(), _rowHeight, kTextColorHi); } + // Draw labels and actual disassembly + fb.drawString(_font, myLabel[pos], _x + r.left - myLabelWidth, y, + myLabelWidth, kTextColor); + + fb.drawString(_font, myDisasm[pos], _x + r.right, y, + _w - r.right, kTextColor); + + // Draw editable bytes if (_selectedItem == pos && _editMode) { buffer = _editString; @@ -148,7 +171,7 @@ void RomListWidget::drawWidget(bool hilite) } // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -GUI::Rect RomListWidget::getEditRect() const +GUI::Rect RomListWidget::getLineRect() const { GUI::Rect r(2, 1, _w, _rowHeight); const int yoffset = (_selectedItem - _currentPos) * _rowHeight, @@ -160,3 +183,17 @@ GUI::Rect RomListWidget::getEditRect() const return r; } + +// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +GUI::Rect RomListWidget::getEditRect() const +{ + GUI::Rect r(2, 1, _w, _rowHeight); + const int yoffset = (_selectedItem - _currentPos) * _rowHeight, + xoffset = CheckboxWidget::boxSize() + 10; + r.top += yoffset; + r.bottom += yoffset; + r.left += xoffset + myLabelWidth; + r.right = r.left + myBytesWidth; + + return r; +} diff --git a/stella/src/debugger/gui/RomListWidget.hxx b/stella/src/debugger/gui/RomListWidget.hxx index b46c87031..b9f3837db 100644 --- a/stella/src/debugger/gui/RomListWidget.hxx +++ b/stella/src/debugger/gui/RomListWidget.hxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: RomListWidget.hxx,v 1.2 2005-08-31 19:15:10 stephena Exp $ +// $Id: RomListWidget.hxx,v 1.3 2005-09-01 19:14:09 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -36,16 +36,24 @@ class RomListWidget : public CheckListWidget int x, int y, int w, int h); virtual ~RomListWidget(); + void setList(StringList& label, StringList& bytes, StringList& disasm, + BoolArray& state); + protected: void handleMouseDown(int x, int y, int button, int clickCount); void handleCommand(CommandSender* sender, int cmd, int data, int id); void drawWidget(bool hilite); + GUI::Rect getLineRect() const; GUI::Rect getEditRect() const; private: ContextMenu* myMenu; int myHighlightedItem; + int myLabelWidth; + int myBytesWidth; + + StringList myLabel, myDisasm; }; #endif diff --git a/stella/src/debugger/gui/RomWidget.cxx b/stella/src/debugger/gui/RomWidget.cxx index a711a1490..5bf74f67c 100644 --- a/stella/src/debugger/gui/RomWidget.cxx +++ b/stella/src/debugger/gui/RomWidget.cxx @@ -13,7 +13,7 @@ // See the file "license" for information on usage and redistribution of // this file, and for a DISCLAIMER OF ALL WARRANTIES. // -// $Id: RomWidget.cxx,v 1.1 2005-08-30 17:51:26 stephena Exp $ +// $Id: RomWidget.cxx,v 1.2 2005-09-01 19:14:09 stephena Exp $ // // Based on code from ScummVM - Scumm Interpreter // Copyright (C) 2002-2004 The ScummVM project @@ -114,13 +114,15 @@ void RomWidget::initialUpdate() ; // FIXME else { - StringList label, data; - BoolArray state; + // Clear old mappings myAddrList.clear(); myLineList.clear(); + StringList label, data, disasm; + BoolArray state; + // Disassemble entire bank (up to 4096 lines) - dbg.disassemble(label, myAddrList, data, 0xf000, 4096); + dbg.disassemble(myAddrList, label, data, disasm, 0xf000, 4096); for(unsigned int i = 0; i < data.size(); ++i) state.push_back(false); @@ -129,7 +131,7 @@ void RomWidget::initialUpdate() for(unsigned int i = 0; i < myAddrList.size(); ++i) myLineList.insert(make_pair(myAddrList[i], i)); - myRomList->setList(data, state); + myRomList->setList(label, data, disasm, state); } }