| 
									
										
										
										
											2009-07-28 21:32:10 +00:00
										 |  |  | // Copyright (C) 2003 Dolphin Project.
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by
 | 
					
						
							|  |  |  | // the Free Software Foundation, version 2.0.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					
						
							|  |  |  | // GNU General Public License 2.0 for more details.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // A copy of the GPL 2.0 should have been included with the program.
 | 
					
						
							|  |  |  | // If not, see http://www.gnu.org/licenses/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Official SVN repository and contact information can be found at
 | 
					
						
							|  |  |  | // http://code.google.com/p/dolphin-emu/
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2010-12-05 15:36:08 +00:00
										 |  |  | #include <wx/wx.h>
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | #include "BreakpointView.h"
 | 
					
						
							| 
									
										
										
										
											2010-12-05 15:28:31 +00:00
										 |  |  | #include "DebuggerUIUtil.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | #include "Debugger/Debugger_SymbolMap.h"
 | 
					
						
							| 
									
										
										
										
											2009-06-21 08:39:21 +00:00
										 |  |  | #include "PowerPC/PPCSymbolDB.h"
 | 
					
						
							| 
									
										
										
										
											2009-06-28 11:47:39 +00:00
										 |  |  | #include "PowerPC/PowerPC.h"
 | 
					
						
							| 
									
										
										
										
											2009-09-27 21:28:09 +00:00
										 |  |  | #include "HW/Memmap.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-27 23:03:08 +00:00
										 |  |  | CBreakPointView::CBreakPointView(wxWindow* parent, const wxWindowID id) | 
					
						
							|  |  |  | 	: wxListCtrl(parent, id, wxDefaultPosition, wxDefaultSize, | 
					
						
							|  |  |  | 			wxLC_REPORT | wxSUNKEN_BORDER | wxLC_ALIGN_LEFT | wxLC_SINGLE_SEL | wxLC_SORT_ASCENDING) | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | { | 
					
						
							| 
									
										
										
										
											2009-02-06 18:18:20 +00:00
										 |  |  | 	SetFont(DebuggerFont); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 	Refresh(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CBreakPointView::Update() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 	ClearAll(); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-27 23:03:08 +00:00
										 |  |  | 	InsertColumn(0, wxT("Active")); | 
					
						
							|  |  |  | 	InsertColumn(1, wxT("Type")); | 
					
						
							|  |  |  | 	InsertColumn(2, wxT("Function")); | 
					
						
							|  |  |  |     InsertColumn(3, wxT("Address")); | 
					
						
							|  |  |  |     InsertColumn(4, wxT("Flags")); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     char szBuffer[64]; | 
					
						
							| 
									
										
										
										
											2009-06-28 11:47:39 +00:00
										 |  |  | 	const BreakPoints::TBreakPoints& rBreakPoints = PowerPC::breakpoints.GetBreakPoints(); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 	for (size_t i = 0; i < rBreakPoints.size(); i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		const TBreakPoint& rBP = rBreakPoints[i]; | 
					
						
							|  |  |  | 		if (!rBP.bTemporary) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			wxString temp; | 
					
						
							|  |  |  | 			temp = wxString::FromAscii(rBP.bOn ? "on" : " "); | 
					
						
							|  |  |  | 			int Item = InsertItem(0, temp); | 
					
						
							|  |  |  | 			temp = wxString::FromAscii("BP"); | 
					
						
							|  |  |  | 			SetItem(Item, 1, temp); | 
					
						
							|  |  |  | 			 | 
					
						
							|  |  |  | 			Symbol *symbol = g_symbolDB.GetSymbolFromAddr(rBP.iAddress); | 
					
						
							|  |  |  | 			if (symbol) | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				temp = wxString::FromAscii(g_symbolDB.GetDescription(rBP.iAddress)); | 
					
						
							|  |  |  | 				SetItem(Item, 2, temp); | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			 | 
					
						
							| 
									
										
										
										
											2011-02-25 11:03:49 +00:00
										 |  |  |             sprintf(szBuffer, "%08x", rBP.iAddress); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  |             temp = wxString::FromAscii(szBuffer); | 
					
						
							|  |  |  | 			SetItem(Item, 3, temp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             SetItemData(Item, rBP.iAddress); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-28 11:47:39 +00:00
										 |  |  | 	const MemChecks::TMemChecks& rMemChecks = PowerPC::memchecks.GetMemChecks(); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 	for (size_t i = 0; i < rMemChecks.size(); i++) | 
					
						
							|  |  |  | 	{ | 
					
						
							|  |  |  | 		const TMemCheck& rMemCheck = rMemChecks[i]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		wxString temp; | 
					
						
							| 
									
										
										
										
											2011-02-25 11:03:49 +00:00
										 |  |  | 		temp = wxString::FromAscii((rMemCheck.Break || rMemCheck.Log) ? "on" : " "); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 		int Item = InsertItem(0, temp); | 
					
						
							|  |  |  | 		temp = wxString::FromAscii("MC"); | 
					
						
							|  |  |  | 		SetItem(Item, 1, temp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		Symbol *symbol = g_symbolDB.GetSymbolFromAddr(rMemCheck.StartAddress); | 
					
						
							|  |  |  | 		if (symbol) | 
					
						
							|  |  |  | 		{ | 
					
						
							|  |  |  | 			temp = wxString::FromAscii(g_symbolDB.GetDescription(rMemCheck.StartAddress)); | 
					
						
							|  |  |  | 			SetItem(Item, 2, temp); | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-02-25 11:03:49 +00:00
										 |  |  | 		sprintf(szBuffer, "%08x to %08x", rMemCheck.StartAddress, rMemCheck.EndAddress); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  | 		temp = wxString::FromAscii(szBuffer); | 
					
						
							|  |  |  | 		SetItem(Item, 3, temp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		size_t c = 0; | 
					
						
							|  |  |  | 		if (rMemCheck.OnRead) szBuffer[c++] = 'r'; | 
					
						
							|  |  |  | 		if (rMemCheck.OnWrite) szBuffer[c++] = 'w'; | 
					
						
							|  |  |  | 		szBuffer[c] = 0x00; | 
					
						
							|  |  |  | 		temp = wxString::FromAscii(szBuffer); | 
					
						
							|  |  |  | 		SetItem(Item, 4, temp); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		SetItemData(Item, rMemCheck.StartAddress); | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	Refresh(); | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void CBreakPointView::DeleteCurrentSelection() | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     int Item = GetNextItem(-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED); | 
					
						
							|  |  |  |     if (Item >= 0) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         u32 Address = (u32)GetItemData(Item); | 
					
						
							| 
									
										
										
										
											2011-02-25 09:35:56 +00:00
										 |  |  |         PowerPC::breakpoints.Remove(Address); | 
					
						
							|  |  |  |         PowerPC::memchecks.Remove(Address); | 
					
						
							| 
									
										
										
										
											2008-12-20 14:00:33 +00:00
										 |  |  | 		Update(); | 
					
						
							| 
									
										
										
										
											2008-12-08 05:30:24 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | } |