| 
									
										
										
										
											2015-05-24 06:55:12 +02:00
										 |  |  | // Copyright 2008 Dolphin Emulator Project
 | 
					
						
							| 
									
										
										
										
											2015-05-18 01:08:10 +02:00
										 |  |  | // Licensed under GPLv2+
 | 
					
						
							| 
									
										
										
										
											2013-04-17 23:09:55 -04:00
										 |  |  | // Refer to the license.txt file included.
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-10 13:54:46 -05:00
										 |  |  | #pragma once
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							| 
									
										
										
										
											2014-02-17 05:18:15 -05:00
										 |  |  | #include <vector>
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-02-17 05:18:15 -05:00
										 |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-06-28 12:15:31 +00:00
										 |  |  | class DebugInterface; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | struct TBreakPoint | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   u32 iAddress; | 
					
						
							|  |  |  |   bool bOn; | 
					
						
							|  |  |  |   bool bTemporary; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct TMemCheck | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   TMemCheck() | 
					
						
							|  |  |  |   { | 
					
						
							|  |  |  |     numHits = 0; | 
					
						
							|  |  |  |     StartAddress = EndAddress = 0; | 
					
						
							|  |  |  |     bRange = OnRead = OnWrite = Log = Break = false; | 
					
						
							|  |  |  |   } | 
					
						
							| 
									
										
										
										
											2014-08-30 16:14:56 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   u32 StartAddress; | 
					
						
							|  |  |  |   u32 EndAddress; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   bool bRange; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   bool OnRead; | 
					
						
							|  |  |  |   bool OnWrite; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   bool Log; | 
					
						
							|  |  |  |   bool Break; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   u32 numHits; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // returns whether to break
 | 
					
						
							|  |  |  |   bool Action(DebugInterface* dbg_interface, u32 _iValue, u32 addr, bool write, int size, u32 pc); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | struct TWatch | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   std::string name = ""; | 
					
						
							|  |  |  |   u32 iAddress; | 
					
						
							|  |  |  |   bool bOn; | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-12-20 14:00:33 +00:00
										 |  |  | // Code breakpoints.
 | 
					
						
							|  |  |  | class BreakPoints | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   typedef std::vector<TBreakPoint> TBreakPoints; | 
					
						
							|  |  |  |   typedef std::vector<std::string> TBreakPointsStr; | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   const TBreakPoints& GetBreakPoints() { return m_BreakPoints; } | 
					
						
							|  |  |  |   TBreakPointsStr GetStrings() const; | 
					
						
							|  |  |  |   void AddFromStrings(const TBreakPointsStr& bps); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // is address breakpoint
 | 
					
						
							|  |  |  |   bool IsAddressBreakPoint(u32 address) const; | 
					
						
							|  |  |  |   bool IsTempBreakPoint(u32 address) const; | 
					
						
							| 
									
										
										
										
											2011-02-25 09:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // Add BreakPoint
 | 
					
						
							|  |  |  |   void Add(u32 em_address, bool temp = false); | 
					
						
							|  |  |  |   void Add(const TBreakPoint& bp); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // Remove Breakpoint
 | 
					
						
							|  |  |  |   void Remove(u32 _iAddress); | 
					
						
							|  |  |  |   void Clear(); | 
					
						
							|  |  |  |   void ClearAllTemporary(); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   TBreakPoints m_BreakPoints; | 
					
						
							| 
									
										
										
										
											2008-12-20 14:00:33 +00:00
										 |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Memory breakpoints
 | 
					
						
							|  |  |  | class MemChecks | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   typedef std::vector<TMemCheck> TMemChecks; | 
					
						
							|  |  |  |   typedef std::vector<std::string> TMemChecksStr; | 
					
						
							| 
									
										
										
										
											2013-03-19 21:51:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   TMemChecks m_MemChecks; | 
					
						
							| 
									
										
										
										
											2013-03-19 21:51:12 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   const TMemChecks& GetMemChecks() { return m_MemChecks; } | 
					
						
							|  |  |  |   TMemChecksStr GetStrings() const; | 
					
						
							|  |  |  |   void AddFromStrings(const TMemChecksStr& mcs); | 
					
						
							| 
									
										
										
										
											2011-02-25 09:35:56 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   void Add(const TMemCheck& _rMemoryCheck); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // memory breakpoint
 | 
					
						
							|  |  |  |   TMemCheck* GetMemCheck(u32 address); | 
					
						
							|  |  |  |   void Remove(u32 _Address); | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   void Clear() { m_MemChecks.clear(); } | 
					
						
							|  |  |  |   bool HasAny() const { return !m_MemChecks.empty(); } | 
					
						
							| 
									
										
										
										
											2008-12-08 04:46:09 +00:00
										 |  |  | }; | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | class Watches | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   typedef std::vector<TWatch> TWatches; | 
					
						
							|  |  |  |   typedef std::vector<std::string> TWatchesStr; | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   const TWatches& GetWatches() { return m_Watches; } | 
					
						
							|  |  |  |   TWatchesStr GetStrings() const; | 
					
						
							|  |  |  |   void AddFromStrings(const TWatchesStr& bps); | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   bool IsAddressWatch(u32 _iAddress) const; | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // Add BreakPoint
 | 
					
						
							|  |  |  |   void Add(u32 em_address); | 
					
						
							|  |  |  |   void Add(const TWatch& bp); | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   void Update(int count, u32 em_address); | 
					
						
							|  |  |  |   void UpdateName(int count, const std::string name); | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   // Remove Breakpoint
 | 
					
						
							|  |  |  |   void Remove(u32 _iAddress); | 
					
						
							|  |  |  |   void Clear(); | 
					
						
							| 
									
										
										
										
											2014-10-19 21:45:40 +11:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							| 
									
										
										
										
											2016-06-24 10:43:46 +02:00
										 |  |  |   TWatches m_Watches; | 
					
						
							| 
									
										
										
										
											2014-10-28 04:28:50 -07:00
										 |  |  | }; |