/[RomCheater]/trunk/RomCheater/Docking/UI/UIMemoryViewer.cs
ViewVC logotype

Diff of /trunk/RomCheater/Docking/UI/UIMemoryViewer.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 199 by william, Thu May 31 07:20:43 2012 UTC revision 201 by william, Thu May 31 08:10:25 2012 UTC
# Line 13  using System.Diagnostics; Line 13  using System.Diagnostics;
13    
14  namespace RomCheater.Docking.UI  namespace RomCheater.Docking.UI
15  {  {
16      public partial class UIMemoryViewer : UserControl, IProcessConfig, IAcceptsPlugin<IConfigPlugin>, IAcceptsMemoryRange      public partial class UIMemoryViewer : UserControl, IProcessConfig, IAcceptsPlugin<IConfigPlugin>//, IAcceptsMemoryRange
17      {      {
18          public UIMemoryViewer()          public UIMemoryViewer()
19          {          {
# Line 29  namespace RomCheater.Docking.UI Line 29  namespace RomCheater.Docking.UI
29              txtData.UseFixedBytesPerLine = true;              txtData.UseFixedBytesPerLine = true;
30              txtData.StringViewVisible = true;              txtData.StringViewVisible = true;
31              ramScroll.Minimum = (int)MemoryStart;              ramScroll.Minimum = (int)MemoryStart;
32              for (uint i = MemoryStart; i < (MemoryStart + MemorySize); i += max_address_width) { ramScroll.Maximum += (int)max_address_width; }              for (uint i = MemoryStart; i < (MemoryStart + max_ram_view); i += max_address_width) { ramScroll.Maximum += (int)max_address_width; }
33              ramScroll.Value = ramScroll.Minimum;              ramScroll.Value = ramScroll.Minimum;
34              this.CanChangeUpdateInterval = false;              this.CanChangeUpdateInterval = false;
35    
# Line 57  namespace RomCheater.Docking.UI Line 57  namespace RomCheater.Docking.UI
57          #region IAcceptsPlugin<IConfigPlugin> Members          #region IAcceptsPlugin<IConfigPlugin> Members
58          public IConfigPlugin AcceptedPlugin { get; set; }          public IConfigPlugin AcceptedPlugin { get; set; }
59          #endregion          #endregion
60            #region IAcceptsMemoryRange members
61            private uint MemoryStart { get { return 0; } }
62            private uint MemorySize { get { return int.MaxValue; } }
63            #endregion
64          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }
65          public void GotoBottom() { uint size = MemorySize; this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); }          public void GotoBottom() { uint size = MemorySize; this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); }
66          public void GotoAddress(uint addr) { this.CURRENT_TOP_ADDR = (uint)addr & 0xFFFFFFF0; }          public void GotoAddress(uint addr) { this.CURRENT_TOP_ADDR = (uint)addr & 0xFFFFFFF0; }
# Line 93  namespace RomCheater.Docking.UI Line 97  namespace RomCheater.Docking.UI
97          static uint small_scroll_change = max_address_width * 1; // scrolls one line (when you clikc the up or down arrows)          static uint small_scroll_change = max_address_width * 1; // scrolls one line (when you clikc the up or down arrows)
98          static uint medium_scroll_change = max_ram_view / 2; // scrolls half a page          static uint medium_scroll_change = max_ram_view / 2; // scrolls half a page
99          static uint large_scroll_change = max_ram_view; // scrolls a full page          static uint large_scroll_change = max_ram_view; // scrolls a full page
   
         #region IAcceptsMemoryRange members  
         public uint MemoryStart { get; set; }  
         public uint MemorySize { get; set; }  
         #endregion  
100          private uint _CURRENT_TOP_ADDR;          private uint _CURRENT_TOP_ADDR;
101          uint CURRENT_TOP_ADDR          uint CURRENT_TOP_ADDR
102          {          {
# Line 176  namespace RomCheater.Docking.UI Line 175  namespace RomCheater.Docking.UI
175                  reader.ReadProcess = this.AcceptedProcess;                  reader.ReadProcess = this.AcceptedProcess;
176                  reader.OpenProcess();                  reader.OpenProcess();
177                  int bytesReadSize;                  int bytesReadSize;
178                  byte[] data = reader.ReadProcessMemory(MemoryStart, MemorySize, out bytesReadSize);                  byte[] data = reader.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize);
179                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));
180                  return data;                  return data;
181              }              }
182              catch (Exception ex)              catch (Exception ex)
183              {              {
184                  logger.Error.WriteLine("{0}.GetMemory():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());                  logger.Error.WriteLine("{0}.GetMemory():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
185                  byte[] data = new byte[MemorySize];                  byte[] data = new byte[max_ram_view];
186                  for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }                  for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }
187                  return data;                  return data;
188              }              }
# Line 197  namespace RomCheater.Docking.UI Line 196  namespace RomCheater.Docking.UI
196                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
197    
198                  byte[] data = GetMemory();                  byte[] data = GetMemory();
   
                 List<byte> ByteData = new List<byte>((int)(address + (max_ram_view - 0)));  
   
