Add "boot" element for OpenMSX, fix missing skip

This commit is contained in:
Matt Nadareski
2026-04-18 20:53:18 -04:00
parent 70bef7d6c9
commit 6c2098c5d2
10 changed files with 40 additions and 1 deletions

View File

@@ -9,6 +9,8 @@ namespace SabreTools.Data.Models.Metadata
{
#region Properties
public string? Boot { get; set; }
public Rom? MegaRom { get; set; }
public Original? Original { get; set; }
@@ -26,6 +28,7 @@ namespace SabreTools.Data.Models.Metadata
{
var obj = new Dump();
obj.Boot = Boot;
if (MegaRom is not null)
obj.MegaRom = MegaRom.Clone() as Rom;
if (Original is not null)
@@ -45,6 +48,11 @@ namespace SabreTools.Data.Models.Metadata
if (other is null)
return false;
if ((Boot is null) ^ (other.Boot is null))
return false;
else if (Boot is not null && !Boot.Equals(other.Boot, StringComparison.OrdinalIgnoreCase))
return false;
// Sub-items
if ((MegaRom is null) ^ (other.MegaRom is null))
return false;

View File

@@ -6,6 +6,9 @@ namespace SabreTools.Data.Models.OpenMSX
[XmlRoot("dump")]
public class Dump
{
[XmlElement("boot")]
public string? Boot { get; set; }
[XmlElement("original")]
public Original? Original { get; set; }

View File

@@ -428,6 +428,7 @@ namespace SabreTools.Metadata.DatFiles
{
MachineIndex = machineIndex,
SourceIndex = sourceIndex,
Comment = items[i].Boot,
};
var original = items[i].Original;

View File

@@ -816,7 +816,11 @@ namespace SabreTools.Metadata.DatFiles
Start = romItem.Start ?? romItem.Offset,
};
var dumpRom = new Data.Models.Metadata.Dump { Rom = rom };
var dumpRom = new Data.Models.Metadata.Dump
{
Boot = romItem.Comment,
Rom = rom,
};
if (original is not null)
{
var newOriginal = new Data.Models.Metadata.Original

View File

@@ -51,6 +51,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var dump_rom = new Data.Models.OpenMSX.Dump
{
Original = original,
Boot = "boot",
Rom = rom,
};
@@ -65,6 +66,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var dump_megarom = new Data.Models.OpenMSX.Dump
{
Original = original,
Boot = "boot",
Rom = megarom,
};
@@ -79,6 +81,7 @@ namespace SabreTools.Serialization.CrossModel.Test
var dump_sccpluscart = new Data.Models.OpenMSX.Dump
{
Original = original,
Boot = "boot",
Rom = sccpluscart,
};
@@ -127,6 +130,8 @@ namespace SabreTools.Serialization.CrossModel.Test
private static void Validate(Data.Models.OpenMSX.Dump? dump)
{
Assert.NotNull(dump);
Assert.Equal("boot", dump.Boot);
Validate(dump.Original);
Validate(dump.Rom);
}

View File

@@ -66,6 +66,8 @@ namespace SabreTools.Serialization.CrossModel
if (original is not null)
dump.Original = ConvertFromInternalModel(original);
dump.Boot = item.Boot;
var rom = item.Rom;
if (rom is not null)
dump.Rom = ConvertRomFromInternalModel(rom);

View File

@@ -65,6 +65,8 @@ namespace SabreTools.Serialization.CrossModel
if (item.Original is not null)
dump.Original = ConvertToInternalModel(item.Original);
dump.Boot = item.Boot;
if (item.Rom is not null)
{
switch (item.Rom)

View File

@@ -117,6 +117,7 @@ namespace SabreTools.Serialization.Readers.Test
var dump_rom = new Data.Models.OpenMSX.Dump
{
Original = original,
Boot = "boot",
Rom = rom,
};
@@ -131,6 +132,7 @@ namespace SabreTools.Serialization.Readers.Test
var dump_megarom = new Data.Models.OpenMSX.Dump
{
Original = original,
Boot = "boot",
Rom = megarom,
};
@@ -145,6 +147,7 @@ namespace SabreTools.Serialization.Readers.Test
var dump_sccpluscart = new Data.Models.OpenMSX.Dump
{
Original = original,
Boot = "boot",
Rom = sccpluscart,
};
@@ -193,6 +196,8 @@ namespace SabreTools.Serialization.Readers.Test
private static void Validate(Data.Models.OpenMSX.Dump? dump)
{
Assert.NotNull(dump);
Assert.Equal("boot", dump.Boot);
Validate(dump.Original);
Validate(dump.Rom);
}

View File

@@ -136,6 +136,12 @@ namespace SabreTools.Serialization.Readers
switch (reader.Name)
{
case "boot":
if (obj.Boot is not null && Debug)
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
obj.Boot = reader.ReadElementContentAsString();
break;
case "original":
if (obj.Original is not null && Debug)
Console.WriteLine($"'{reader.Name}' element already found, overwriting");
@@ -154,6 +160,7 @@ namespace SabreTools.Serialization.Readers
default:
if (Debug) Console.Error.WriteLine($"Element '{reader.Name}' is not recognized");
reader.Skip();
break;
}
}

View File

@@ -100,6 +100,8 @@ namespace SabreTools.Serialization.Writers
if (obj.Original is not null)
WriteOriginal(obj.Original, writer);
writer.WriteOptionalElementString("boot", obj.Boot);
if (obj.Rom is not null)
WriteRomBase(obj.Rom, writer);