BizHawk/BizHawk.Client.Common/cheats/GbGameSharkDecoder.cs

47 lines
1.0 KiB
C#

using System;
using System.Globalization;
namespace BizHawk.Client.Common.cheats
{
public static class GbGameSharkDecoder
{
// Sample Input for GB/GBC:
// 010FF6C1
// Becomes:
// Address C1F6
// Value 0F
public static IDecodeResult Decode(string code)
{
if (code == null)
{
throw new ArgumentNullException(nameof(code));
}
if (code.Length != 8 || code.Contains("-"))
{
return new InvalidCheatCode("GameShark codes must be 8 characters with no dashes.");
}
var test = code.Substring(0, 2);
if (test != "00" && test != "01")
{
return new InvalidCheatCode("All GameShark Codes for GameBoy need to start with 00 or 01");
}
var result = new DecodeResult { Size = WatchSize.Byte };
code = code.Remove(0, 2);
var valueStr = code.Remove(2, 4);
code = code.Remove(0, 2);
var addrStr = code.Remove(0, 2);
addrStr += code.Remove(2, 2);
result.Value = int.Parse(valueStr, NumberStyles.HexNumber);
result.Address = int.Parse(addrStr, NumberStyles.HexNumber);
return result;
}
}
}