Convert OpenMSX writer to serializer, fix bugs

This commit is contained in:
Matt Nadareski
2024-03-12 01:02:36 -04:00
parent 71b997c7be
commit 6ec0c970cb
3 changed files with 103 additions and 9 deletions

View File

@@ -1064,20 +1064,21 @@ namespace SabreTools.DatFiles
var item = new DatItems.Formats.Rom(); var item = new DatItems.Formats.Rom();
item.SetName(name); item.SetName(name);
item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.ReadString(Models.Metadata.Rom.OffsetKey)); item.SetFieldValue<string?>(Models.Metadata.Rom.OffsetKey, rom.ReadString(Models.Metadata.Rom.StartKey));
item.SetFieldValue<string?>(Models.Metadata.Rom.OpenMSXMediaType, subType.AsStringValue()); item.SetFieldValue<string?>(Models.Metadata.Rom.OpenMSXMediaType, subType.AsStringValue());
item.SetFieldValue<string?>(Models.Metadata.Rom.OpenMSXType, rom.ReadString(Models.Metadata.Rom.OpenMSXType)); item.SetFieldValue<string?>(Models.Metadata.Rom.OpenMSXType, rom.ReadString(Models.Metadata.Rom.OpenMSXType) ?? rom.ReadString(Models.Metadata.Rom.TypeKey));
item.SetFieldValue<string?>(Models.Metadata.Rom.RemarkKey, rom.ReadString(Models.Metadata.Rom.RemarkKey)); item.SetFieldValue<string?>(Models.Metadata.Rom.RemarkKey, rom.ReadString(Models.Metadata.Rom.RemarkKey));
item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.ReadString(Models.Metadata.Rom.SHA1Key)); item.SetFieldValue<string?>(Models.Metadata.Rom.SHA1Key, rom.ReadString(Models.Metadata.Rom.SHA1Key));
item.SetFieldValue<string?>(Models.Metadata.Rom.StartKey, rom.ReadString(Models.Metadata.Rom.StartKey));
item.SetFieldValue<DatItems.Source?>(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename }); item.SetFieldValue<DatItems.Source?>(DatItems.DatItem.SourceKey, new DatItems.Source { Index = indexId, Name = filename });
if (dump.Read<Models.OpenMSX.Original>(Models.Metadata.Dump.OriginalKey) != null) if (dump.Read<Models.Metadata.Original>(Models.Metadata.Dump.OriginalKey) != null)
{ {
var original = dump.Read<Models.OpenMSX.Original>(Models.Metadata.Dump.OriginalKey)!; var original = dump.Read<Models.Metadata.Original>(Models.Metadata.Dump.OriginalKey)!;
item.SetFieldValue<DatItems.Formats.Original?>("ORIGINAL", new DatItems.Formats.Original item.SetFieldValue<DatItems.Formats.Original?>("ORIGINAL", new DatItems.Formats.Original
{ {
Value = original.Value.AsYesNo(), Value = original.ReadBool(Models.Metadata.Original.ValueKey),
Content = original.Content, Content = original.ReadString(Models.Metadata.Original.ContentKey),
}); });
} }

View File

