Split more things

This commit is contained in:
Matt Nadareski
2026-03-06 16:17:18 -05:00
parent ca264ce91e
commit 6e93aa65b6
6 changed files with 95 additions and 22 deletions

View File

@@ -464,6 +464,7 @@ namespace SabreTools.Data.Models.NES
/// <summary>
/// Extended Console Type
/// </summary>
/// <remarks>Actually only 4 bits (bits 0-3 of flag 13)</remarks>
public enum ExtendedConsoleType : byte
{
/// <summary>
@@ -601,7 +602,7 @@ namespace SabreTools.Data.Models.NES
/// <summary>
/// Vs. Hardware Type
/// </summary>
/// <remarks>Actually only 4 bits</remarks>
/// <remarks>Actually only 4 bits (bits 4-7 of flag 13)</remarks>
public enum VsHardwareType : byte
{
/// <summary>
@@ -643,7 +644,7 @@ namespace SabreTools.Data.Models.NES
/// <summary>
/// Vs. System Type
/// </summary>
/// <remarks>Actually only 4 bits</remarks>
/// <remarks>Actually only 4 bits (bits 0-3 of flag 13)</remarks>
public enum VsSystemType : byte
{
/// <summary>

View File

@@ -58,7 +58,7 @@ namespace SabreTools.Data.Models.NES
/// This byte is not part of the official specification, and relatively
/// few emulators honor it.
/// </remarks>
public byte ReservedBits23 { get; set; }
public byte Byte10ReservedBits23 { get; set; }
/// <summary>
/// PRG RAM ($6000-$7FFF) present
@@ -91,7 +91,7 @@ namespace SabreTools.Data.Models.NES
/// This byte is not part of the official specification, and relatively
/// few emulators honor it.
/// </remarks>
public byte ReservedBits67 { get; set; }
public byte Byte10ReservedBits67 { get; set; }
#endregion

View File

@@ -101,14 +101,66 @@ namespace SabreTools.Data.Models.NES
/// </summary>
public CPUPPUTiming CPUPPUTiming { get; set; }
#region Byte 13
#region Standard System and PlayChoice-10
/// <summary>
/// Vs. System Type and Extended Console Type
/// Reserved byte, unused
/// </summary>
/// <remarks>
/// When Byte 7 AND 3 =1: Vs. System Type
/// When Byte 7 AND 3 =3: Extended Console Type
/// Valid when <see cref="Header.ConsoleType"/> == <see cref="ConsoleType.StandardSystem"/>.
/// Valid when <see cref="Header.ConsoleType"/> == <see cref="ConsoleType.PlayChoice10"/>.
/// </remarks>
public byte ExtendedSystemType { get; set; }
public byte Reserved13 { get; set; }
#endregion
#region Vs. Unisystem
/// <summary>
/// Vs. System Type
/// </summary>
/// <remarks>
/// Byte 13, Bits 0-3
///
/// Valid when <see cref="Header.ConsoleType"/> == <see cref="ConsoleType.VSUnisystem"/>
/// </remarks>
public VsSystemType VsSystemType { get; set; }
/// <summary>
/// Vs. Hardware Type
/// </summary>
/// <remarks>
/// Byte 13, Bits 4-7
///
/// Valid when <see cref="Header.ConsoleType"/> == <see cref="ConsoleType.VSUnisystem"/>
/// </remarks>
public VsHardwareType VsHardwareType { get; set; }
#endregion
#region Extended Console Type
/// <summary>
/// Extended Console Type
/// </summary>
/// <remarks>
/// Byte 13, Bits 0-3
///
/// Valid when <see cref="Header.ConsoleType"/> == <see cref="ConsoleType.ExtendedConsoleType"/>
/// </remarks>
public ExtendedConsoleType ExtendedConsoleType { get; set; }
/// <summary>
/// Unknown reserved bits
/// </summary>
/// <remarks>Byte 13, Bits 4-7</remarks>
public byte Byte13ReservedBits47 { get; set; }
#endregion
#endregion
/// <summary>
/// Number of miscellaneous ROMs present

View File

@@ -147,7 +147,24 @@ namespace SabreTools.Serialization.Readers
obj.ChrNvramShiftCount = (byte)((byte11 >> 4) & 0x0F);
obj.CPUPPUTiming = (CPUPPUTiming)data.ReadByteValue();
obj.ExtendedSystemType = data.ReadByteValue();
// Byte 13
byte byte13 = data.ReadByteValue();
if (obj.ConsoleType == ConsoleType.VSUnisystem)
{
obj.VsSystemType = (VsSystemType)(byte13 & 0x0F);
obj.VsHardwareType = (VsHardwareType)((byte13 >> 4) & 0x0F);
}
else if (obj.ConsoleType == ConsoleType.ExtendedConsoleType)
{
obj.ExtendedConsoleType = (ExtendedConsoleType)(byte13 & 0x0F);
obj.Byte13ReservedBits47 = (byte)((byte13 >> 4) & 0x0F);
}
else
{
obj.Reserved13 = byte13;
}
obj.MiscellaneousROMs = data.ReadByteValue();
obj.DefaultExpansionDevice = (DefaultExpansionDevice)data.ReadByteValue();
@@ -181,10 +198,10 @@ namespace SabreTools.Serialization.Readers
// Byte 10
byte byte10 = data.ReadByteValue();
obj.TVSystemExtended = (TVSystemExtended)(byte10 & 0x03);
obj.ReservedBits23 = (byte)((byte10 >> 2) & 0x03);
obj.Byte10ReservedBits23 = (byte)((byte10 >> 2) & 0x03);
obj.PrgRamPresent = ((byte10 >> 4) & 0x01) == 0x01;
obj.HasBusConflicts = ((byte10 >> 5) & 0x01) == 0x01;
obj.ReservedBits67 = (byte)((byte10 >> 6) & 0x03);
obj.Byte10ReservedBits67 = (byte)((byte10 >> 6) & 0x03);
obj.Padding = data.ReadBytes(5);

View File

@@ -104,7 +104,7 @@ namespace SabreTools.Serialization.Wrappers
builder.AppendLine(tvSystemExtended, " TV System Extended");
// Bits 2-3
builder.AppendLine(header1.ReservedBits23, " Reserved bits 1-2");
builder.AppendLine(header1.Byte10ReservedBits23, " Reserved bits 1-2");
// Bit 4
string prgRamPresent = header1.PrgRamPresent ? "Present" : "Not present";
@@ -114,7 +114,7 @@ namespace SabreTools.Serialization.Wrappers
builder.AppendLine(header1.HasBusConflicts, " Has Bus Conflicts");
// Bits 6-7
builder.AppendLine(header1.ReservedBits67, " Reserved bits 6-7");
builder.AppendLine(header1.Byte10ReservedBits67, " Reserved bits 6-7");
#endregion
@@ -166,20 +166,23 @@ namespace SabreTools.Serialization.Wrappers
// Byte 13
if (header.ConsoleType == ConsoleType.ExtendedConsoleType)
{
ExtendedConsoleType extendedConsoleType = (ExtendedConsoleType)(header2.ExtendedSystemType & 0x0F);
string extendedConsoleTypeString = extendedConsoleType.FromExtendedConsoleType();
string extendedConsoleTypeString = header2.ExtendedConsoleType.FromExtendedConsoleType();
builder.AppendLine(extendedConsoleTypeString, " Extended console type");
builder.AppendLine(extendedConsoleTypeString, " Reserved bits");
}
else if (header.ConsoleType == ConsoleType.VSUnisystem)
{
VsSystemType vsSystemType = (VsSystemType)(header2.ExtendedSystemType & 0x0F);
string vsSystemTypeString = vsSystemType.FromVsSystemType();
string vsSystemTypeString = header2.VsSystemType.FromVsSystemType();
builder.AppendLine(vsSystemTypeString, " Vs. system type");
VsHardwareType vsHardwareType = (VsHardwareType)(header2.ExtendedSystemType >> 4);
string vsHardwareTypeString = vsHardwareType.FromVsHardwareType();
string vsHardwareTypeString = header2.VsHardwareType.FromVsHardwareType();
builder.AppendLine(vsHardwareTypeString, " Vs. hardware type");
}
else
{
builder.AppendLine(header2.Reserved13, " Reserved");
}
// Byte 14
builder.AppendLine(header2.MiscellaneousROMs, " Number of miscellaneous ROMs");

View File

@@ -281,7 +281,7 @@ namespace SabreTools.Serialization.Wrappers
if (ConsoleType != ConsoleType.ExtendedConsoleType)
return ExtendedConsoleType.RegularSystem;
return (ExtendedConsoleType)(header2.ExtendedSystemType & 0x0F);
return header2.ExtendedConsoleType;
}
}
@@ -347,7 +347,7 @@ namespace SabreTools.Serialization.Wrappers
if (ConsoleType != ConsoleType.VSUnisystem)
return VsHardwareType.VsUnisystem;
return (VsHardwareType)(header2.ExtendedSystemType >> 4);
return header2.VsHardwareType;
}
}
@@ -367,7 +367,7 @@ namespace SabreTools.Serialization.Wrappers
if (ConsoleType != ConsoleType.VSUnisystem)
return VsSystemType.AnyRP2C03RC2C03Variant;
return (VsSystemType)(header2.ExtendedSystemType & 0x0F);
return header2.VsSystemType;
}
}