mirror of
https://github.com/claunia/SabreTools.git
synced 2025-12-16 19:14:27 +00:00
Convert OpenMSX writer to serializer, fix bugs
This commit is contained in:
@@ -1064,20 +1064,21 @@ namespace SabreTools.DatFiles
|
||||
|
||||
var item = new DatItems.Formats.Rom();
|
||||
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.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.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 });
|
||||
|
||||
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
|
||||
{
|
||||
Value = original.Value.AsYesNo(),
|
||||
Content = original.Content,
|
||||
Value = original.ReadBool(Models.Metadata.Original.ValueKey),
|
||||
Content = original.ReadString(Models.Metadata.Original.ContentKey),
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using SabreTools.Core;
|
||||
using SabreTools.Core.Tools;
|
||||
|
||||
namespace SabreTools.DatFiles
|
||||
@@ -557,6 +558,94 @@ namespace SabreTools.DatFiles
|
||||
{
|
||||
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 DataArea inversion
|
||||
|
||||
|
||||
@@ -50,8 +50,12 @@ namespace SabreTools.DatFiles.Formats
|
||||
logger.User($"Writing to '{outfile}'...");
|
||||
|
||||
// TODO: Write out comment prefix somehow
|
||||
var softwaredb = CreateSoftwareDb(ignoreblanks);
|
||||
if (!(new Serialization.Files.OpenMSX().SerializeToFileWithDocType(softwaredb, outfile)))
|
||||
//var softwaredb = CreateSoftwareDb(ignoreblanks);
|
||||
|
||||
// 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.");
|
||||
return false;
|
||||
@@ -166,7 +170,7 @@ namespace SabreTools.DatFiles.Formats
|
||||
_ => 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.Hash = item.GetStringFieldValue(Models.Metadata.Rom.SHA1Key);
|
||||
rom.Remark = item.GetStringFieldValue(Models.Metadata.Rom.RemarkKey);
|
||||
|
||||
Reference in New Issue
Block a user