/[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 238 by william, Sun Jun 3 12:48:38 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, IAcceptsProcess<Process>, IAcceptsPlugin<IConfigPlugin>//, IAcceptsMemoryRange
18      {      {
19          public UIMemoryViewer()          public UIMemoryViewer()
20          {          {
# Line 29  namespace RomCheater.Docking.UI Line 30  namespace RomCheater.Docking.UI
30              txtData.UseFixedBytesPerLine = true;              txtData.UseFixedBytesPerLine = true;
31              txtData.StringViewVisible = true;              txtData.StringViewVisible = true;
32              ramScroll.Minimum = (int)MemoryStart;              ramScroll.Minimum = (int)MemoryStart;
33              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; }
34              ramScroll.Value = ramScroll.Minimum;              ramScroll.Value = ramScroll.Minimum;
35              this.CanChangeUpdateInterval = false;              this.CanChangeUpdateInterval = false;
36    
# Line 40  namespace RomCheater.Docking.UI Line 41  namespace RomCheater.Docking.UI
41                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);                  lblAddressMarker.Text = lblAddressMarker.Text + string.Format("{0:X2} ", i);
42              }              }
43              this.AcceptedPlugin = null; this.AcceptedProcess = null;              this.AcceptedPlugin = null; this.AcceptedProcess = null;
44    
45                txtAddresses.MouseWheel += new MouseEventHandler(txtAddresses_MouseWheel);
46                txtData.MouseWheel += new MouseEventHandler(txtData_MouseWheel);
47          }          }
48          #region IProcessConfig Members  
49            private void GetFirstNonZeroByte()
50            {
51                if (!DesignMode)
52                {
53                    GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
54                    uint addr = 0;
55                    provider.ReadFirstNonZeroByte(MemoryStart, MemorySize, out addr);
56                    GotoAddress(addr);
57                }
58            }
59    
60            #region  IAcceptsProcess<Process> Members
61          private Process _AcceptedProcess;          private Process _AcceptedProcess;
62          public Process AcceptedProcess          public Process AcceptedProcess
63          {          {
# Line 51  namespace RomCheater.Docking.UI Line 67  namespace RomCheater.Docking.UI
67                  _AcceptedProcess = value;                  _AcceptedProcess = value;
68                  update_timer.Enabled = (value != null);                  update_timer.Enabled = (value != null);
69                  UpdateEnabled = update_timer.Enabled;                  UpdateEnabled = update_timer.Enabled;
70                    if (value != null)
71                        GetFirstNonZeroByte();
72              }              }
73          }          }
74          #endregion          #endregion
75          #region IAcceptsPlugin<IConfigPlugin> Members          #region IAcceptsPlugin<IConfigPlugin> Members
76          public IConfigPlugin AcceptedPlugin { get; set; }          public IConfigPlugin AcceptedPlugin { get; set; }
77          #endregion          #endregion
78            #region IAcceptsMemoryRange members
79            public uint MemoryStart { get { return 0; } }
80            public uint MemorySize { get { return int.MaxValue; } }
81            #endregion
82          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }          public void GotoTop() { this.CURRENT_TOP_ADDR = 0; }
83          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); }
84          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 115  namespace RomCheater.Docking.UI
115          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)
116          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
117          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  
118          private uint _CURRENT_TOP_ADDR;          private uint _CURRENT_TOP_ADDR;
119          uint CURRENT_TOP_ADDR          uint CURRENT_TOP_ADDR
120          {          {
121              get { return _CURRENT_TOP_ADDR; }              get { return _CURRENT_TOP_ADDR; }
122              set { _CURRENT_TOP_ADDR = value; }              set { txthexGoto.Value = _CURRENT_TOP_ADDR = value; }
123          }          }
124          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }          //uint CURRENT_BOITTOM_ADDR() { return CURRENT_TOP_ADDR + max_ram_view; }
125          private void UpdateMaxRamView()          private void UpdateMaxRamView()
# Line 129  namespace RomCheater.Docking.UI Line 146  namespace RomCheater.Docking.UI
146              editor.ShowDialog();              editor.ShowDialog();
147              if (editor.BytesEdited)              if (editor.BytesEdited)
148              {              {
149                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);                  //DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(editor.AsBytes);
150                  txtData.ByteProvider = _DynamicByteProvider;                  //txtData.ByteProvider = _DynamicByteProvider;
151                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
152                  this.WriteCurrentBytes();                  this.WriteCurrentBytes(this.CURRENT_TOP_ADDR, editor.AsBytes);
153              }              }
154              this.UpdateEnabled = reenable;              this.UpdateEnabled = reenable;
155          }          }
# Line 172  namespace RomCheater.Docking.UI Line 189  namespace RomCheater.Docking.UI
189          {          {
190              try              try
191              {              {
192                  Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();                  GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
                 reader.ReadProcess = this.AcceptedProcess;  
                 reader.OpenProcess();  
193                  int bytesReadSize;                  int bytesReadSize;
194                  byte[] data = reader.ReadProcessMemory(MemoryStart, MemorySize, out bytesReadSize);                  byte[] data;
195                    provider.ReadProcessMemory(CURRENT_TOP_ADDR, max_ram_view, out bytesReadSize, out data);
196                  //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));
197                  return data;                  return data;
198              }              }
199              catch (Exception ex)              catch (Exception ex)
200              {              {
201                  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());
202                  byte[] data = new byte[MemorySize];                  byte[] data = new byte[max_ram_view];
203                  for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }                  for (int i = 0; i < data.Length; i++) { data[i] = 0x0; }
204                  return data;                  return data;
205              }              }
# Line 197  namespace RomCheater.Docking.UI Line 213  namespace RomCheater.Docking.UI
213                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
214    
215                  byte[] data = GetMemory();                  byte[] data = GetMemory();
   
                 List<byte> ByteData = new List<byte>((int)(address + (max_ram_view - 0)));  
   
