/[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 200 by william, Thu May 31 07:29:44 2012 UTC revision 245 by william, Sun Jun 3 14:50:09 2012 UTC
# Line 10  using Be.Windows.Forms; Line 10  using Be.Windows.Forms;
10  using RomCheater.Logging;  using RomCheater.Logging;
11  using RomCheater.PluginFramework.Interfaces;  using RomCheater.PluginFramework.Interfaces;
12  using System.Diagnostics;  using System.Diagnostics;
13    using Sojaner.MemoryScanner.MemoryProviers;
14    
15  namespace RomCheater.Docking.UI  namespace RomCheater.Docking.UI
16  {  {
17      public partial class UIMemoryViewer : UserControl, IProcessConfig, IAcceptsPlugin<IConfigPlugin>//, IAcceptsMemoryRange      public partial class UIMemoryViewer : UserControl,
18            IAcceptsPlugin<IConfigPlugin>,
19            IAcceptsProcess<Process>,
20            IAcceptsProcessAndConfig
21      {      {
22          public UIMemoryViewer()          public UIMemoryViewer()
23          {          {
# Line 29  namespace RomCheater.Docking.UI Line 33  namespace RomCheater.Docking.UI
33              txtData.UseFixedBytesPerLine = true;              txtData.UseFixedBytesPerLine = true;
34              txtData.StringViewVisible = true;              txtData.StringViewVisible = true;
35              ramScroll.Minimum = (int)MemoryStart;              ramScroll.Minimum = (int)MemoryStart;
36              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; }
37              ramScroll.Value = ramScroll.Minimum;              ramScroll.Value = ramScroll.Minimum;
38              this.CanChangeUpdateInterval = false;              this.CanChangeUpdateInterval = false;
39    
# Line 40  namespace RomCheater.Docking.UI Line 44  namespace RomCheater.Docking.UI
44                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);
45              }              }
46              this.AcceptedPlugin = null; this.AcceptedProcess = null;              this.AcceptedPlugin = null; this.AcceptedProcess = null;
47    
48                txtAddresses.MouseWheel += new MouseEventHandler(txtAddresses_MouseWheel);
49                txtData.MouseWheel += new MouseEventHandler(txtData_MouseWheel);
50          }          }
51          #region IProcessConfig Members  
52            private void GetFirstNonZeroByte()
53            {
54                if (!DesignMode)
55                {
56                    GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
57                    provider.OpenProvider();
58                    uint addr = 0;
59                    provider.ReadFirstNonZeroByte(MemoryStart, MemorySize, out addr);
60                    provider.CloseProvider();
61                    GotoAddress(addr);
62                }
63            }
64    
65            #region  IAcceptsProcess<Process> Members
66          private Process _AcceptedProcess;          private Process _AcceptedProcess;
67          public Process AcceptedProcess          public Process AcceptedProcess
68          {          {
# Line 51  namespace RomCheater.Docking.UI Line 72  namespace RomCheater.Docking.UI
72                  _AcceptedProcess = value;                  _AcceptedProcess = value;
73                  update_timer.Enabled = (value != null);                  update_timer.Enabled = (value != null);
74                  UpdateEnabled = update_timer.Enabled;                  UpdateEnabled = update_timer.Enabled;
75                    if (value != null)
76                        GetFirstNonZeroByte();
77              }              }
78          }          }
79          #endregion          #endregion
# Line 58  namespace RomCheater.Docking.UI Line 81  namespace RomCheater.Docking.UI
81          public IConfigPlugin AcceptedPlugin { get; set; }          public IConfigPlugin AcceptedPlugin { get; set; }
82          #endregion          #endregion
83          #region IAcceptsMemoryRange members          #region IAcceptsMemoryRange members
84          public uint MemoryStart { get; set; }          public uint MemoryStart { get { return 0; } }
85          public uint MemorySize { get; set; }          public uint MemorySize { get { return int.MaxValue; } }
86          #endregion          #endregion
87          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }
88          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); }
# Line 101  namespace RomCheater.Docking.UI Line 124  namespace RomCheater.Docking.UI
124          uint CURRENT_TOP_ADDR          uint CURRENT_TOP_ADDR
125          {          {
126              get { return _CURRENT_TOP_ADDR; }              get { return _CURRENT_TOP_ADDR; }
127              set { _CURRENT_TOP_ADDR = value; }              set { txthexGoto.Value = _CURRENT_TOP_ADDR = value; }
128          }          }
129          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }
130          private void UpdateMaxRamView()          private void UpdateMaxRamView()
# Line 128  namespace RomCheater.Docking.UI Line 151  namespace RomCheater.Docking.UI
151              editor.ShowDialog();              editor.ShowDialog();
152              if (editor.BytesEdited)              if (editor.BytesEdited)
153              {              {
154                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);                  //DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);
155                  txtData.ByteProvider = _DynamicByteProvider;                  //txtData.ByteProvider = _DynamicByteProvider;
156                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
157                  this.WriteCurrentBytes();                  this.WriteCurrentBytes(this.CURRENT_TOP_ADDR, editor.AsBytes);
158              }              }
159              this.UpdateEnabled = reenable;              this.UpdateEnabled = reenable;
160          }          }
# Line 169  namespace RomCheater.Docking.UI Line 192  namespace RomCheater.Docking.UI
192          }          }
193          private byte[] GetMemory()          private byte[] GetMemory()
194          {          {
195                byte[] data = new byte[] { };
196              try              try
197              {              {
198                  Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();                  GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
199                  reader.ReadProcess = this.AcceptedProcess;                  provider.OpenProvider();
                 reader.OpenProcess();  
200                  int bytesReadSize;                  int bytesReadSize;
201                  byte[] data = reader.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize);                  provider.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize, out data);
202                  //this.Logger.LogDebugMessage(string.Format("GetMemory() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", data.Length));                  provider.CloseProvider();
203                  return data;  
204              }              }
205              catch (Exception ex)              catch (Exception ex)
206              {              {
207                  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());
                 byte[] data = new byte[max_ram_view];  
                 for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }  
                 return data;  