199                  try                  try
200                  {                  {
201                      AddressList = "";                      RamData = data;
                     AsciiData = "";  
202    
                     // create a byte array holding only the bytes that we need  
                     for (uint i = address; i < (address + (max_ram_view + 1)); i += 1) { ByteData.Add(data[i]); }  
203    
204                        AddressList = "";
205                        AsciiData = "";
206                      // write the addreses out                      // write the addreses out
207                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)
208                      {                      {
209                          AddressList = AddressList + string.Format("{0:X8}:\n", i);                          AddressList = AddressList + string.Format("{0:X8}:\n", i);
210                      }                      }
211                      // write out the ascii data                      //// write out the ascii data
212                      StringBuilder builder = new StringBuilder();                      StringBuilder builder = new StringBuilder();
213                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)                      for (uint i = address; i < (address + max_ram_view); i += max_address_width)
214                      {                      {
215                          for (uint j = 0; j < max_address_width; j++)                          try
216                          {                          {
217                              uint current_addr = i + j;                              for (uint j = 0; j < max_address_width; j++)
                             if (current_addr >= MemorySize) break;  
                             byte ascii_value_raw = data[current_addr];  
                             char ascii_value = (char)data[current_addr];  
                             if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)  
218                              {                              {
219                                  builder.Append(ascii_value.ToString());                                  uint current_addr = i + j;
220                              }                                  if (current_addr >= MemorySize) break;
221                              else                                  byte ascii_value_raw = data[j];
222                              {                                  char ascii_value = (char)data[j];
223                                  builder.Append(".");                                  if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)
224                                    {
225                                        builder.Append(ascii_value.ToString());
226                                    }
227                                    else
228                                    {
229                                        builder.Append(".");
230                                    }
231                              }                              }
232                                builder.AppendLine();
233                            }
234                            catch (Exception ex)
235                            {
236                                logger.Error.WriteLine("{0}.UpdateMemroyView().BuildingAsciiString:{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
237                                return;
238                          }                          }
                         builder.AppendLine();  
239                      }                      }
240                      AsciiData = builder.ToString();                      AsciiData = builder.ToString();
                     // write out the bytes  
                     RamData = ByteData.ToArray();  
241    
242    
243                  }                  }
# Line 304  namespace RomCheater.Docking.UI Line 305  namespace RomCheater.Docking.UI
305              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
306    
307              ////if (e.Type == ScrollEventType.EndScroll) return;              ////if (e.Type == ScrollEventType.EndScroll) return;
308              uint size = MemorySize;              uint size = max_ram_view;
309    
310              bool haveModifier = false;              bool haveModifier = false;
311              switch (e.Modifiers)              switch (e.Modifiers)
# Line 348  namespace RomCheater.Docking.UI Line 349  namespace RomCheater.Docking.UI
349              }              }
350              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;
351              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;
352              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemoryStart) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = (size - 1);
353    
354              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
355          }          }

Legend:
Removed from v.199  
changed lines
  Added in v.201

  ViewVC Help
Powered by ViewVC 1.1.22