216                  try                  try
217                  {                  {
218                      AddressList = "";                      RamData = data;
                     AsciiData = "";  
219    
                     // 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]); }  
220    
221                        AddressList = "";
222                        AsciiData = "";
223                      // write the addreses out                      // write the addreses out
224                      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)
225                      {                      {
226                          AddressList = AddressList + string.Format("{0:X8}:\n", i);                          AddressList = AddressList + string.Format("{0:X8}:\n", i);
227                      }                      }
228                      // write out the ascii data                      //// write out the ascii data
229                      StringBuilder builder = new StringBuilder();                      StringBuilder builder = new StringBuilder();
230                      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)
231                      {                      {
232                          for (uint j = 0; j < max_address_width; j++)                          try
233                          {                          {
234                              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)  
235                              {                              {
236                                  builder.Append(ascii_value.ToString());                                  uint current_addr = i + j;
237                              }                                  if (current_addr >= MemorySize) break;
238                              else                                  byte ascii_value_raw = data[j];
239                              {                                  char ascii_value = (char)data[j];
240                                  builder.Append(".");                                  if (ascii_value_raw >= 0x20 && ascii_value_raw <= 0x7e)
241                                    {
242                                        builder.Append(ascii_value.ToString());
243                                    }
244                                    else
245                                    {
246                                        builder.Append(".");
247                                    }
248                              }                              }
249                                builder.AppendLine();
250                            }
251                            catch (Exception ex)
252                            {
253                                logger.Error.WriteLine("{0}.UpdateMemroyView().BuildingAsciiString:{1}{2}", this.GetType().Name, System.Environment.NewLine, ex.ToString());
254                                return;
255                          }                          }
                         builder.AppendLine();  
256                      }                      }
257                      AsciiData = builder.ToString();                      AsciiData = builder.ToString();
                     // write out the bytes  
                     RamData = ByteData.ToArray();  