208              }              }
209                finally
210                {
211                    if (data.Length == 0)
212                    {
213                        data = new byte[max_ram_view];
214                        for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }
215                    }
216                }
217                return data;
218          }          }
219          private void UpdateMemroyView() { this.UpdateMemroyView(this.CURRENT_TOP_ADDR); }          private void UpdateMemroyView() { this.UpdateMemroyView(this.CURRENT_TOP_ADDR); }
220          private void UpdateMemroyView(uint address)          private void UpdateMemroyView(uint address)
# Line 196  namespace RomCheater.Docking.UI Line 225  namespace RomCheater.Docking.UI
225                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
226    
227                  byte[] data = GetMemory();                  byte[] data = GetMemory();
   
                 List<byte> ByteData = new List<byte>((int)(address + (max_ram_view - 0)));  
   
228                  try                  try
229                  {                  {
230                      AddressList = "";                      RamData = data;
                     AsciiData = "";  
231    
                     // 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]); }  
232    
233                        AddressList = "";
234                        AsciiData = "";
235                      // write the addreses out                      // write the addreses out
236                      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)
237                      {                      {
238                          AddressList = AddressList + string.Format("{0:X8}:\n", i);                          AddressList = AddressList + string.Format("{0:X8}:\n", i);
239                      }                      }
240                      // write out the ascii data                      //// write out the ascii data
241                      StringBuilder builder = new StringBuilder();                      StringBuilder builder = new StringBuilder();
242                      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)
243                      {                      {
244                          for (uint j = 0; j < max_address_width; j++)                          try
245                          {                          {
246                              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)  
247                              {                              {
248                                  builder.Append(ascii_value.ToString());                                  uint current_addr = i + j;
249                              }                                  if (current_addr >= MemorySize) break;
250                              else                                  byte ascii_value_raw = data[j];
251                              {                                  char ascii_value = (char)data[j];
252                                  builder.Append(".");                                  if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)
253                                    {
254                                        builder.Append(ascii_value.ToString());
255                                    }
256                                    else
257                                    {
258                                        builder.Append(".");
259                                    }
260                              }                              }
261                                builder.AppendLine();
262                            }
263                            catch (Exception ex)
264                            {
265                                logger.Error.WriteLine("{0}.UpdateMemroyView().BuildingAsciiString:{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
266                                return;
267                          }                          }
                         builder.AppendLine();  
268                      }                      }
269                      AsciiData = builder.ToString();                      AsciiData = builder.ToString();
                     // write out the bytes  
                     RamData = ByteData.ToArray();  
