Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/ClusterM/nes-containers.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2022-11-04 10:53:16 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2022-11-04 10:53:24 +0300
commitb63b7543cd598bb2f8802a3df5484b988748b611 (patch)
treeafa127f277954c7f9e4e5ce3d34cb00c4ca82745
parentace1a80681c19d0a76e4af038db84574eb554983 (diff)
Refactoring, comments
-rw-r--r--FdsFile.cs23
-rw-r--r--NesFile.cs44
-rw-r--r--NesHeaderFixer.cs14
-rw-r--r--UnifFile.cs33
4 files changed, 68 insertions, 46 deletions
diff --git a/FdsFile.cs b/FdsFile.cs
index 2c798c2..ff8a48f 100644
--- a/FdsFile.cs
+++ b/FdsFile.cs
@@ -59,14 +59,18 @@ namespace com.clusterrr.Famicom.Containers
/// Create FdsFile object from raw .fds file contents
/// </summary>
/// <param name="data"></param>
- /// <returns></returns>
- public static FdsFile FromBytes(byte[] data)
- {
- return new FdsFile(data);
- }
+ /// <returns>FdsFile object</returns>
+ public static FdsFile FromBytes(byte[] data) =>new FdsFile(data);
+
+ /// <summary>
+ /// Create FileFile object from the specified .nes file
+ /// </summary>
+ /// <param name="filename">Path to the .fds file</param>
+ /// <returns>FdsFile object</returns>
+ public static FdsFile FromFile(string filename) => new FdsFile(filename);
/// <summary>
- /// Return FDS file contents
+ /// Returns .fds file contents
/// </summary>
/// <returns>FDS file contents</returns>
public byte[] ToBytes(bool useHeader = false)
@@ -86,13 +90,10 @@ namespace com.clusterrr.Famicom.Containers
}
/// <summary>
- /// Save to .fds file
+ /// Save as .fds file
/// </summary>
/// <param name="filename">Target filename</param>
/// <param name="useHeader">Option to add .fds file header (ignored by most emulators)</param>
- public void Save(string filename, bool useHeader = false)
- {
- File.WriteAllBytes(filename, ToBytes(useHeader));
- }
+ public void Save(string filename, bool useHeader = false) => File.WriteAllBytes(filename, ToBytes(useHeader));
}
}
diff --git a/NesFile.cs b/NesFile.cs
index 4c81847..7ea1ad2 100644
--- a/NesFile.cs
+++ b/NesFile.cs
@@ -582,7 +582,7 @@ namespace com.clusterrr.Famicom.Containers
}
/// <summary>
- /// Create NesFile object from raw .nes file data
+ /// Create NesFile object from raw .nes file contents
/// </summary>
/// <param name="data">Raw .nes file data</param>
public NesFile(byte[] data)
@@ -698,15 +698,20 @@ namespace com.clusterrr.Famicom.Containers
/// Create NesFile object from raw .nes file contents
/// </summary>
/// <param name="data">Raw ROM data</param>
- public static NesFile FromBytes(byte[] data)
- {
- return new NesFile(data);
- }
+ /// <returns>NesFile object</returns>
+ public static NesFile FromBytes(byte[] data) => new NesFile(data);
/// <summary>
- /// Return iNES file contents (header + PRG + CHR)
+ /// Create NesFile object from the specified .nes file
/// </summary>
- /// <returns>iNES file contents</returns>
+ /// <param name="filename">Path to the .nes file</param>
+ /// <returns>NesFile object</returns>
+ public static NesFile FromFile(string filename) => new NesFile(filename);
+
+ /// <summary>
+ /// Returns .nes file contents (header + PRG + CHR)
+ /// </summary>
+ /// <returns>.nes file contents</returns>
public byte[] ToBytes()
{
var data = new List<byte>();
@@ -735,6 +740,16 @@ namespace com.clusterrr.Famicom.Containers
if (length8k > 0xFF) throw new ArgumentOutOfRangeException("CHR size is too big for iNES, use NES 2.0 instead");
header[5] = (byte)Math.Ceiling((double)chr.Length / 0x2000);
chrSizePadded = header[5] * 0x2000UL;
+ switch (Mirroring)
+ {
+ case MirroringType.Unknown:
+ case MirroringType.Horizontal:
+ case MirroringType.Vertical:
+ case MirroringType.FourScreenVram:
+ break;
+ default:
+ throw new InvalidDataException($"{Mirroring} mirroring is not supported by iNES");
+ }
// Hard-wired nametable mirroring type
if (Mirroring == MirroringType.Vertical)
header[6] |= 1;
@@ -867,6 +882,12 @@ namespace com.clusterrr.Famicom.Containers
return data.ToArray();
}
+ /// <summary>
+ /// Save as .nes file
+ /// </summary>
+ /// <param name="filename">Target filename</param>
+ public void Save(string filename) => File.WriteAllBytes(filename, ToBytes());
+
private static ulong ExponentToSize(byte exponent, byte multiplier)
=> (1UL << exponent) * (ulong)(multiplier * 2 + 1);
@@ -921,15 +942,6 @@ namespace com.clusterrr.Famicom.Containers
}
/// <summary>
- /// Save iNES file
- /// </summary>
- /// <param name="fileName">Target filename</param>
- public void Save(string fileName)
- {
- File.WriteAllBytes(fileName, ToBytes());
- }
-
- /// <summary>
/// Calculate MD5 checksum of ROM (CHR+PRG without header)
/// </summary>
public byte[] CalculateMD5()
diff --git a/NesHeaderFixer.cs b/NesHeaderFixer.cs
index 1f428b1..3d7ce8c 100644
--- a/NesHeaderFixer.cs
+++ b/NesHeaderFixer.cs
@@ -59,26 +59,26 @@ namespace com.clusterrr.Famicom.Containers.HeaderFixer
}
if (mirroring >= 0)
{
- if (mirroring == 8 && nes.Mirroring == NesFile.MirroringType.FourScreenVram)
+ if (mirroring == 8 && nes.Mirroring == MirroringType.FourScreenVram)
{
// no four-screen
- nes.Mirroring = NesFile.MirroringType.Horizontal;
+ nes.Mirroring = MirroringType.Horizontal;
fixType |= NesFixType.Mirroring;
}
- NesFile.MirroringType needMirroring = NesFile.MirroringType.Unknown;
+ MirroringType needMirroring = MirroringType.Unknown;
switch (mirroring)
{
case 0:
- needMirroring = NesFile.MirroringType.Horizontal;
+ needMirroring = MirroringType.Horizontal;
break;
case 1:
- needMirroring = NesFile.MirroringType.Vertical;
+ needMirroring = MirroringType.Vertical;
break;
case 2:
- needMirroring = NesFile.MirroringType.FourScreenVram;
+ needMirroring = MirroringType.FourScreenVram;
break;
}
- if (needMirroring != NesFile.MirroringType.Unknown && needMirroring != nes.Mirroring)
+ if (needMirroring != MirroringType.Unknown && needMirroring != nes.Mirroring)
{
nes.Mirroring = needMirroring;
fixType |= NesFixType.Mirroring;
diff --git a/UnifFile.cs b/UnifFile.cs
index 56be6be..f098468 100644
--- a/UnifFile.cs
+++ b/UnifFile.cs
@@ -63,7 +63,7 @@ namespace com.clusterrr.Famicom.Containers
}
/// <summary>
- /// Create UnifFile object from raw data
+ /// Create UnifFile object from raw .unf file contents
/// </summary>
/// <param name="data">Raw UNIF data</param>
public UnifFile(byte[] data)
@@ -90,7 +90,7 @@ namespace com.clusterrr.Famicom.Containers
/// <summary>
/// Create UnifFile object from specified file
/// </summary>
- /// <param name="fileName"></param>
+ /// <param name="fileName">Path to the .unf file</param>
public UnifFile(string fileName) : this(File.ReadAllBytes(fileName))
{
}
@@ -99,17 +99,21 @@ namespace com.clusterrr.Famicom.Containers
/// Create UnifFile object from raw .unf file contents
/// </summary>
/// <param name="data"></param>
- /// <returns></returns>
- public static UnifFile FromBytes(byte[] data)
- {
- return new UnifFile(data);
- }
+ /// <returns>UnifFile object</returns>
+ public static UnifFile FromBytes(byte[] data) => new UnifFile(data);
/// <summary>
- /// Save UNIF file
+ /// Create UnifFile object from specified file
/// </summary>
- /// <param name="fileName">Target filename</param>
- public void Save(string fileName)
+ /// <param name="filename">Path to the .unf file</param>
+ /// <returns>UnifFile object</returns>
+ public static UnifFile FromFile(string filename) => new UnifFile(filename);
+
+ /// <summary>
+ /// Returns .unf file contents
+ /// </summary>
+ /// <returns></returns>
+ public byte[] ToBytes()
{
var data = new List<byte>();
var header = new byte[32];
@@ -130,11 +134,16 @@ namespace com.clusterrr.Famicom.Containers
data.Add((byte)((len >> 24) & 0xFF));
data.AddRange(fields[name]);
}
-
- File.WriteAllBytes(fileName, data.ToArray());
+ return data.ToArray();
}
/// <summary>
+ /// Save as .unf file
+ /// </summary>
+ /// <param name="filename">Target filename</param>
+ public void Save(string filename) => File.WriteAllBytes(filename, ToBytes());
+
+ /// <summary>
/// Convert string to null-terminated UTF string
/// </summary>
/// <param name="text">Input text</param>