258    
259    
260                  }                  }
# Line 248  namespace RomCheater.Docking.UI Line 266  namespace RomCheater.Docking.UI
266              }              }
267              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()); }
268          }          }
269          private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)          //private void HexResourceViewerBytes_Changed(object sender, System.EventArgs e)
270          {          //{
271              this.WriteCurrentBytes();          //    this.WriteCurrentBytes();
272          }          //}
273          private void WriteCurrentBytes()          private void WriteCurrentBytes(uint start_address, byte[] data)
274          {          {
275              try              try
276              {              {
277                  if (AcceptedProcess == null) { return; }                  if (AcceptedProcess == null) { return; }
278                  if (AcceptedPlugin == null) { return; }                  if (AcceptedPlugin == null) { return; }
279                  // Byte changed                  // Byte changed
280                  byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();                  //byte[] data = (txtData.ByteProvider as DynamicByteProvider).Bytes.ToArray();
281                                    GenericMemoryProvider provider = new GenericMemoryProvider((IAcceptsProcessAndConfig)this);
   
                 Sojaner.MemoryScanner.ProcessMemoryReader reader = new Sojaner.MemoryScanner.ProcessMemoryReader();  
                 reader.ReadProcess = this.AcceptedProcess;  
                 reader.OpenProcess();  
282                  int bytesReadSize;                  int bytesReadSize;
283    
284                  for (int i = 0; i < data.Length; i += sizeof(uint))                  for (int i = 0; i < data.Length; i ++)
285                  {                  {
286                      uint addr = (uint)(this.CURRENT_TOP_ADDR + i);                      uint addr = (uint)(start_address + i);
287                      uint data_to_write = BitConverter.ToUInt32(data, i);                      byte data_to_write = data[i];
288                      reader.WriteProcessMemory((UIntPtr)addr, data, out bytesReadSize);                      provider.WriteProcessMemory(addr, data_to_write, out bytesReadSize);
289                  }                  }
290              }              }
291              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()); }
# Line 288  namespace RomCheater.Docking.UI Line 302  namespace RomCheater.Docking.UI
302                  //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));
303                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);                  DynamicByteProvider _DynamicByteProvider = new DynamicByteProvider(RamData);
304                  txtData.ByteProvider = _DynamicByteProvider;                  txtData.ByteProvider = _DynamicByteProvider;
305                  _DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);                  //_DynamicByteProvider.Changed += new EventHandler(HexResourceViewerBytes_Changed);
306              }              }
307              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)
308              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 304  namespace RomCheater.Docking.UI Line 318  namespace RomCheater.Docking.UI
318              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
319    
320              ////if (e.Type == ScrollEventType.EndScroll) return;              ////if (e.Type == ScrollEventType.EndScroll) return;
321              uint size = MemorySize;              //uint size = max_ram_view;
322    
323              bool haveModifier = false;              bool haveModifier = false;
324              switch (e.Modifiers)              switch (e.Modifiers)
# Line 316  namespace RomCheater.Docking.UI Line 330  namespace RomCheater.Docking.UI
330                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = 0; //NonHandledKeysAreBeingPressed = false;
331                              break;                              break;
332                          case Keys.End:                          case Keys.End:
333                              this.CURRENT_TOP_ADDR = (uint)((size - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;                              this.CURRENT_TOP_ADDR = (uint)((MemorySize - 1) - max_ram_view); //NonHandledKeysAreBeingPressed = false;
334                              break;                              break;
335                          default:                          default:
336                              //NonHandledKeysAreBeingPressed = true;                              //NonHandledKeysAreBeingPressed = true;
# Line 330  namespace RomCheater.Docking.UI Line 344  namespace RomCheater.Docking.UI
344                  switch (e.KeyCode)                  switch (e.KeyCode)
345                  {                  {
346                      case Keys.Up:                      case Keys.Up:
347                          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))
348                            {
349                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
350                            }
351                            else
352                            {
353                                this.CURRENT_TOP_ADDR -= (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
354                            }
355                          break;                          break;
356                      case Keys.Down:                      case Keys.Down:
357                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)small_scroll_change; //NonHandledKeysAreBeingPressed = false;
358                          break;                          break;
359                      case Keys.PageUp:                      case Keys.PageUp:
360                          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))
361                            {
362                                this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
363                            }
364                            else
365                            {
366                                this.CURRENT_TOP_ADDR -= (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
367                            }
368                          break;                          break;
369                      case Keys.PageDown:                      case Keys.PageDown:
370                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;                          this.CURRENT_TOP_ADDR += (uint)(large_scroll_change); //NonHandledKeysAreBeingPressed = false;
# Line 348  namespace RomCheater.Docking.UI Line 376  namespace RomCheater.Docking.UI
376              }              }
377              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;              if (this.CURRENT_TOP_ADDR < MemoryStart) this.CURRENT_TOP_ADDR = MemoryStart;
378              //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;
379              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);
380                
381              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
382          }          }
383    
# Line 358  namespace RomCheater.Docking.UI Line 386  namespace RomCheater.Docking.UI
386          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); }
387    
388          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); }
389    
390            private ScrollEventArgs GetMouseWheelScrollChange(int WheelDelta)
391            {
392                ScrollEventArgs args = new ScrollEventArgs(ScrollEventType.SmallIncrement,1);
393                if (WheelDelta < 0)
394                {
395                    //// negative: scroll down
396                    //// SmallDecrement -or- LargeDecrement
397                    //if (WheelDelta <= small_scroll_change)
398                    //{
399                    //    args = new ScrollEventArgs(ScrollEventType.SmallDecrement,(int)small_scroll_change);
400                    //}
401                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
402                    //{
403                    //    args = new ScrollEventArgs(ScrollEventType.LargeDecrement, (int)large_scroll_change);
404                    //}
405                    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, 1);
406                }
407                else
408                {
409                    //// positive: scroll up
410                    //// SmallIncrement  -or- LargeIncrement
411                    //if (WheelDelta <= small_scroll_change)
412                    //{
413                    //    args = new ScrollEventArgs(ScrollEventType.SmallIncrement, (int)small_scroll_change);
414                    //}
415                    //if (WheelDelta > small_scroll_change && WheelDelta <= large_scroll_change)
416                    //{
417                    //    args = new ScrollEventArgs(ScrollEventType.LargeIncrement, (int)large_scroll_change);
418                    //}
419                    args = new ScrollEventArgs(ScrollEventType.SmallDecrement, 1);
420                }
421                return args;
422            }
423    
424            void txtAddresses_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
425            void txtData_MouseWheel(object sender, MouseEventArgs e) { this.Handle_Scroll(sender, GetMouseWheelScrollChange(e.Delta)); }
426          
427    
428          private void Handle_Scroll(object sender, ScrollEventArgs e)          private void Handle_Scroll(object sender, ScrollEventArgs e)
429          {          {
430              //isScrolling = true;              //isScrolling = true;
# Line 367  namespace RomCheater.Docking.UI Line 434  namespace RomCheater.Docking.UI
434    
435              this.UpdateMaxRamView();              this.UpdateMaxRamView();
436              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;              uint ORIGINAL_ADDR = this.CURRENT_TOP_ADDR;
437              uint size = MemorySize;              //uint size = MemorySize;
438              if (e.Type == ScrollEventType.EndScroll) return;              if (e.Type == ScrollEventType.EndScroll) return;
439    
440              switch (e.Type)              switch (e.Type)
441              {              {
442                  case ScrollEventType.SmallDecrement:                  case ScrollEventType.SmallDecrement:
443                      this.CURRENT_TOP_ADDR -= (small_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - small_scroll_change) > this.CURRENT_TOP_ADDR))
444                        {
445                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
446                        }
447                        else
448                        {
449                            this.CURRENT_TOP_ADDR -= (small_scroll_change);
450                        }
451                      break;                      break;
452                  case ScrollEventType.SmallIncrement:                  case ScrollEventType.SmallIncrement:
453                      this.CURRENT_TOP_ADDR += (small_scroll_change);                      this.CURRENT_TOP_ADDR += (small_scroll_change);
454                      break;                      break;
455    
456                  case ScrollEventType.LargeDecrement:                  case ScrollEventType.LargeDecrement:
457                      this.CURRENT_TOP_ADDR -= (large_scroll_change);                      if (this.CURRENT_TOP_ADDR == 0 && ((this.CURRENT_TOP_ADDR - large_scroll_change) > this.CURRENT_TOP_ADDR))
458                        {
459                            this.CURRENT_TOP_ADDR = ORIGINAL_ADDR;
460                        }
461                        else
462                        {
463                            this.CURRENT_TOP_ADDR -= (large_scroll_change);
464                        }
465                      break;                      break;
466                  case ScrollEventType.LargeIncrement:                  case ScrollEventType.LargeIncrement:
467                      this.CURRENT_TOP_ADDR += (large_scroll_change);                      this.CURRENT_TOP_ADDR += (large_scroll_change);
# Line 395  namespace RomCheater.Docking.UI Line 476  namespace RomCheater.Docking.UI
476              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;              if (this.CURRENT_TOP_ADDR < 0) this.CURRENT_TOP_ADDR = 0;
477              //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;
478              //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;
479              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;
480              //this.UpdateEnabled = reenable;              //this.UpdateEnabled = reenable;
481              //isScrolling = false;              //isScrolling = false;
482          }          }
483    
484      }      }
485  }  }

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

  ViewVC Help
Powered by ViewVC 1.1.22