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();
}