Ram Search - some fix ups with increment/decrement logic on text boxes
This commit is contained in:
parent
9b37a6c79f
commit
f706bd45ae
|
@ -64,6 +64,8 @@ namespace BizHawk.MultiClient
|
|||
|
||||
TopMost = Global.Config.RamSearchAlwaysOnTop;
|
||||
SetReboot(false);
|
||||
|
||||
|
||||
}
|
||||
|
||||
private void RamSearch_Load(object sender, EventArgs e)
|
||||
|
@ -72,6 +74,7 @@ namespace BizHawk.MultiClient
|
|||
SpecificValueBox.ByteSize = Settings.Size;
|
||||
SpecificValueBox.Type = Settings.Type;
|
||||
MessageLabel.Text = String.Empty;
|
||||
SpecificAddressBox.MaxLength = IntHelpers.GetNumDigits(Global.Emulator.MainMemory.Size);
|
||||
NewSearch();
|
||||
}
|
||||
|
||||
|
@ -336,6 +339,7 @@ namespace BizHawk.MultiClient
|
|||
Settings.Domain = Global.Emulator.MemoryDomains[pos];
|
||||
SetDomainLabel();
|
||||
SetReboot(true);
|
||||
SpecificAddressBox.MaxLength = IntHelpers.GetNumDigits(Settings.Domain.Size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -431,6 +435,10 @@ namespace BizHawk.MultiClient
|
|||
|
||||
private void DoDisplayTypeClick(Watch.DisplayType type)
|
||||
{
|
||||
if (Settings.Type != type && !String.IsNullOrEmpty(SpecificValueBox.Text))
|
||||
{
|
||||
SpecificValueBox.Text = "0";
|
||||
}
|
||||
SpecificValueBox.Type = Settings.Type = type;
|
||||
Searches.SetType(type);
|
||||
}
|
||||
|
@ -444,6 +452,16 @@ namespace BizHawk.MultiClient
|
|||
private void SetSize(Watch.WatchSize size)
|
||||
{
|
||||
SpecificValueBox.ByteSize = Settings.Size = size;
|
||||
if (!String.IsNullOrEmpty(SpecificAddressBox.Text))
|
||||
{
|
||||
SpecificAddressBox.Text = "0";
|
||||
}
|
||||
|
||||
if (!String.IsNullOrEmpty(SpecificValueBox.Text))
|
||||
{
|
||||
SpecificValueBox.Text = "0";
|
||||
}
|
||||
|
||||
SetReboot(true);
|
||||
}
|
||||
|
||||
|
|
|
@ -97,10 +97,14 @@ namespace BizHawk.MultiClient
|
|||
break;
|
||||
}
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
MaxLength = 9;
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
MaxLength = 21;
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
MaxLength = 32;
|
||||
MaxLength = 64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -177,37 +181,187 @@ namespace BizHawk.MultiClient
|
|||
{
|
||||
if (e.KeyCode == Keys.Up)
|
||||
{
|
||||
int val = ToRawInt();
|
||||
val++;
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
int val = ToRawInt();
|
||||
if (val == MaxSignedInt)
|
||||
{
|
||||
val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
val++;
|
||||
}
|
||||
Text = val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
uint uval = (uint)ToRawInt();
|
||||
if (uval == MaxUnsignedInt)
|
||||
{
|
||||
uval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
uval++;
|
||||
}
|
||||
Text = uval.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
throw new NotImplementedException();
|
||||
uint bval = (uint)ToRawInt();
|
||||
if (bval == MaxUnsignedInt)
|
||||
{
|
||||
bval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
bval++;
|
||||
}
|
||||
int numBits = ((int)ByteSize) * 8;
|
||||
Text = Convert.ToString(bval, 2).PadLeft(numBits, '0');
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
uint hexVal = (uint)ToRawInt();
|
||||
if (hexVal == MaxUnsignedInt)
|
||||
{
|
||||
hexVal = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
hexVal++;
|
||||
}
|
||||
string formatstr = "{0:X" + MaxLength.ToString() + "}";
|
||||
Text = String.Format(formatstr, val);
|
||||
Text = String.Format(formatstr, hexVal);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
double f12val = double.Parse(Text);
|
||||
if (f12val > Max12_4 - _12_4_Unit)
|
||||
{
|
||||
f12val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
f12val += _12_4_Unit;
|
||||
}
|
||||
Text = f12val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
double f24val = double.Parse(Text);
|
||||
if (f24val >= Max20_12 - _20_12_Unit)
|
||||
{
|
||||
f24val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
f24val += _20_12_Unit;
|
||||
}
|
||||
Text = f24val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
double dval = double.Parse(Text);
|
||||
if (dval > double.MaxValue - 1)
|
||||
{
|
||||
dval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dval++;
|
||||
}
|
||||
Text = dval.ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
else if (e.KeyCode == Keys.Down)
|
||||
{
|
||||
int val = ToRawInt();
|
||||
val--;
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
default:
|
||||
case Watch.DisplayType.Signed:
|
||||
int val = ToRawInt();
|
||||
if (val == 0)
|
||||
{
|
||||
val = MaxSignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
val--;
|
||||
}
|
||||
Text = val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Unsigned:
|
||||
uint uval = (uint)ToRawInt();
|
||||
if (uval == 0)
|
||||
{
|
||||
uval = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
uval--;
|
||||
}
|
||||
Text = uval.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Binary:
|
||||
throw new NotImplementedException();
|
||||
uint bval = (uint)ToRawInt();
|
||||
if (bval == 0)
|
||||
{
|
||||
bval = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
bval--;
|
||||
}
|
||||
int numBits = ((int)ByteSize) * 8;
|
||||
Text = Convert.ToString(bval, 2).PadLeft(numBits, '0');
|
||||
break;
|
||||
case Watch.DisplayType.Hex:
|
||||
uint hexVal = (uint)ToRawInt();
|
||||
if (hexVal == 0)
|
||||
{
|
||||
hexVal = MaxUnsignedInt;
|
||||
}
|
||||
else
|
||||
{
|
||||
hexVal++;
|
||||
}
|
||||
string formatstr = "{0:X" + MaxLength.ToString() + "}";
|
||||
Text = String.Format(formatstr, val);
|
||||
Text = String.Format(formatstr, hexVal);
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_12_4:
|
||||
double f12val = double.Parse(Text);
|
||||
if (f12val < 0 + _12_4_Unit)
|
||||
{
|
||||
f12val = Max12_4;
|
||||
}
|
||||
else
|
||||
{
|
||||
f12val -= _12_4_Unit;
|
||||
}
|
||||
Text = f12val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.FixedPoint_20_12:
|
||||
double f24val = double.Parse(Text);
|
||||
if (f24val < 0 + _20_12_Unit)
|
||||
{
|
||||
f24val = Max20_12;
|
||||
}
|
||||
else
|
||||
{
|
||||
f24val -= _20_12_Unit;
|
||||
}
|
||||
Text = f24val.ToString();
|
||||
break;
|
||||
case Watch.DisplayType.Float:
|
||||
double dval = double.Parse(Text);
|
||||
if (dval > double.MaxValue - 1)
|
||||
{
|
||||
dval = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
dval--;
|
||||
}
|
||||
Text = dval.ToString();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -217,6 +371,60 @@ namespace BizHawk.MultiClient
|
|||
}
|
||||
}
|
||||
|
||||
uint MaxUnsignedInt
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (ByteSize)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
return byte.MaxValue;
|
||||
case Watch.WatchSize.Word:
|
||||
return ushort.MaxValue;
|
||||
case Watch.WatchSize.DWord:
|
||||
return uint.MaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int MaxSignedInt
|
||||
{
|
||||
get
|
||||
{
|
||||
switch (ByteSize)
|
||||
{
|
||||
default:
|
||||
case Watch.WatchSize.Byte:
|
||||
return sbyte.MaxValue;
|
||||
case Watch.WatchSize.Word:
|
||||
return short.MaxValue;
|
||||
case Watch.WatchSize.DWord:
|
||||
return int.MaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double Max12_4
|
||||
{
|
||||
get
|
||||
{
|
||||
return MaxUnsignedInt / 16.0;
|
||||
}
|
||||
}
|
||||
|
||||
double Max20_12
|
||||
{
|
||||
get
|
||||
{
|
||||
return MaxUnsignedInt / 4096.0;
|
||||
}
|
||||
}
|
||||
|
||||
double _12_4_Unit { get { return 1 / 16.0; } }
|
||||
double _20_12_Unit { get { return 1 / 4096.0; } }
|
||||
|
||||
|
||||
protected override void OnTextChanged(EventArgs e)
|
||||
{
|
||||
if (String.IsNullOrWhiteSpace(Text))
|
||||
|
|
|
@ -34,8 +34,16 @@ namespace BizHawk
|
|||
{
|
||||
if (InputValidate.IsValidHexNumber(Text))
|
||||
{
|
||||
int val = ToRawInt();
|
||||
val++;
|
||||
uint val = (uint)ToRawInt();
|
||||
|
||||
if (val == IntHelpers.MaxHexValueFromMaxDigits(MaxLength))
|
||||
{
|
||||
val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
val++;
|
||||
}
|
||||
string formatstr = "{0:X" + MaxLength.ToString() + "}";
|
||||
Text = String.Format(formatstr, val);
|
||||
}
|
||||
|
@ -44,8 +52,16 @@ namespace BizHawk
|
|||
{
|
||||
if (InputValidate.IsValidHexNumber(Text))
|
||||
{
|
||||
int val = ToRawInt();
|
||||
val--;
|
||||
uint val = (uint)ToRawInt();
|
||||
if (val == 0)
|
||||
{
|
||||
val = IntHelpers.MaxHexValueFromMaxDigits(MaxLength);
|
||||
}
|
||||
else
|
||||
{
|
||||
val--;
|
||||
}
|
||||
|
||||
string formatstr = "{0:X" + MaxLength.ToString() + "}";
|
||||
Text = String.Format(formatstr, val);
|
||||
}
|
||||
|
@ -102,8 +118,15 @@ namespace BizHawk
|
|||
{
|
||||
if (InputValidate.IsValidUnsignedNumber(Text))
|
||||
{
|
||||
int val = ToRawInt();
|
||||
val++;
|
||||
uint val = (uint)ToRawInt();
|
||||
if (val == uint.MaxValue)
|
||||
{
|
||||
val = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
val++;
|
||||
}
|
||||
Text = val.ToString();
|
||||
}
|
||||
}
|
||||
|
@ -111,8 +134,17 @@ namespace BizHawk
|
|||
{
|
||||
if (InputValidate.IsValidUnsignedNumber(Text))
|
||||
{
|
||||
int val = ToRawInt();
|
||||
val--;
|
||||
uint val = (uint)ToRawInt();
|
||||
|
||||
if (val == 0)
|
||||
{
|
||||
val = uint.MaxValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
val--;
|
||||
}
|
||||
|
||||
Text = val.ToString();
|
||||
}
|
||||
}
|
||||
|
@ -138,7 +170,7 @@ namespace BizHawk
|
|||
}
|
||||
else
|
||||
{
|
||||
return int.Parse(Text);
|
||||
return (int)uint.Parse(Text);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -42,5 +42,32 @@ namespace BizHawk
|
|||
if (i < 0x1000000) return 6;
|
||||
else return 8;
|
||||
}
|
||||
|
||||
public static uint MaxHexValueFromMaxDigits(Int32 i)
|
||||
{
|
||||
switch (i)
|
||||
{
|
||||
case 0:
|
||||
return 0;
|
||||
case 1:
|
||||
return 0xF;
|
||||
case 2:
|
||||
return 0xFF;
|
||||
case 3:
|
||||
return 0xFFF;
|
||||
case 4:
|
||||
return 0xFFFF;
|
||||
case 5:
|
||||
return 0xFFFFF;
|
||||
case 6:
|
||||
return 0xFFFFFF;
|
||||
case 7:
|
||||
return 0xFFFFFFF;
|
||||
case 8:
|
||||
return 0xFFFFFFFF;
|
||||
}
|
||||
|
||||
return int.MaxValue;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue