From c62f6e000420d96fa1b19b95004a0cd0bc9700cd Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 4 Aug 2023 14:32:31 -0400 Subject: [PATCH] Add OpenMSX internal converters --- .../Internal.Deserializer.cs | 88 +++++++++++++++++++ .../Internal.Serializer.cs | 60 +++++++++++++ 2 files changed, 148 insertions(+) diff --git a/SabreTools.Serialization/Internal.Deserializer.cs b/SabreTools.Serialization/Internal.Deserializer.cs index 5421df60..cc112ff9 100644 --- a/SabreTools.Serialization/Internal.Deserializer.cs +++ b/SabreTools.Serialization/Internal.Deserializer.cs @@ -1249,5 +1249,93 @@ namespace SabreTools.Serialization } #endregion + + #region OpenMSX + + /// + /// Convert from to + /// + public static Models.OpenMSX.Dump ConvertToOpenMSX(Models.Internal.Dump item) + { + var dump = new Models.OpenMSX.Dump(); + + if (item.ContainsKey(Models.Internal.Dump.OriginalKey) && item[Models.Internal.Dump.OriginalKey] is Models.Internal.Original original) + dump.Original = ConvertToOpenMSX(original); + + if (item.ContainsKey(Models.Internal.Dump.RomKey) && item[Models.Internal.Dump.RomKey] is Models.Internal.Rom rom) + { + dump.Rom = ConvertToOpenMSXRom(rom); + } + else if (item.ContainsKey(Models.Internal.Dump.MegaRomKey) && item[Models.Internal.Dump.MegaRomKey] is Models.Internal.Rom megaRom) + { + dump.Rom = ConvertToOpenMSXMegaRom(megaRom); + } + else if (item.ContainsKey(Models.Internal.Dump.SCCPlusCartKey) && item[Models.Internal.Dump.SCCPlusCartKey] is Models.Internal.Rom sccPlusCart) + { + dump.Rom = ConvertToOpenMSXSCCPlusCart(sccPlusCart); + } + + return dump; + } + + /// + /// Convert from to + /// + public static Models.OpenMSX.Original ConvertToOpenMSX(Models.Internal.Original item) + { + var original = new Models.OpenMSX.Original + { + Value = item.ReadString(Models.Internal.Original.ValueKey), + Content = item.ReadString(Models.Internal.Original.ContentKey), + }; + return original; + } + + /// + /// Convert from to + /// + public static Models.OpenMSX.MegaRom ConvertToOpenMSXMegaRom(Models.Internal.Rom item) + { + var megaRom = new Models.OpenMSX.MegaRom + { + Start = item.ReadString(Models.Internal.Rom.StartKey), + Type = item.ReadString(Models.Internal.Rom.TypeKey), + Hash = item.ReadString(Models.Internal.Rom.SHA1Key), + Remark = item.ReadString(Models.Internal.Rom.RemarkKey), + }; + return megaRom; + } + + /// + /// Convert from to + /// + public static Models.OpenMSX.Rom ConvertToOpenMSXRom(Models.Internal.Rom item) + { + var rom = new Models.OpenMSX.Rom + { + Start = item.ReadString(Models.Internal.Rom.StartKey), + Type = item.ReadString(Models.Internal.Rom.TypeKey), + Hash = item.ReadString(Models.Internal.Rom.SHA1Key), + Remark = item.ReadString(Models.Internal.Rom.RemarkKey), + }; + return rom; + } + + /// + /// Convert from to + /// + public static Models.OpenMSX.SCCPlusCart ConvertToOpenMSXSCCPlusCart(Models.Internal.Rom item) + { + var sccPlusCart = new Models.OpenMSX.SCCPlusCart + { + Start = item.ReadString(Models.Internal.Rom.StartKey), + Type = item.ReadString(Models.Internal.Rom.TypeKey), + Hash = item.ReadString(Models.Internal.Rom.SHA1Key), + Remark = item.ReadString(Models.Internal.Rom.RemarkKey), + }; + return sccPlusCart; + } + + #endregion } } \ No newline at end of file diff --git a/SabreTools.Serialization/Internal.Serializer.cs b/SabreTools.Serialization/Internal.Serializer.cs index 74cbd64a..b3c5291d 100644 --- a/SabreTools.Serialization/Internal.Serializer.cs +++ b/SabreTools.Serialization/Internal.Serializer.cs @@ -1250,5 +1250,65 @@ namespace SabreTools.Serialization } #endregion + + #region OpenMSX + + /// + /// Convert from to + /// + public static Models.Internal.Dump ConvertFromOpenMSX(Models.OpenMSX.Dump item) + { + var dump = new Models.Internal.Dump(); + + if (item.Original != null) + dump[Models.Internal.Dump.OriginalKey] = ConvertFromOpenMSX(item.Original); + + switch (item.Rom) + { + case Models.OpenMSX.Rom rom: + dump[Models.Internal.Dump.RomKey] = ConvertFromOpenMSX(rom); + break; + + case Models.OpenMSX.MegaRom megaRom: + dump[Models.Internal.Dump.MegaRomKey] = ConvertFromOpenMSX(megaRom); + break; + + case Models.OpenMSX.SCCPlusCart sccPlusCart: + dump[Models.Internal.Dump.SCCPlusCartKey] = ConvertFromOpenMSX(sccPlusCart); + break; + } + + return dump; + } + + /// + /// Convert from to + /// + public static Models.Internal.Original ConvertFromOpenMSX(Models.OpenMSX.Original item) + { + var original = new Models.Internal.Original + { + [Models.Internal.Original.ValueKey] = item.Value, + [Models.Internal.Original.ContentKey] = item.Content, + }; + return original; + } + + /// + /// Convert from to + /// + public static Models.Internal.Rom ConvertFromOpenMSX(Models.OpenMSX.RomBase item) + { + var rom = new Models.Internal.Rom + { + [Models.Internal.Rom.StartKey] = item.Start, + [Models.Internal.Rom.TypeKey] = item.Type, + [Models.Internal.Rom.SHA1Key] = item.Hash, + [Models.Internal.Rom.RemarkKey] = item.Remark, + }; + return rom; + } + + #endregion } } \ No newline at end of file