From dc773dba5e632ddfca2b40ba1dc63699688dc48d Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Fri, 3 Apr 2026 10:26:20 -0400 Subject: [PATCH] Convert Chip fully over to properties --- .../MetadataExtensions.cs | 2 + SabreTools.Data.Models/ClrMamePro/Chip.cs | 4 +- SabreTools.Data.Models/Listxml/Chip.cs | 2 +- SabreTools.Data.Models/Metadata/Chip.cs | 67 ++++++++++++++++--- .../DatFileTests.FromMetadata.cs | 8 +-- .../DatFileTests.ToMetadata.cs | 4 +- SabreTools.Metadata.DatItems/Formats/Chip.cs | 12 ++++ SabreTools.Metadata.Filter/FilterObject.cs | 6 ++ .../DictionaryBaseExtensions.cs | 6 +- .../ClrMameProTests.cs | 8 +-- .../ListxmlTests.cs | 4 +- .../M1Tests.cs | 4 +- .../MessTests.cs | 4 +- .../ClrMamePro.Deserializer.cs | 4 +- .../ClrMamePro.Serializer.cs | 4 +- .../Listxml.Deserializer.cs | 2 +- .../Listxml.Serializer.cs | 2 +- .../ClrMameProTests.cs | 8 +-- .../ListxmlTests.cs | 4 +- .../M1Tests.cs | 4 +- .../MessTests.cs | 4 +- .../ClrMamePro.cs | 2 +- SabreTools.Serialization.Readers/Listxml.cs | 2 +- SabreTools.Serialization.Readers/M1.cs | 2 +- SabreTools.Serialization.Readers/Mess.cs | 2 +- .../ClrMamePro.cs | 2 +- SabreTools.Serialization.Writers/Listxml.cs | 2 +- SabreTools.Serialization.Writers/M1.cs | 2 +- SabreTools.Serialization.Writers/Mess.cs | 2 +- 29 files changed, 120 insertions(+), 59 deletions(-) diff --git a/SabreTools.Data.Extensions/MetadataExtensions.cs b/SabreTools.Data.Extensions/MetadataExtensions.cs index 8ece4688..97c7711f 100644 --- a/SabreTools.Data.Extensions/MetadataExtensions.cs +++ b/SabreTools.Data.Extensions/MetadataExtensions.cs @@ -167,6 +167,8 @@ namespace SabreTools.Data.Extensions else if (self is Chip selfChip && clone is Chip cloneChip) { cloneChip.ChipType = selfChip.ChipType; + cloneChip.Clock = selfChip.Clock; + cloneChip.Flags = selfChip.Flags; cloneChip.SoundOnly = selfChip.SoundOnly; cloneChip.Tag = selfChip.Tag; } diff --git a/SabreTools.Data.Models/ClrMamePro/Chip.cs b/SabreTools.Data.Models/ClrMamePro/Chip.cs index 4c9c603b..282e53fe 100644 --- a/SabreTools.Data.Models/ClrMamePro/Chip.cs +++ b/SabreTools.Data.Models/ClrMamePro/Chip.cs @@ -17,7 +17,7 @@ namespace SabreTools.Data.Models.ClrMamePro /// flags public string? Flags { get; set; } - /// clock, Numeric? - public string? Clock { get; set; } + /// clock + public long? Clock { get; set; } } } diff --git a/SabreTools.Data.Models/Listxml/Chip.cs b/SabreTools.Data.Models/Listxml/Chip.cs index 1b19195b..b447e24c 100644 --- a/SabreTools.Data.Models/Listxml/Chip.cs +++ b/SabreTools.Data.Models/Listxml/Chip.cs @@ -24,6 +24,6 @@ namespace SabreTools.Data.Models.Listxml public bool? SoundOnly { get; set; } [XmlAttribute("clock")] - public string? Clock { get; set; } + public long? Clock { get; set; } } } diff --git a/SabreTools.Data.Models/Metadata/Chip.cs b/SabreTools.Data.Models/Metadata/Chip.cs index 89f851c2..e55ac97f 100644 --- a/SabreTools.Data.Models/Metadata/Chip.cs +++ b/SabreTools.Data.Models/Metadata/Chip.cs @@ -1,16 +1,21 @@ +using System; using System.Xml.Serialization; using Newtonsoft.Json; namespace SabreTools.Data.Models.Metadata { [JsonObject("chip"), XmlRoot("chip")] - public class Chip : DatItem + public class Chip : DatItem, ICloneable, IEquatable { #region Properties /// (cpu|audio) public ChipType? ChipType { get; set; } + public long? Clock { get; set; } + + public string? Flags { get; set; } + public string? Name { get; set; } /// (yes|no) "no" @@ -20,16 +25,56 @@ namespace SabreTools.Data.Models.Metadata #endregion - #region Keys - - /// long - public const string ClockKey = "clock"; - - /// string - public const string FlagsKey = "flags"; - - #endregion - public Chip() => ItemType = ItemType.Chip; + + /// + public object Clone() + { + var obj = new Chip(); + + obj.ChipType = ChipType; + obj.Clock = Clock; + obj.Flags = Flags; + obj.Name = Name; + obj.SoundOnly = SoundOnly; + obj.Tag = Tag; + + return obj; + } + + /// + public bool Equals(Chip? other) + { + // Null never matches + if (other is null) + return false; + + // Properties + if (ChipType != other.ChipType) + return false; + + if (Clock != other.Clock) + return false; + + if ((Flags is null) ^ (other.Flags is null)) + return false; + else if (Flags is not null && !Flags.Equals(other.Flags, StringComparison.OrdinalIgnoreCase)) + return false; + + if ((Name is null) ^ (other.Name is null)) + return false; + else if (Name is not null && !Name.Equals(other.Name, StringComparison.OrdinalIgnoreCase)) + return false; + + if (SoundOnly != other.SoundOnly) + return false; + + if ((Tag is null) ^ (other.Tag is null)) + return false; + else if (Tag is not null && !Tag.Equals(other.Tag, StringComparison.OrdinalIgnoreCase)) + return false; + + return true; + } } } diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs index df57d032..cb9fba6a 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.FromMetadata.cs @@ -404,8 +404,8 @@ namespace SabreTools.Metadata.DatFiles.Test { return new Data.Models.Metadata.Chip { - [Data.Models.Metadata.Chip.ClockKey] = 12345L, - [Data.Models.Metadata.Chip.FlagsKey] = "flags", + Clock = 12345L, + Flags = "flags", Name = "name", SoundOnly = true, Tag = "tag", @@ -1174,8 +1174,8 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateChip(Chip? chip) { Assert.NotNull(chip); - Assert.Equal(12345L, chip.ReadLong(Data.Models.Metadata.Chip.ClockKey)); - Assert.Equal("flags", chip.ReadString(Data.Models.Metadata.Chip.FlagsKey)); + Assert.Equal(12345L, chip.Clock); + Assert.Equal("flags", chip.Flags); Assert.Equal("name", chip.Name); Assert.True(chip.SoundOnly); Assert.Equal("tag", chip.Tag); diff --git a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs index 6c3f053f..1048ab62 100644 --- a/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs +++ b/SabreTools.Metadata.DatFiles.Test/DatFileTests.ToMetadata.cs @@ -681,8 +681,8 @@ namespace SabreTools.Metadata.DatFiles.Test private static void ValidateMetadataChip(Data.Models.Metadata.Chip? chip) { Assert.NotNull(chip); - Assert.Equal(12345, chip.ReadLong(Data.Models.Metadata.Chip.ClockKey)); - Assert.Equal("flags", chip.ReadString(Data.Models.Metadata.Chip.FlagsKey)); + Assert.Equal(12345, chip.Clock); + Assert.Equal("flags", chip.Flags); Assert.Equal("name", chip.Name); Assert.True(chip.SoundOnly); Assert.Equal("tag", chip.Tag); diff --git a/SabreTools.Metadata.DatItems/Formats/Chip.cs b/SabreTools.Metadata.DatItems/Formats/Chip.cs index 9dcfcd20..d0ae1be7 100644 --- a/SabreTools.Metadata.DatItems/Formats/Chip.cs +++ b/SabreTools.Metadata.DatItems/Formats/Chip.cs @@ -22,6 +22,18 @@ namespace SabreTools.Metadata.DatItems.Formats public override Data.Models.Metadata.ItemType ItemType => Data.Models.Metadata.ItemType.Chip; + public long? Clock + { + get => (_internal as Data.Models.Metadata.Chip)?.Clock; + set => (_internal as Data.Models.Metadata.Chip)?.Clock = value; + } + + public string? Flags + { + get => (_internal as Data.Models.Metadata.Chip)?.Flags; + set => (_internal as Data.Models.Metadata.Chip)?.Flags = value; + } + public string? Name { get => (_internal as Data.Models.Metadata.Chip)?.Name; diff --git a/SabreTools.Metadata.Filter/FilterObject.cs b/SabreTools.Metadata.Filter/FilterObject.cs index d00091ed..dc33be38 100644 --- a/SabreTools.Metadata.Filter/FilterObject.cs +++ b/SabreTools.Metadata.Filter/FilterObject.cs @@ -370,6 +370,12 @@ namespace SabreTools.Metadata.Filter case Chip item when fieldName == "type": checkValue = item.ChipType?.AsStringValue(); return true; + case Chip item when fieldName == "clock": + checkValue = item.Clock?.ToString(); + return true; + case Chip item when fieldName == "flags": + checkValue = item.Flags; + return true; case Chip item when fieldName == "soundonly": checkValue = item.SoundOnly.FromYesNo(); return true; diff --git a/SabreTools.Metadata/DictionaryBaseExtensions.cs b/SabreTools.Metadata/DictionaryBaseExtensions.cs index e31e2775..bedc6c69 100644 --- a/SabreTools.Metadata/DictionaryBaseExtensions.cs +++ b/SabreTools.Metadata/DictionaryBaseExtensions.cs @@ -84,11 +84,7 @@ namespace SabreTools.Metadata } else if (self is Chip selfChip && other is Chip otherChip) { - if (selfChip.ChipType != otherChip.ChipType) - return false; - if (selfChip.SoundOnly != otherChip.SoundOnly) - return false; - if (selfChip.Tag != otherChip.Tag) + if (!selfChip.Equals(otherChip)) return false; } else if (self is Condition selfCondition && other is Condition otherCondition) diff --git a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs index 67cdb08c..38149fa0 100644 --- a/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ClrMameProTests.cs @@ -158,8 +158,8 @@ namespace SabreTools.Serialization.CrossModel.Test { Type = Data.Models.Metadata.ChipType.CPU, Name = "name", - Flags = "XXXXXX", - Clock = "XXXXXX", + Flags = "flags", + Clock = 12345, }; var video = new Data.Models.ClrMamePro.Video @@ -441,8 +441,8 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.NotNull(chip); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal("name", chip.Name); - Assert.Equal("XXXXXX", chip.Flags); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("flags", chip.Flags); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs index d8031044..ba51404d 100644 --- a/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/ListxmlTests.cs @@ -115,7 +115,7 @@ namespace SabreTools.Serialization.CrossModel.Test Tag = "tag", Type = Data.Models.Metadata.ChipType.CPU, SoundOnly = true, - Clock = "XXXXXX", + Clock = 12345, }; var display = new Data.Models.Listxml.Display @@ -543,7 +543,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("tag", chip.Tag); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal(true, chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs index 2018128f..2106dda8 100644 --- a/SabreTools.Serialization.CrossModel.Test/M1Tests.cs +++ b/SabreTools.Serialization.CrossModel.Test/M1Tests.cs @@ -111,7 +111,7 @@ namespace SabreTools.Serialization.CrossModel.Test Tag = "tag", Type = Data.Models.Metadata.ChipType.CPU, SoundOnly = true, - Clock = "XXXXXX", + Clock = 12345, }; var display = new Data.Models.Listxml.Display @@ -537,7 +537,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("tag", chip.Tag); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal(true, chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.CrossModel.Test/MessTests.cs b/SabreTools.Serialization.CrossModel.Test/MessTests.cs index 1bb302a1..65a1e2b3 100644 --- a/SabreTools.Serialization.CrossModel.Test/MessTests.cs +++ b/SabreTools.Serialization.CrossModel.Test/MessTests.cs @@ -111,7 +111,7 @@ namespace SabreTools.Serialization.CrossModel.Test Tag = "tag", Type = Data.Models.Metadata.ChipType.CPU, SoundOnly = true, - Clock = "XXXXXX", + Clock = 12345, }; var display = new Data.Models.Listxml.Display @@ -537,7 +537,7 @@ namespace SabreTools.Serialization.CrossModel.Test Assert.Equal("tag", chip.Tag); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal(true, chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs index 27aa5c67..b08037f3 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Deserializer.cs @@ -169,8 +169,8 @@ namespace SabreTools.Serialization.CrossModel { Type = item.ChipType, Name = item.Name, - Flags = item.ReadString(Data.Models.Metadata.Chip.FlagsKey), - Clock = item.ReadString(Data.Models.Metadata.Chip.ClockKey), + Flags = item.Flags, + Clock = item.Clock, }; return chip; } diff --git a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs index 66c50528..dd867657 100644 --- a/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/ClrMamePro.Serializer.cs @@ -182,8 +182,8 @@ namespace SabreTools.Serialization.CrossModel { ChipType = item.Type, Name = item.Name, - [Data.Models.Metadata.Chip.FlagsKey] = item.Flags, - [Data.Models.Metadata.Chip.ClockKey] = item.Clock, + Flags = item.Flags, + Clock = item.Clock, }; return chip; } diff --git a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs index 375f0607..2113918e 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Deserializer.cs @@ -196,7 +196,7 @@ namespace SabreTools.Serialization.CrossModel Tag = item.Tag, Type = item.ChipType, SoundOnly = item.SoundOnly, - Clock = item.ReadString(Data.Models.Metadata.Chip.ClockKey), + Clock = item.Clock, }; return chip; } diff --git a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs index 5d21682f..fc3fe690 100644 --- a/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs +++ b/SabreTools.Serialization.CrossModel/Listxml.Serializer.cs @@ -229,7 +229,7 @@ namespace SabreTools.Serialization.CrossModel Tag = item.Tag, ChipType = item.Type, SoundOnly = item.SoundOnly, - [Data.Models.Metadata.Chip.ClockKey] = item.Clock, + Clock = item.Clock, }; return chip; } diff --git a/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs b/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs index 3fab116b..a47636c8 100644 --- a/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs +++ b/SabreTools.Serialization.Readers.Test/ClrMameProTests.cs @@ -275,8 +275,8 @@ namespace SabreTools.Serialization.Readers.Test { Type = Data.Models.Metadata.ChipType.CPU, Name = "name", - Flags = "XXXXXX", - Clock = "XXXXXX", + Flags = "flags", + Clock = 12345, }; var video = new Data.Models.ClrMamePro.Video @@ -558,8 +558,8 @@ namespace SabreTools.Serialization.Readers.Test Assert.NotNull(chip); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal("name", chip.Name); - Assert.Equal("XXXXXX", chip.Flags); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal("flags", chip.Flags); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs index 111b1b23..986ad35c 100644 --- a/SabreTools.Serialization.Readers.Test/ListxmlTests.cs +++ b/SabreTools.Serialization.Readers.Test/ListxmlTests.cs @@ -182,7 +182,7 @@ namespace SabreTools.Serialization.Readers.Test Tag = "tag", Type = Data.Models.Metadata.ChipType.CPU, SoundOnly = true, - Clock = "XXXXXX", + Clock = 12345, }; var display = new Data.Models.Listxml.Display @@ -610,7 +610,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("tag", chip.Tag); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal(true, chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.Readers.Test/M1Tests.cs b/SabreTools.Serialization.Readers.Test/M1Tests.cs index 9c42212c..a394554b 100644 --- a/SabreTools.Serialization.Readers.Test/M1Tests.cs +++ b/SabreTools.Serialization.Readers.Test/M1Tests.cs @@ -178,7 +178,7 @@ namespace SabreTools.Serialization.Readers.Test Tag = "tag", Type = Data.Models.Metadata.ChipType.CPU, SoundOnly = true, - Clock = "XXXXXX", + Clock = 12345, }; var display = new Data.Models.Listxml.Display @@ -604,7 +604,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("tag", chip.Tag); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal(true, chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.Readers.Test/MessTests.cs b/SabreTools.Serialization.Readers.Test/MessTests.cs index 146628c2..8f1a3913 100644 --- a/SabreTools.Serialization.Readers.Test/MessTests.cs +++ b/SabreTools.Serialization.Readers.Test/MessTests.cs @@ -178,7 +178,7 @@ namespace SabreTools.Serialization.Readers.Test Tag = "tag", Type = Data.Models.Metadata.ChipType.CPU, SoundOnly = true, - Clock = "XXXXXX", + Clock = 12345, }; var display = new Data.Models.Listxml.Display @@ -604,7 +604,7 @@ namespace SabreTools.Serialization.Readers.Test Assert.Equal("tag", chip.Tag); Assert.Equal(Data.Models.Metadata.ChipType.CPU, chip.Type); Assert.Equal(true, chip.SoundOnly); - Assert.Equal("XXXXXX", chip.Clock); + Assert.Equal(12345, chip.Clock); } /// diff --git a/SabreTools.Serialization.Readers/ClrMamePro.cs b/SabreTools.Serialization.Readers/ClrMamePro.cs index f2454b1d..6227cef7 100644 --- a/SabreTools.Serialization.Readers/ClrMamePro.cs +++ b/SabreTools.Serialization.Readers/ClrMamePro.cs @@ -776,7 +776,7 @@ namespace SabreTools.Serialization.Readers chip.Flags = kvp.Value; break; case "clock": - chip.Clock = kvp.Value; + chip.Clock = NumberHelper.ConvertToInt64(kvp.Value); break; default: // TODO: Log invalid values diff --git a/SabreTools.Serialization.Readers/Listxml.cs b/SabreTools.Serialization.Readers/Listxml.cs index 1a55afa3..750e4135 100644 --- a/SabreTools.Serialization.Readers/Listxml.cs +++ b/SabreTools.Serialization.Readers/Listxml.cs @@ -192,7 +192,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Type = reader.GetAttribute("type").AsChipType(); obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); - obj.Clock = reader.GetAttribute("clock"); + obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock")); return obj; } diff --git a/SabreTools.Serialization.Readers/M1.cs b/SabreTools.Serialization.Readers/M1.cs index f8853d96..6420d027 100644 --- a/SabreTools.Serialization.Readers/M1.cs +++ b/SabreTools.Serialization.Readers/M1.cs @@ -190,7 +190,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Type = reader.GetAttribute("type").AsChipType(); obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); - obj.Clock = reader.GetAttribute("clock"); + obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock")); return obj; } diff --git a/SabreTools.Serialization.Readers/Mess.cs b/SabreTools.Serialization.Readers/Mess.cs index 3c6346dc..c81db4d5 100644 --- a/SabreTools.Serialization.Readers/Mess.cs +++ b/SabreTools.Serialization.Readers/Mess.cs @@ -190,7 +190,7 @@ namespace SabreTools.Serialization.Readers obj.Tag = reader.GetAttribute("tag"); obj.Type = reader.GetAttribute("type").AsChipType(); obj.SoundOnly = reader.GetAttribute("soundonly").AsYesNo(); - obj.Clock = reader.GetAttribute("clock"); + obj.Clock = NumberHelper.ConvertToInt64(reader.GetAttribute("clock")); return obj; } diff --git a/SabreTools.Serialization.Writers/ClrMamePro.cs b/SabreTools.Serialization.Writers/ClrMamePro.cs index 1a066d65..392f8627 100644 --- a/SabreTools.Serialization.Writers/ClrMamePro.cs +++ b/SabreTools.Serialization.Writers/ClrMamePro.cs @@ -393,7 +393,7 @@ namespace SabreTools.Serialization.Writers writer.WriteRequiredAttributeString("type", chip.Type?.AsStringValue(), throwOnError: true); writer.WriteRequiredAttributeString("name", chip.Name, throwOnError: true); writer.WriteOptionalAttributeString("flags", chip.Flags); - writer.WriteOptionalAttributeString("clock", chip.Clock); + writer.WriteOptionalAttributeString("clock", chip.Clock?.ToString()); writer.WriteEndElement(); // chip } } diff --git a/SabreTools.Serialization.Writers/Listxml.cs b/SabreTools.Serialization.Writers/Listxml.cs index 4564fa6b..e3d701a0 100644 --- a/SabreTools.Serialization.Writers/Listxml.cs +++ b/SabreTools.Serialization.Writers/Listxml.cs @@ -127,7 +127,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); - writer.WriteOptionalAttributeString("clock", obj.Clock); + writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString()); writer.WriteEndElement(); } diff --git a/SabreTools.Serialization.Writers/M1.cs b/SabreTools.Serialization.Writers/M1.cs index 065eefb6..9151b56c 100644 --- a/SabreTools.Serialization.Writers/M1.cs +++ b/SabreTools.Serialization.Writers/M1.cs @@ -125,7 +125,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); - writer.WriteOptionalAttributeString("clock", obj.Clock); + writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString()); writer.WriteEndElement(); } diff --git a/SabreTools.Serialization.Writers/Mess.cs b/SabreTools.Serialization.Writers/Mess.cs index ddaa7ad9..45397c60 100644 --- a/SabreTools.Serialization.Writers/Mess.cs +++ b/SabreTools.Serialization.Writers/Mess.cs @@ -125,7 +125,7 @@ namespace SabreTools.Serialization.Writers writer.WriteOptionalAttributeString("tag", obj.Tag); writer.WriteRequiredAttributeString("type", obj.Type?.AsStringValue()); writer.WriteOptionalAttributeString("soundonly", obj.SoundOnly.FromYesNo()); - writer.WriteOptionalAttributeString("clock", obj.Clock); + writer.WriteOptionalAttributeString("clock", obj.Clock?.ToString()); writer.WriteEndElement(); }