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();
|
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),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user