@@ -1,5 +1,6 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using SabreTools.Core;
using SabreTools.Core.Tools; using SabreTools.Core.Tools;
namespace SabreTools.DatFiles namespace SabreTools.DatFiles
@@ -557,6 +558,94 @@ namespace SabreTools.DatFiles
{ {
var romItem = item.GetInternalClone(); var romItem = item.GetInternalClone();
// Create a Dump for every Rom that has a subtype
switch (romItem.ReadString(Models.Metadata.Rom.OpenMSXMediaType).AsEnumValue<OpenMSXSubType>())
{
case OpenMSXSubType.Rom:
var dumpRom = new Models.Metadata.Dump();
var rom = new Models.Metadata.Rom();
rom[Models.Metadata.Rom.NameKey] = romItem.ReadString(Models.Metadata.Rom.NameKey);
rom[Models.Metadata.Rom.OffsetKey] = romItem.ReadString(Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Models.Metadata.Rom.OffsetKey);
rom[Models.Metadata.Rom.OpenMSXType] = romItem.ReadString(Models.Metadata.Rom.OpenMSXType);
rom[Models.Metadata.Rom.RemarkKey] = romItem.ReadString(Models.Metadata.Rom.RemarkKey);
rom[Models.Metadata.Rom.SHA1Key] = romItem.ReadString(Models.Metadata.Rom.SHA1Key);
rom[Models.Metadata.Rom.StartKey] = romItem.ReadString(Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Models.Metadata.Rom.OffsetKey);
dumpRom[Models.Metadata.Dump.RomKey] = rom;
var romOriginal = romItem.Read<DatItems.Formats.Original>("ORIGINAL");
if (romOriginal != null)
{
var newOriginal = new Models.Metadata.Original
{
[Models.Metadata.Original.ValueKey] = romOriginal.Value.FromYesNo(),
[Models.Metadata.Original.ContentKey] = romOriginal.Content,
};
dumpRom[Models.Metadata.Dump.OriginalKey] = newOriginal;
}
EnsureMachineKey<Models.Metadata.Dump?>(machine, Models.Metadata.Machine.DumpKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DumpKey, dumpRom);
break;
case OpenMSXSubType.MegaRom:
var dumpMegaRom = new Models.Metadata.Dump();
var megaRom = new Models.Metadata.Rom();
megaRom[Models.Metadata.Rom.NameKey] = romItem.ReadString(Models.Metadata.Rom.NameKey);
megaRom[Models.Metadata.Rom.OffsetKey] = romItem.ReadString(Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Models.Metadata.Rom.OffsetKey);
megaRom[Models.Metadata.Rom.OpenMSXType] = romItem.ReadString(Models.Metadata.Rom.OpenMSXType);
megaRom[Models.Metadata.Rom.RemarkKey] = romItem.ReadString(Models.Metadata.Rom.RemarkKey);
megaRom[Models.Metadata.Rom.SHA1Key] = romItem.ReadString(Models.Metadata.Rom.SHA1Key);
megaRom[Models.Metadata.Rom.StartKey] = romItem.ReadString(Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Models.Metadata.Rom.OffsetKey);
dumpMegaRom[Models.Metadata.Dump.MegaRomKey] = megaRom;
var megaRomOriginal = romItem.Read<DatItems.Formats.Original>("ORIGINAL");
if (megaRomOriginal != null)
{
var newOriginal = new Models.Metadata.Original
{
[Models.Metadata.Original.ValueKey] = megaRomOriginal.Value.FromYesNo(),
[Models.Metadata.Original.ContentKey] = megaRomOriginal.Content,
};
dumpMegaRom[Models.Metadata.Dump.OriginalKey] = newOriginal;
}
EnsureMachineKey<Models.Metadata.Dump?>(machine, Models.Metadata.Machine.DumpKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DumpKey, dumpMegaRom);
break;
case OpenMSXSubType.SCCPlusCart:
var dumpSccPlusCart = new Models.Metadata.Dump();
var sccPlusCart = new Models.Metadata.Rom();
sccPlusCart[Models.Metadata.Rom.NameKey] = romItem.ReadString(Models.Metadata.Rom.NameKey);
sccPlusCart[Models.Metadata.Rom.OffsetKey] = romItem.ReadString(Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Models.Metadata.Rom.OffsetKey);
sccPlusCart[Models.Metadata.Rom.OpenMSXType] = romItem.ReadString(Models.Metadata.Rom.OpenMSXType);
sccPlusCart[Models.Metadata.Rom.RemarkKey] = romItem.ReadString(Models.Metadata.Rom.RemarkKey);
sccPlusCart[Models.Metadata.Rom.SHA1Key] = romItem.ReadString(Models.Metadata.Rom.SHA1Key);
sccPlusCart[Models.Metadata.Rom.StartKey] = romItem.ReadString(Models.Metadata.Rom.StartKey) ?? romItem.ReadString(Models.Metadata.Rom.OffsetKey);
dumpSccPlusCart[Models.Metadata.Dump.RomKey] = sccPlusCart;
var sccPlusCartOriginal = romItem.Read<DatItems.Formats.Original>("ORIGINAL");
if (sccPlusCartOriginal != null)
{
var newOriginal = new Models.Metadata.Original
{
[Models.Metadata.Original.ValueKey] = sccPlusCartOriginal.Value.FromYesNo(),
[Models.Metadata.Original.ContentKey] = sccPlusCartOriginal.Content,
};
dumpSccPlusCart[Models.Metadata.Dump.OriginalKey] = newOriginal;
}
EnsureMachineKey<Models.Metadata.Dump?>(machine, Models.Metadata.Machine.DumpKey);
AppendToMachineKey(machine, Models.Metadata.Machine.DumpKey, dumpSccPlusCart);
break;
}
// TODO: Handle DipSwitch in Part inversion // TODO: Handle DipSwitch in Part inversion
// TODO: Handle DipSwitch in DataArea inversion // TODO: Handle DipSwitch in DataArea inversion

View File

@@ -50,8 +50,12 @@ namespace SabreTools.DatFiles.Formats
logger.User($"Writing to '{outfile}'..."); logger.User($"Writing to '{outfile}'...");
// TODO: Write out comment prefix somehow // TODO: Write out comment prefix somehow
var softwaredb = CreateSoftwareDb(ignoreblanks); //var softwaredb = CreateSoftwareDb(ignoreblanks);
if (!(new Serialization.Files.OpenMSX().SerializeToFileWithDocType(softwaredb, outfile)))
// Serialize the input file
var metadata = ConvertMetadata(ignoreblanks);
var softwaredb = new Serialization.CrossModel.OpenMSX().Deserialize(metadata);
if (!(new Serialization.Files.OpenMSX().SerializeToFileWithDocType(softwaredb!, outfile)))
{ {
logger.Warning($"File '{outfile}' could not be written! See the log for more details."); logger.Warning($"File '{outfile}' could not be written! See the log for more details.");
return false; return false;
@@ -166,7 +170,7 @@ namespace SabreTools.DatFiles.Formats
_ => new Models.OpenMSX.Rom(), _ => new Models.OpenMSX.Rom(),
}; };
rom.Start = item.GetStringFieldValue(Models.Metadata.Rom.OffsetKey); rom.Start = item.GetStringFieldValue(Models.Metadata.Rom.StartKey);
rom.Type = item.GetStringFieldValue(Models.Metadata.Rom.OpenMSXType); rom.Type = item.GetStringFieldValue(Models.Metadata.Rom.OpenMSXType);
rom.Hash = item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key); rom.Hash = item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key);
rom.Remark = item.GetStringFieldValue(Models.Metadata.Rom.RemarkKey); rom.Remark = item.GetStringFieldValue(Models.Metadata.Rom.RemarkKey);