270    
271    
272                  }                  }
# Line 247  namespace RomCheater.Docking.UI Line 278  namespace RomCheater.Docking.UI
278              }              }
279              catch (Exception ex) { logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.UpdateMemroyView():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
280          }          }
281          private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)          //private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)
282          {          //{
283              this.WriteCurrentBytes();          //    this.WriteCurrentBytes();
284          }          //}
285          private void WriteCurrentBytes()          private void WriteCurrentBytes(uint start_address, byte[] data)
286          {          {
287              try              try
288              {              {
289                  if (AcceptedProcess == null) { return; }                  if (AcceptedProcess == null) { return; }
290                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
291                  // Byte changed                  // Byte changed
292                  byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();                  //byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();
293                                    GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
294                    provider.OpenProvider();
                 Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();  
                 reader.ReadProcess = this.AcceptedProcess;  
                 reader.OpenProcess();  
295                  int bytesReadSize;                  int bytesReadSize;
296    
297                  for (int i = 0; i < data.Length; i += sizeof(uint))                  for (int i = 0; i < data.Length; i ++)
298                  {                  {
299                      uint addr = (uint)(this.CURRENT_TOP_ADDR + i);                      uint addr = (uint)(start_address + i);
300                      uint data_to_write = BitConverter.ToUInt32(data, i);                      byte data_to_write = data[i];
301                      reader.WriteProcessMemory((UIntPtr)addr, data, out bytesReadSize);                      provider.WriteProcessMemory(addr, data_to_write, out bytesReadSize);
302                  }                  }
303                    provider.CloseProvider();
304              }              }
305              catch (Exception ex) { logger.Error.WriteLine("{0}.WriteCurrentBytes():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.WriteCurrentBytes():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
306          }          }
# Line 287  namespace RomCheater.Docking.UI Line 316  namespace RomCheater.Docking.UI
316                  //this.Logger.LogDebugMessage(string.Format("RunWorkerCompeleted() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", RamData.Length));                  //this.Logger.LogDebugMessage(string.Format("RunWorkerCompeleted() -> Memory Size: {0}0x{2:X8}{1}", "{", "}", RamData.Length));
317                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);
318                  txtData.ByteProvider = _DynamicByteProvider;                  txtData.ByteProvider = _DynamicByteProvider;
319                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
320              }              }
321              catch (ObjectDisposedException) { } // ignore errors aobut disposed objects (usually only happens when the parent closes)              catch (ObjectDisposedException) { } // ignore errors aobut disposed objects (usually only happens when the parent closes)
322              catch (Exception ex) { logger.Error.WriteLine("{0}.ResultsUpdateWorkerThread_RunWorkerCompleted():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }              catch (Exception ex) { logger.Error.WriteLine("{0}.ResultsUpdateWorkerThread_RunWorkerCompleted():{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString()); }
# Line 303  namespace RomCheater.Docking.UI Line 332  namespace RomCheater.Docking.UI
332              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
333    
334              ////if (e.Type == ScrollEventType.EndScroll) return;              ////if (e.Type == ScrollEventType.EndScroll) return;
335              uint size = MemorySize;              //uint size = max_ram_view;
336    
337              bool haveModifier = false;              bool haveModifier = false;
338              switch (e.Modifiers)              switch (e.Modifiers)
# Line 315  namespace RomCheater.Docking.UI Line 344  namespace RomCheater.Docking.UI
344                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;
345                              break;                              break;
346                          case Keys.End:                          case Keys.End:
347                              this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = (uint)((MemorySize - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;
348                              break;                              break;
349                          default:                          default:
350                              //NonHandledKeysAreBeingPressed = true;                              //NonHandledKeysAreBeingPressed = true;
# Line 329  namespace RomCheater.Docking.UI Line 358  namespace RomCheater.Docking.UI
358                  switch (e.KeyCode)                  switch (e.KeyCode)
359                  {                  {
360                      case Keys.Up:                      case Keys.Up:
361                          this.CURRENT_TOP_ADDR -= (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;                          if (this.CURRENT_TOP_ADDR == 0 && (this.CURRENT_TOP_ADDR - small_scroll_change > this.CURRENT_TOP_ADDR))
362                            {
363                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
364                            }
365                            else
366                            {
367                                this.CURRENT_TOP_ADDR -= (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
368                            }
369                          break;                          break;
370                      case Keys.Down:                      case Keys.Down:
371                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
372                          break;                          break;
373                      case Keys.PageUp:                      case Keys.PageUp:
374                          this.CURRENT_TOP_ADDR -= (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;                          if (this.CURRENT_TOP_ADDR == 0 && (this.CURRENT_TOP_ADDR - large_scroll_change > this.CURRENT_TOP_ADDR))
375                            {
376                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
377                            }
378                            else
379                            {
380                                this.CURRENT_TOP_ADDR -= (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
381                            }
382                          break;                          break;
383                      case Keys.PageDown:                      case Keys.PageDown:
384                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
# Line 347  namespace RomCheater.Docking.UI Line 390  namespace RomCheater.Docking.UI
390              }              }
391              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;
392              //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;
393              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 = (MemorySize - max_ram_view);
394                
395              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
396          }          }
397    
# Line 357  namespace RomCheater.Docking.UI Line 400  namespace RomCheater.Docking.UI
400          private void txtData_KeyDown(object sender, KeyEventArgs e) { this.Handle_KeyDown(sender, e); }          private void txtData_KeyDown(object sender, KeyEventArgs e) { this.Handle_KeyDown(sender, e); }
401    
402          private void ramScroll_Scroll(object sender, ScrollEventArgs e) { this.Handle_Scroll(sender, e); }          private void ramScroll_Scroll(object sender, ScrollEventArgs e) { this.Handle_Scroll(sender, e); }
403    
404            private ScrollEventArgs GetMouseWheelScrollChange(int WheelDelta)
405            {
406                ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.SmallIncrement,1);
407                if (WheelDelta < 0)
408                {
409                    //// negative: scroll down
410                    //// SmallDecrement -or- LargeDecrement
411                    //if (WheelDelta <= small_scroll_change)
412                    //{
413                    //    args = new ScrollEventArgs(ScrollEventType.SmallDecrement,(int)small_scroll_change);
414                    //}
415                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
416                    //{
417                    //    args = new ScrollEventArgs(ScrollEventType.LargeDecrement, (int)large_scroll_change);
418                    //}
419                    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, 1);
420                }
421                else
422                {
423                    //// positive: scroll up
424                    //// SmallIncrement  -or- LargeIncrement
425                    //if (WheelDelta <= small_scroll_change)
426                    //{
427                    //    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, (int)small_scroll_change);
428                    //}
429                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
430                    //{
431                    //    args = new ScrollEventArgs(ScrollEventType.LargeIncrement, (int)large_scroll_change);
432                    //}
433                    args = new ScrollEventArgs(ScrollEventType.SmallDecrement, 1);
434                }
435                return args;
436            }
437    
438            void txtAddresses_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
439            void txtData_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
440          
441    
442          private void Handle_Scroll(object sender, ScrollEventArgs e)          private void Handle_Scroll(object sender, ScrollEventArgs e)
443          {          {
444              //isScrolling = true;              //isScrolling = true;
# Line 366  namespace RomCheater.Docking.UI Line 448  namespace RomCheater.Docking.UI
448    
449              this.UpdateMaxRamView();              this.UpdateMaxRamView();
450              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
451              uint size = MemorySize;              //uint size = MemorySize;
452              if (e.Type == ScrollEventType.EndScroll) return;              if (e.Type == ScrollEventType.EndScroll) return;
453    
454              switch (e.Type)              switch (e.Type)
455              {              {
456                  case ScrollEventType.SmallDecrement:                  case ScrollEventType.SmallDecrement:
457                      this.CURRENT_TOP_ADDR -= (small_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - small_scroll_change) > this.CURRENT_TOP_ADDR))
458                        {
459                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
460                        }
461                        else
462                        {
463                            this.CURRENT_TOP_ADDR -= (small_scroll_change);
464                        }
465                      break;                      break;
466                  case ScrollEventType.SmallIncrement:                  case ScrollEventType.SmallIncrement:
467                      this.CURRENT_TOP_ADDR += (small_scroll_change);                      this.CURRENT_TOP_ADDR += (small_scroll_change);
468                      break;                      break;
469    
470                  case ScrollEventType.LargeDecrement:                  case ScrollEventType.LargeDecrement:
471                      this.CURRENT_TOP_ADDR -= (large_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - large_scroll_change) > this.CURRENT_TOP_ADDR))
472                        {
473                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
474                        }
475                        else
476                        {
477                            this.CURRENT_TOP_ADDR -= (large_scroll_change);
478                        }
479                      break;                      break;
480                  case ScrollEventType.LargeIncrement:                  case ScrollEventType.LargeIncrement:
481                      this.CURRENT_TOP_ADDR += (large_scroll_change);                      this.CURRENT_TOP_ADDR += (large_scroll_change);
# Line 394  namespace RomCheater.Docking.UI Line 490  namespace RomCheater.Docking.UI
490              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;
491              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = VTLB_VADDR_SIZE - max_ram_view;              //if (this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = VTLB_VADDR_SIZE - max_ram_view;
492              //if (this.CURRENT_TOP_ADDR < 0 || this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;              //if (this.CURRENT_TOP_ADDR < 0 || this.CURRENT_TOP_ADDR >= VTLB_VADDR_SIZE) this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
493              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = (size - 1) - max_ram_view;              if (this.CURRENT_TOP_ADDR + max_ram_view >= MemorySize) this.CURRENT_TOP_ADDR = MemorySize - max_ram_view;
494              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
495              //isScrolling = false;              //isScrolling = false;
496          }          }
497    
498      }      }
499  }  }

Legend:
Removed from v.200  
changed lines
  Added in v.245

  ViewVC Help
Powered by ViewVC 1.1.22