mirror of
https://github.com/aaru-dps/Aaru.git
synced 2025-12-16 19:24:25 +00:00
[Aaru.Filesystems] Reformat and cleanup.
This commit is contained in:
@@ -35,84 +35,107 @@ namespace Aaru.Filesystems;
|
||||
public sealed partial class NintendoPlugin
|
||||
{
|
||||
static string DiscTypeToString(string discType) => discType switch
|
||||
{
|
||||
"C" => Localization.Commodore_64_Virtual_Console,
|
||||
"D" => Localization.Demo,
|
||||
"E" => Localization.Neo_Geo_Virtual_Console,
|
||||
"F" => Localization.NES_Virtual_Console,
|
||||
"G" => Localization.Gamecube,
|
||||
"H" => Localization.Wii_channel,
|
||||
"J" => Localization.Super_Nintendo_Virtual_Console,
|
||||
"L" => Localization.Master_System_Virtual_Console,
|
||||
"M" => Localization.Megadrive_Virtual_Console,
|
||||
"N" => Localization.Nintendo_64_Virtual_Console,
|
||||
"P" => Localization.Promotional_or_TurboGrafx_Virtual_Console,
|
||||
"Q" => Localization.TurboGrafx_CD_Virtual_Console,
|
||||
"R" => Localization.Wii,
|
||||
"S" => Localization.Wii,
|
||||
"U" => Localization.Utility,
|
||||
"W" => Localization.WiiWare,
|
||||
"X" => Localization.MSX_Virtual_Console_or_WiiWare_demo,
|
||||
"0" => Localization.Diagnostic,
|
||||
"1" => Localization.Diagnostic,
|
||||
"4" => Localization.Wii_Backup,
|
||||
"_" => Localization.WiiFit,
|
||||
_ => string.Format(Localization.unknown_type_0, discType)
|
||||
};
|
||||
{
|
||||
"C" => Localization.Commodore_64_Virtual_Console,
|
||||
"D" => Localization.Demo,
|
||||
"E" => Localization.Neo_Geo_Virtual_Console,
|
||||
"F" => Localization.NES_Virtual_Console,
|
||||
"G" => Localization.Gamecube,
|
||||
"H" => Localization.Wii_channel,
|
||||
"J" => Localization.Super_Nintendo_Virtual_Console,
|
||||
"L" => Localization.Master_System_Virtual_Console,
|
||||
"M" => Localization.Megadrive_Virtual_Console,
|
||||
"N" => Localization.Nintendo_64_Virtual_Console,
|
||||
"P" => Localization.
|
||||
Promotional_or_TurboGrafx_Virtual_Console,
|
||||
"Q" => Localization.TurboGrafx_CD_Virtual_Console,
|
||||
"R" => Localization.Wii,
|
||||
"S" => Localization.Wii,
|
||||
"U" => Localization.Utility,
|
||||
"W" => Localization.WiiWare,
|
||||
"X" => Localization.MSX_Virtual_Console_or_WiiWare_demo,
|
||||
"0" => Localization.Diagnostic,
|
||||
"1" => Localization.Diagnostic,
|
||||
"4" => Localization.Wii_Backup,
|
||||
"_" => Localization.WiiFit,
|
||||
_ => string.Format(Localization.unknown_type_0, discType)
|
||||
};
|
||||
|
||||
static string RegionCodeToString(string regionCode) => regionCode switch
|
||||
{
|
||||
"A" => Localization.NintendoPlugin_RegionCodeToString_any_region,
|
||||
"D" => Localization.NintendoPlugin_RegionCodeToString_Germany,
|
||||
"N" => Localization.NintendoPlugin_RegionCodeToString_USA,
|
||||
"E" => Localization.NintendoPlugin_RegionCodeToString_USA,
|
||||
"F" => Localization.NintendoPlugin_RegionCodeToString_France,
|
||||
"I" => Localization.NintendoPlugin_RegionCodeToString_Italy,
|
||||
"J" => Localization.NintendoPlugin_RegionCodeToString_Japan,
|
||||
"K" => Localization.NintendoPlugin_RegionCodeToString_Korea,
|
||||
"Q" => Localization.NintendoPlugin_RegionCodeToString_Korea,
|
||||
"L" => Localization.NintendoPlugin_RegionCodeToString_PAL,
|
||||
"M" => Localization.NintendoPlugin_RegionCodeToString_PAL,
|
||||
"P" => Localization.NintendoPlugin_RegionCodeToString_PAL,
|
||||
"R" => Localization.NintendoPlugin_RegionCodeToString_Russia,
|
||||
"S" => Localization.NintendoPlugin_RegionCodeToString_Spain,
|
||||
"T" => Localization.NintendoPlugin_RegionCodeToString_Taiwan,
|
||||
"U" => Localization.NintendoPlugin_RegionCodeToString_Australia,
|
||||
_ => string.Format(Localization.NintendoPlugin_RegionCodeToString_unknown_region_code_0, regionCode)
|
||||
};
|
||||
{
|
||||
"A" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_any_region,
|
||||
"D" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Germany,
|
||||
"N" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_USA,
|
||||
"E" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_USA,
|
||||
"F" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_France,
|
||||
"I" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Italy,
|
||||
"J" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Japan,
|
||||
"K" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Korea,
|
||||
"Q" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Korea,
|
||||
"L" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_PAL,
|
||||
"M" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_PAL,
|
||||
"P" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_PAL,
|
||||
"R" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Russia,
|
||||
"S" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Spain,
|
||||
"T" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Taiwan,
|
||||
"U" => Localization.
|
||||
NintendoPlugin_RegionCodeToString_Australia,
|
||||
_ => string.Format(
|
||||
Localization.
|
||||
NintendoPlugin_RegionCodeToString_unknown_region_code_0,
|
||||
regionCode)
|
||||
};
|
||||
|
||||
[SuppressMessage("ReSharper", "StringLiteralTypo")]
|
||||
static string PublisherCodeToString(string publisherCode) => publisherCode switch
|
||||
{
|
||||
"01" => "Nintendo",
|
||||
"08" => "CAPCOM",
|
||||
"41" => "Ubisoft",
|
||||
"4F" => "Eidos",
|
||||
"51" => "Acclaim",
|
||||
"52" => "Activision",
|
||||
"5D" => "Midway",
|
||||
"5G" => "Hudson",
|
||||
"64" => "LucasArts",
|
||||
"69" => "Electronic Arts",
|
||||
"6S" => "TDK Mediactive",
|
||||
"8P" => "SEGA",
|
||||
"A4" => "Mirage Studios",
|
||||
"AF" => "Namco",
|
||||
"B2" => "Bandai",
|
||||
"DA" => "Tomy",
|
||||
"EM" => "Konami",
|
||||
"70" => "Atari",
|
||||
"4Q" => "Disney Interactive",
|
||||
"GD" => "Square Enix",
|
||||
"7D" => "Sierra",
|
||||
_ => string.Format(Localization.Unknown_publisher_0, publisherCode)
|
||||
};
|
||||
{
|
||||
"01" => "Nintendo",
|
||||
"08" => "CAPCOM",
|
||||
"41" => "Ubisoft",
|
||||
"4F" => "Eidos",
|
||||
"51" => "Acclaim",
|
||||
"52" => "Activision",
|
||||
"5D" => "Midway",
|
||||
"5G" => "Hudson",
|
||||
"64" => "LucasArts",
|
||||
"69" => "Electronic Arts",
|
||||
"6S" => "TDK Mediactive",
|
||||
"8P" => "SEGA",
|
||||
"A4" => "Mirage Studios",
|
||||
"AF" => "Namco",
|
||||
"B2" => "Bandai",
|
||||
"DA" => "Tomy",
|
||||
"EM" => "Konami",
|
||||
"70" => "Atari",
|
||||
"4Q" => "Disney Interactive",
|
||||
"GD" => "Square Enix",
|
||||
"7D" => "Sierra",
|
||||
_ => string.Format(
|
||||
Localization.Unknown_publisher_0,
|
||||
publisherCode)
|
||||
};
|
||||
|
||||
static string PartitionTypeToString(uint type) => type switch
|
||||
{
|
||||
0 => Localization.data,
|
||||
1 => Localization.update,
|
||||
2 => Localization.channel,
|
||||
_ => string.Format(Localization.unknown_partition_type_0, type)
|
||||
};
|
||||
{
|
||||
0 => Localization.data,
|
||||
1 => Localization.update,
|
||||
2 => Localization.channel,
|
||||
_ => string.Format(
|
||||
Localization.unknown_partition_type_0, type)
|
||||
};
|
||||
}
|
||||
@@ -41,6 +41,8 @@ namespace Aaru.Filesystems;
|
||||
/// <summary>Implements detection of the filesystem used by Nintendo Gamecube and Wii discs</summary>
|
||||
public sealed partial class NintendoPlugin
|
||||
{
|
||||
#region IFilesystem Members
|
||||
|
||||
/// <inheritdoc />
|
||||
public bool Identify(IMediaImage imagePlugin, Partition partition)
|
||||
{
|
||||
@@ -55,8 +57,8 @@ public sealed partial class NintendoPlugin
|
||||
if(errno != ErrorNumber.NoError)
|
||||
return false;
|
||||
|
||||
uint magicGc = BigEndianBitConverter.ToUInt32(header, 0x1C);
|
||||
uint magicWii = BigEndianBitConverter.ToUInt32(header, 0x18);
|
||||
var magicGc = BigEndianBitConverter.ToUInt32(header, 0x1C);
|
||||
var magicWii = BigEndianBitConverter.ToUInt32(header, 0x18);
|
||||
|
||||
return magicGc == 0xC2339F3D || magicWii == 0x5D1C9EA3;
|
||||
}
|
||||
@@ -77,10 +79,10 @@ public sealed partial class NintendoPlugin
|
||||
if(errno != ErrorNumber.NoError)
|
||||
return;
|
||||
|
||||
bool wii = false;
|
||||
var wii = false;
|
||||
|
||||
uint magicGc = BigEndianBitConverter.ToUInt32(header, 0x1C);
|
||||
uint magicWii = BigEndianBitConverter.ToUInt32(header, 0x18);
|
||||
var magicGc = BigEndianBitConverter.ToUInt32(header, 0x1C);
|
||||
var magicWii = BigEndianBitConverter.ToUInt32(header, 0x18);
|
||||
|
||||
if(magicWii == 0x5D1C9EA3)
|
||||
wii = true;
|
||||
@@ -96,7 +98,7 @@ public sealed partial class NintendoPlugin
|
||||
fields.DiscVersion = header[7];
|
||||
fields.Streaming |= header[8] > 0;
|
||||
fields.StreamBufferSize = header[9];
|
||||
byte[] temp = new byte[64];
|
||||
var temp = new byte[64];
|
||||
Array.Copy(header, 0x20, temp, 0, 64);
|
||||
fields.Title = StringHandlers.CToString(temp, encoding);
|
||||
|
||||
@@ -122,45 +124,53 @@ public sealed partial class NintendoPlugin
|
||||
fields.ThirdPartitions = new NintendoPartition[BigEndianBitConverter.ToUInt32(header, 0x40010)];
|
||||
fields.FourthPartitions = new NintendoPartition[BigEndianBitConverter.ToUInt32(header, 0x40018)];
|
||||
|
||||
for(int i = 0; i < fields.FirstPartitions.Length; i++)
|
||||
if(offset1 + (i * 8) + 8 < 0x50000)
|
||||
for(var i = 0; i < fields.FirstPartitions.Length; i++)
|
||||
{
|
||||
if(offset1 + i * 8 + 8 < 0x50000)
|
||||
{
|
||||
fields.FirstPartitions[i].Offset =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset1 + (i * 8) + 0)) << 2;
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset1 + i * 8 + 0)) << 2;
|
||||
|
||||
fields.FirstPartitions[i].Type =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset1 + (i * 8) + 4));
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset1 + i * 8 + 4));
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.SecondPartitions.Length; i++)
|
||||
if(offset1 + (i * 8) + 8 < 0x50000)
|
||||
for(var i = 0; i < fields.SecondPartitions.Length; i++)
|
||||
{
|
||||
if(offset1 + i * 8 + 8 < 0x50000)
|
||||
{
|
||||
fields.FirstPartitions[i].Offset =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset2 + (i * 8) + 0)) << 2;
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset2 + i * 8 + 0)) << 2;
|
||||
|
||||
fields.FirstPartitions[i].Type =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset2 + (i * 8) + 4));
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset2 + i * 8 + 4));
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.ThirdPartitions.Length; i++)
|
||||
if(offset1 + (i * 8) + 8 < 0x50000)
|
||||
for(var i = 0; i < fields.ThirdPartitions.Length; i++)
|
||||
{
|
||||
if(offset1 + i * 8 + 8 < 0x50000)
|
||||
{
|
||||
fields.FirstPartitions[i].Offset =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset3 + (i * 8) + 0)) << 2;
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset3 + i * 8 + 0)) << 2;
|
||||
|
||||
fields.FirstPartitions[i].Type =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset3 + (i * 8) + 4));
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset3 + i * 8 + 4));
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.FourthPartitions.Length; i++)
|
||||
if(offset1 + (i * 8) + 8 < 0x50000)
|
||||
for(var i = 0; i < fields.FourthPartitions.Length; i++)
|
||||
{
|
||||
if(offset1 + i * 8 + 8 < 0x50000)
|
||||
{
|
||||
fields.FirstPartitions[i].Offset =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset4 + (i * 8) + 0)) << 2;
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset4 + i * 8 + 0)) << 2;
|
||||
|
||||
fields.FirstPartitions[i].Type =
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset4 + (i * 8) + 4));
|
||||
BigEndianBitConverter.ToUInt32(header, (int)(offset4 + i * 8 + 4));
|
||||
}
|
||||
}
|
||||
|
||||
fields.Region = header[0x4E000];
|
||||
fields.JapanAge = header[0x4E010];
|
||||
@@ -181,24 +191,24 @@ public sealed partial class NintendoPlugin
|
||||
fields.FourthPartitions = Array.Empty<NintendoPartition>();
|
||||
}
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discType = {0}", fields.DiscType);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "gameCode = {0}", fields.GameCode);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "regionCode = {0}", fields.RegionCode);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "publisherCode = {0}", fields.PublisherCode);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discID = {0}", fields.DiscId);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discNumber = {0}", fields.DiscNumber);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discVersion = {0}", fields.DiscVersion);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "streaming = {0}", fields.Streaming);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discType = {0}", fields.DiscType);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "gameCode = {0}", fields.GameCode);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "regionCode = {0}", fields.RegionCode);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "publisherCode = {0}", fields.PublisherCode);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discID = {0}", fields.DiscId);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discNumber = {0}", fields.DiscNumber);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "discVersion = {0}", fields.DiscVersion);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "streaming = {0}", fields.Streaming);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "streamBufferSize = {0}", fields.StreamBufferSize);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "title = \"{0}\"", fields.Title);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "debugOff = 0x{0:X8}", fields.DebugOff);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "debugAddr = 0x{0:X8}", fields.DebugAddr);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "dolOff = 0x{0:X8}", fields.DolOff);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "fstOff = 0x{0:X8}", fields.FstOff);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "fstSize = {0}", fields.FstSize);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "fstMax = {0}", fields.FstMax);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "title = \"{0}\"", fields.Title);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "debugOff = 0x{0:X8}", fields.DebugOff);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "debugAddr = 0x{0:X8}", fields.DebugAddr);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "dolOff = 0x{0:X8}", fields.DolOff);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "fstOff = 0x{0:X8}", fields.FstOff);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "fstSize = {0}", fields.FstSize);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "fstMax = {0}", fields.FstMax);
|
||||
|
||||
for(int i = 0; i < fields.FirstPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.FirstPartitions.Length; i++)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "firstPartitions[{1}].offset = {0}",
|
||||
fields.FirstPartitions[i].Offset, i);
|
||||
@@ -207,7 +217,7 @@ public sealed partial class NintendoPlugin
|
||||
fields.FirstPartitions[i].Type, i);
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.SecondPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.SecondPartitions.Length; i++)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "secondPartitions[{1}].offset = {0}",
|
||||
fields.SecondPartitions[i].Offset, i);
|
||||
@@ -216,7 +226,7 @@ public sealed partial class NintendoPlugin
|
||||
fields.SecondPartitions[i].Type, i);
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.ThirdPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.ThirdPartitions.Length; i++)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "thirdPartitions[{1}].offset = {0}",
|
||||
fields.ThirdPartitions[i].Offset, i);
|
||||
@@ -225,7 +235,7 @@ public sealed partial class NintendoPlugin
|
||||
fields.ThirdPartitions[i].Type, i);
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.FourthPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.FourthPartitions.Length; i++)
|
||||
{
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "fourthPartitions[{1}].offset = {0}",
|
||||
fields.FourthPartitions[i].Offset, i);
|
||||
@@ -234,23 +244,24 @@ public sealed partial class NintendoPlugin
|
||||
fields.FourthPartitions[i].Type, i);
|
||||
}
|
||||
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "region = {0}", fields.Region);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "japanAge = {0}", fields.JapanAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "usaAge = {0}", fields.UsaAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "germanAge = {0}", fields.GermanAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "pegiAge = {0}", fields.PegiAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "finlandAge = {0}", fields.FinlandAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "portugalAge = {0}", fields.PortugalAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "ukAge = {0}", fields.UkAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "region = {0}", fields.Region);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "japanAge = {0}", fields.JapanAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "usaAge = {0}", fields.UsaAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "germanAge = {0}", fields.GermanAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "pegiAge = {0}", fields.PegiAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "finlandAge = {0}", fields.FinlandAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "portugalAge = {0}", fields.PortugalAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "ukAge = {0}", fields.UkAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "australiaAge = {0}", fields.AustraliaAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "koreaAge = {0}", fields.KoreaAge);
|
||||
AaruConsole.DebugWriteLine(MODULE_NAME, "koreaAge = {0}", fields.KoreaAge);
|
||||
|
||||
sbInformation.AppendLine(Localization.Nintendo_optical_filesystem);
|
||||
|
||||
sbInformation.AppendLine(wii ? Localization.Nintendo_Wii_Optical_Disc
|
||||
sbInformation.AppendLine(wii
|
||||
? Localization.Nintendo_Wii_Optical_Disc
|
||||
: Localization.Nintendo_GameCube_Optical_Disc);
|
||||
|
||||
sbInformation.AppendFormat(Localization.Disc_ID_is_0, fields.DiscId).AppendLine();
|
||||
sbInformation.AppendFormat(Localization.Disc_ID_is_0, fields.DiscId).AppendLine();
|
||||
sbInformation.AppendFormat(Localization.Disc_is_a_0_disc, DiscTypeToString(fields.DiscType)).AppendLine();
|
||||
sbInformation.AppendFormat(Localization.Disc_region_is_0, RegionCodeToString(fields.RegionCode)).AppendLine();
|
||||
|
||||
@@ -258,39 +269,51 @@ public sealed partial class NintendoPlugin
|
||||
AppendLine();
|
||||
|
||||
if(fields.DiscNumber > 0)
|
||||
{
|
||||
sbInformation.AppendFormat(Localization.Disc_number_0_of_a_multi_disc_set, fields.DiscNumber + 1).
|
||||
AppendLine();
|
||||
}
|
||||
|
||||
if(fields.Streaming)
|
||||
sbInformation.AppendLine(Localization.Disc_is_prepared_for_audio_streaming);
|
||||
|
||||
if(fields.StreamBufferSize > 0)
|
||||
{
|
||||
sbInformation.AppendFormat(Localization.Audio_streaming_buffer_size_is_0_bytes, fields.StreamBufferSize).
|
||||
AppendLine();
|
||||
}
|
||||
|
||||
sbInformation.AppendFormat(Localization.Title_0, fields.Title).AppendLine();
|
||||
|
||||
if(wii)
|
||||
{
|
||||
for(int i = 0; i < fields.FirstPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.FirstPartitions.Length; i++)
|
||||
{
|
||||
sbInformation.AppendFormat(Localization.First_0_partition_starts_at_sector_1,
|
||||
PartitionTypeToString(fields.FirstPartitions[i].Type),
|
||||
fields.FirstPartitions[i].Offset / 2048).AppendLine();
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.SecondPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.SecondPartitions.Length; i++)
|
||||
{
|
||||
sbInformation.AppendFormat(Localization.Second_0_partition_starts_at_sector_1,
|
||||
PartitionTypeToString(fields.SecondPartitions[i].Type),
|
||||
fields.SecondPartitions[i].Offset / 2048).AppendLine();
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.ThirdPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.ThirdPartitions.Length; i++)
|
||||
{
|
||||
sbInformation.AppendFormat(Localization.Third_0_partition_starts_at_sector_1,
|
||||
PartitionTypeToString(fields.ThirdPartitions[i].Type),
|
||||
fields.ThirdPartitions[i].Offset / 2048).AppendLine();
|
||||
}
|
||||
|
||||
for(int i = 0; i < fields.FourthPartitions.Length; i++)
|
||||
for(var i = 0; i < fields.FourthPartitions.Length; i++)
|
||||
{
|
||||
sbInformation.AppendFormat(Localization.Fourth_0_partition_starts_at_sector_1,
|
||||
PartitionTypeToString(fields.FourthPartitions[i].Type),
|
||||
fields.FourthPartitions[i].Offset / 2048).AppendLine();
|
||||
}
|
||||
|
||||
// sbInformation.AppendFormat("Region byte is {0}", fields.region).AppendLine();
|
||||
if((fields.JapanAge & 0x80) != 0x80)
|
||||
@@ -321,8 +344,10 @@ public sealed partial class NintendoPlugin
|
||||
sbInformation.AppendFormat(Localization.Korea_age_rating_is_0, fields.KoreaAge).AppendLine();
|
||||
}
|
||||
else
|
||||
{
|
||||
sbInformation.AppendFormat(Localization.FST_starts_at_0_and_has_1_bytes, fields.FstOff, fields.FstSize).
|
||||
AppendLine();
|
||||
}
|
||||
|
||||
information = sbInformation.ToString();
|
||||
metadata.Bootable = true;
|
||||
@@ -332,4 +357,6 @@ public sealed partial class NintendoPlugin
|
||||
metadata.VolumeName = fields.Title;
|
||||
metadata.VolumeSerial = fields.DiscId;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -35,11 +35,18 @@ namespace Aaru.Filesystems;
|
||||
/// <summary>Implements detection of the filesystem used by Nintendo Gamecube and Wii discs</summary>
|
||||
public sealed partial class NintendoPlugin : IFilesystem
|
||||
{
|
||||
const string MODULE_NAME = "Nintendo plugin";
|
||||
|
||||
#region IFilesystem Members
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Name => Localization.NintendoPlugin_Name;
|
||||
|
||||
/// <inheritdoc />
|
||||
public Guid Id => new("4675fcb4-4418-4288-9e4a-33d6a4ac1126");
|
||||
|
||||
/// <inheritdoc />
|
||||
public string Author => Authors.NataliaPortillo;
|
||||
const string MODULE_NAME = "Nintendo plugin";
|
||||
|
||||
#endregion
|
||||
}
|
||||
@@ -32,6 +32,8 @@ namespace Aaru.Filesystems;
|
||||
/// <summary>Implements detection of the filesystem used by Nintendo Gamecube and Wii discs</summary>
|
||||
public sealed partial class NintendoPlugin
|
||||
{
|
||||
#region Nested type: NintendoFields
|
||||
|
||||
struct NintendoFields
|
||||
{
|
||||
public string DiscType;
|
||||
@@ -66,9 +68,15 @@ public sealed partial class NintendoPlugin
|
||||
public byte KoreaAge;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region Nested type: NintendoPartition
|
||||
|
||||
struct NintendoPartition
|
||||
{
|
||||
public uint Offset;
|
||||
public uint Type;
|
||||
}
|
||||
|
||||
#endregion
|
||||
}
|
||||
Reference in New Issue
Block a user