diff --git a/src/BizHawk.Client.Common/tools/RamSearchEngine/RamSearchEngine.cs b/src/BizHawk.Client.Common/tools/RamSearchEngine/RamSearchEngine.cs index b1dffd3fa3..45532855c0 100644 --- a/src/BizHawk.Client.Common/tools/RamSearchEngine/RamSearchEngine.cs +++ b/src/BizHawk.Client.Common/tools/RamSearchEngine/RamSearchEngine.cs @@ -261,7 +261,7 @@ namespace BizHawk.Client.Common.RamSearchEngine _watchList = _watchList.OrderBy(w => w.Address, reverse).ToArray(); break; case WatchList.Value: - _watchList = _watchList.OrderBy(w => GetValue(w.Address), reverse).ToArray(); + _watchList = _watchList.OrderBy(w => w.Current, reverse).ToArray(); break; case WatchList.Prev: _watchList = _watchList.OrderBy(w => w.Previous, reverse).ToArray(); @@ -270,7 +270,7 @@ namespace BizHawk.Client.Common.RamSearchEngine _watchList = _watchList.OrderBy(w => w.ChangeCount, reverse).ToArray(); break; case WatchList.Diff: - _watchList = _watchList.OrderBy(w => GetValue(w.Address) - w.Previous, reverse).ToArray(); + _watchList = _watchList.OrderBy(w => w.Current - w.Previous, reverse).ToArray(); break; } } @@ -319,52 +319,52 @@ namespace BizHawk.Client.Common.RamSearchEngine { default: case ComparisonOperator.Equal: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) == SignExtendAsNeeded(w.Previous)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) == SignExtendAsNeeded(w.Previous)); case ComparisonOperator.NotEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) != SignExtendAsNeeded(w.Previous)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) != SignExtendAsNeeded(w.Previous)); case ComparisonOperator.GreaterThan: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) > SignExtendAsNeeded(w.Previous)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) > SignExtendAsNeeded(w.Previous)); case ComparisonOperator.GreaterThanEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) >= SignExtendAsNeeded(w.Previous)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) >= SignExtendAsNeeded(w.Previous)); case ComparisonOperator.LessThan: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) < SignExtendAsNeeded(w.Previous)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) < SignExtendAsNeeded(w.Previous)); case ComparisonOperator.LessThanEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) <= SignExtendAsNeeded(w.Previous)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) <= SignExtendAsNeeded(w.Previous)); case ComparisonOperator.DifferentBy: if (DifferentBy is not int differentBy) throw new InvalidOperationException(); return watchList.Where(w => - differentBy == Math.Abs(SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous))); + differentBy == Math.Abs(SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous))); } } switch (Operator) { default: case ComparisonOperator.Equal: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)).HawkFloatEquality(ReinterpretAsF32(w.Previous))); + return watchList.Where(w => ReinterpretAsF32(w.Current).HawkFloatEquality(ReinterpretAsF32(w.Previous))); case ComparisonOperator.NotEqual: - return watchList.Where(w => !ReinterpretAsF32(GetValue(w.Address)).HawkFloatEquality(ReinterpretAsF32(w.Previous))); + return watchList.Where(w => !ReinterpretAsF32(w.Current).HawkFloatEquality(ReinterpretAsF32(w.Previous))); case ComparisonOperator.GreaterThan: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)) > ReinterpretAsF32(w.Previous)); + return watchList.Where(w => ReinterpretAsF32(w.Current) > ReinterpretAsF32(w.Previous)); case ComparisonOperator.GreaterThanEqual: return watchList.Where(w => { - var val = ReinterpretAsF32(GetValue(w.Address)); + var val = ReinterpretAsF32(w.Current); var prev = ReinterpretAsF32(w.Previous); return val > prev || val.HawkFloatEquality(prev); }); case ComparisonOperator.LessThan: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)) < ReinterpretAsF32(w.Previous)); + return watchList.Where(w => ReinterpretAsF32(w.Current) < ReinterpretAsF32(w.Previous)); case ComparisonOperator.LessThanEqual: return watchList.Where(w => { - var val = ReinterpretAsF32(GetValue(w.Address)); + var val = ReinterpretAsF32(w.Current); var prev = ReinterpretAsF32(w.Previous); return val < prev || val.HawkFloatEquality(prev); }); case ComparisonOperator.DifferentBy: if (DifferentBy is not int differentBy) throw new InvalidOperationException(); var differentByF = ReinterpretAsF32(differentBy); - return watchList.Where(w => Math.Abs(ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous)) + return watchList.Where(w => Math.Abs(ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous)) .HawkFloatEquality(differentByF)); } } @@ -378,21 +378,21 @@ namespace BizHawk.Client.Common.RamSearchEngine { default: case ComparisonOperator.Equal: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) == SignExtendAsNeeded(compareValue)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) == SignExtendAsNeeded(compareValue)); case ComparisonOperator.NotEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) != SignExtendAsNeeded(compareValue)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) != SignExtendAsNeeded(compareValue)); case ComparisonOperator.GreaterThan: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) > SignExtendAsNeeded(compareValue)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) > SignExtendAsNeeded(compareValue)); case ComparisonOperator.GreaterThanEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) >= SignExtendAsNeeded(compareValue)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) >= SignExtendAsNeeded(compareValue)); case ComparisonOperator.LessThan: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) < SignExtendAsNeeded(compareValue)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) < SignExtendAsNeeded(compareValue)); case ComparisonOperator.LessThanEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) <= SignExtendAsNeeded(compareValue)); + return watchList.Where(w => SignExtendAsNeeded(w.Current) <= SignExtendAsNeeded(compareValue)); case ComparisonOperator.DifferentBy: if (DifferentBy is not int differentBy) throw new InvalidOperationException(); return watchList.Where(w => - differentBy == Math.Abs(SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(compareValue))); + differentBy == Math.Abs(SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(compareValue))); } } var compareValueF = ReinterpretAsF32(compareValue); @@ -400,29 +400,29 @@ namespace BizHawk.Client.Common.RamSearchEngine { default: case ComparisonOperator.Equal: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)).HawkFloatEquality(compareValueF)); + return watchList.Where(w => ReinterpretAsF32(w.Current).HawkFloatEquality(compareValueF)); case ComparisonOperator.NotEqual: - return watchList.Where(w => !ReinterpretAsF32(GetValue(w.Address)).HawkFloatEquality(compareValueF)); + return watchList.Where(w => !ReinterpretAsF32(w.Current).HawkFloatEquality(compareValueF)); case ComparisonOperator.GreaterThan: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)) > compareValueF); + return watchList.Where(w => ReinterpretAsF32(w.Current) > compareValueF); case ComparisonOperator.GreaterThanEqual: return watchList.Where(w => { - var val = ReinterpretAsF32(GetValue(w.Address)); + var val = ReinterpretAsF32(w.Current); return val > compareValueF || val.HawkFloatEquality(compareValueF); }); case ComparisonOperator.LessThan: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)) < compareValueF); + return watchList.Where(w => ReinterpretAsF32(w.Current) < compareValueF); case ComparisonOperator.LessThanEqual: return watchList.Where(w => { - var val = ReinterpretAsF32(GetValue(w.Address)); + var val = ReinterpretAsF32(w.Current); return val < compareValueF || val.HawkFloatEquality(compareValueF); }); case ComparisonOperator.DifferentBy: if (DifferentBy is not int differentBy) throw new InvalidOperationException(); var differentByF = ReinterpretAsF32(differentBy); - return watchList.Where(w => Math.Abs(ReinterpretAsF32(GetValue(w.Address)) - compareValueF) + return watchList.Where(w => Math.Abs(ReinterpretAsF32(w.Current) - compareValueF) .HawkFloatEquality(differentByF)); } } @@ -484,21 +484,21 @@ namespace BizHawk.Client.Common.RamSearchEngine { default: case ComparisonOperator.Equal: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous) == compareValue); + return watchList.Where(w => SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous) == compareValue); case ComparisonOperator.NotEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous) != compareValue); + return watchList.Where(w => SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous) != compareValue); case ComparisonOperator.GreaterThan: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous) > compareValue); + return watchList.Where(w => SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous) > compareValue); case ComparisonOperator.GreaterThanEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous) >= compareValue); + return watchList.Where(w => SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous) >= compareValue); case ComparisonOperator.LessThan: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous) < compareValue); + return watchList.Where(w => SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous) < compareValue); case ComparisonOperator.LessThanEqual: - return watchList.Where(w => SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous) <= compareValue); + return watchList.Where(w => SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous) <= compareValue); case ComparisonOperator.DifferentBy: if (DifferentBy is not int differentBy) throw new InvalidOperationException(); return watchList.Where(w => - differentBy == Math.Abs(SignExtendAsNeeded(GetValue(w.Address)) - SignExtendAsNeeded(w.Previous) - compareValue)); + differentBy == Math.Abs(SignExtendAsNeeded(w.Current) - SignExtendAsNeeded(w.Previous) - compareValue)); } } var compareValueF = ReinterpretAsF32(compareValue); @@ -506,29 +506,29 @@ namespace BizHawk.Client.Common.RamSearchEngine { default: case ComparisonOperator.Equal: - return watchList.Where(w => (ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous)).HawkFloatEquality(compareValueF)); + return watchList.Where(w => (ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous)).HawkFloatEquality(compareValueF)); case ComparisonOperator.NotEqual: - return watchList.Where(w => !(ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous)).HawkFloatEquality(compareValueF)); + return watchList.Where(w => !(ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous)).HawkFloatEquality(compareValueF)); case ComparisonOperator.GreaterThan: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous) > compareValueF); + return watchList.Where(w => ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous) > compareValueF); case ComparisonOperator.GreaterThanEqual: return watchList.Where(w => { - var diff = ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous); + var diff = ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous); return diff > compareValueF || diff.HawkFloatEquality(compareValueF); }); case ComparisonOperator.LessThan: - return watchList.Where(w => ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous) < compareValueF); + return watchList.Where(w => ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous) < compareValueF); case ComparisonOperator.LessThanEqual: return watchList.Where(w => { - var diff = ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous); + var diff = ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous); return diff < compareValueF || diff.HawkFloatEquality(compareValueF); }); case ComparisonOperator.DifferentBy: if (DifferentBy is not int differentBy) throw new InvalidOperationException(); var differentByF = ReinterpretAsF32(differentBy); - return watchList.Where(w => Math.Abs(ReinterpretAsF32(GetValue(w.Address)) - ReinterpretAsF32(w.Previous) - compareValueF) + return watchList.Where(w => Math.Abs(ReinterpretAsF32(w.Current) - ReinterpretAsF32(w.Previous) - compareValueF) .HawkFloatEquality(differentByF)); } } @@ -549,18 +549,6 @@ namespace BizHawk.Client.Common.RamSearchEngine }; } - private long GetValue(long addr) - { - // do not return sign extended variables from here. - return _settings.Size switch - { - WatchSize.Byte => MiniByteWatch.GetByte(addr, Domain), - WatchSize.Word => MiniWordWatch.GetUshort(addr, Domain, _settings.BigEndian), - WatchSize.DWord => MiniDWordWatch.GetUint(addr, Domain, _settings.BigEndian), - _ => MiniByteWatch.GetByte(addr, Domain) - }; - } - private bool CanDoCompareType(Compare compareType) { return _settings.Mode switch