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>2020-11-29 14:51:29 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-11-29 14:51:29 +0300
commit93445c376eaf4bebf3e6f36bbe35d6337c17c76d (patch)
treee47c7c3364af5c9cfc891f5bb4df69bb75616876
parent08cc02895c9b4c6ee73947ce1f5a4c3dedc9713b (diff)
Refactoring
-rw-r--r--FdsDiskFile.cs46
-rw-r--r--FdsDiskSide.cs14
-rw-r--r--FdsFile.cs68
-rw-r--r--FdsGame.cs68
-rw-r--r--NesFile.cs5
5 files changed, 103 insertions, 98 deletions
diff --git a/FdsDiskFile.cs b/FdsDiskFile.cs
new file mode 100644
index 0000000..3607d83
--- /dev/null
+++ b/FdsDiskFile.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace com.clusterrr.Famicom.Containers
+{
+ public class FdsDiskFile
+ {
+ private FdsBlockFileHeader headerBlock;
+ private FdsBlockFileData dataBlock;
+
+ public byte FileNumber { get => headerBlock.FileNumber; set => headerBlock.FileNumber = value; }
+ public byte FileIndicateCode { get => headerBlock.FileIndicateCode; set => headerBlock.FileIndicateCode = value; }
+ public string FileName { get => headerBlock.FileName; set => headerBlock.FileName = value; }
+ public ushort FileAddress { get => headerBlock.FileAddress; set => headerBlock.FileAddress = value; }
+ public ushort FileSize { get => (ushort)dataBlock.Data.Count(); }
+ public FdsBlockFileHeader.Kind FileKind { get => headerBlock.FileKind; set => headerBlock.FileKind = value; }
+ public IEnumerable<byte> Data
+ {
+ get => dataBlock.Data;
+ set
+ {
+ dataBlock.Data = value;
+ headerBlock.FileSize = (ushort)dataBlock.Data.Count();
+ }
+ }
+
+ public FdsDiskFile(FdsBlockFileHeader headerBlock, FdsBlockFileData dataBlock)
+ {
+ this.headerBlock = headerBlock;
+ this.dataBlock = dataBlock;
+ headerBlock.FileSize = (ushort)dataBlock.Data.Count();
+ }
+
+ public FdsDiskFile()
+ {
+ this.headerBlock = new FdsBlockFileHeader();
+ this.dataBlock = new FdsBlockFileData();
+ headerBlock.FileSize = (ushort)dataBlock.Data.Count();
+ }
+
+ public byte[] ToBytes() => Enumerable.Concat(headerBlock.ToBytes(), dataBlock.ToBytes()).ToArray();
+ }
+}
diff --git a/FdsDiskSide.cs b/FdsDiskSide.cs
index 9e9dca1..11f16d3 100644
--- a/FdsDiskSide.cs
+++ b/FdsDiskSide.cs
@@ -81,21 +81,21 @@ namespace com.clusterrr.Famicom.Containers
/// </summary>
public byte FileAmount { get => fileAmountBlock.FileAmount; set => fileAmountBlock.FileAmount = value; }
- IList<FdsFile> files;
+ IList<FdsDiskFile> files;
/// <summary>
/// Files on disk
/// </summary>
- public IList<FdsFile> Files { get => files; }
+ public IList<FdsDiskFile> Files { get => files; }
public FdsDiskSide()
{
diskInfoBlock = new FdsBlockDiskInfo();
fileAmountBlock = new FdsBlockFileAmount();
- files = new List<FdsFile>();
+ files = new List<FdsDiskFile>();
}
- public FdsDiskSide(FdsBlockDiskInfo diskInfoBlock, FdsBlockFileAmount fileAmountBlock, IEnumerable<FdsFile> files)
+ public FdsDiskSide(FdsBlockDiskInfo diskInfoBlock, FdsBlockFileAmount fileAmountBlock, IEnumerable<FdsDiskFile> files)
{
this.diskInfoBlock = diskInfoBlock;
this.fileAmountBlock = fileAmountBlock;
@@ -108,11 +108,11 @@ namespace com.clusterrr.Famicom.Containers
{
this.diskInfoBlock = (FdsBlockDiskInfo)blocks.First();
this.fileAmountBlock = (FdsBlockFileAmount)blocks.Skip(1).First();
- files = new List<FdsFile>();
+ files = new List<FdsDiskFile>();
var fileBlocks = blocks.Skip(2).ToArray();
for (int i = 0; i < fileBlocks.Length / 2; i++)
{
- files.Add(new FdsFile((FdsBlockFileHeader)fileBlocks[i * 2], (FdsBlockFileData)fileBlocks[i * 2 + 1]));
+ files.Add(new FdsDiskFile((FdsBlockFileHeader)fileBlocks[i * 2], (FdsBlockFileData)fileBlocks[i * 2 + 1]));
}
}
@@ -133,7 +133,7 @@ namespace com.clusterrr.Famicom.Containers
if (!fileDataBlock.IsValid)
break;
pos += fileHeaderBlock.FileSize + 1;
- files.Add(new FdsFile(fileHeaderBlock, fileDataBlock));
+ files.Add(new FdsDiskFile(fileHeaderBlock, fileDataBlock));
}
}
diff --git a/FdsFile.cs b/FdsFile.cs
index 127e31e..01e3a68 100644
--- a/FdsFile.cs
+++ b/FdsFile.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
@@ -8,39 +9,60 @@ namespace com.clusterrr.Famicom.Containers
{
public class FdsFile
{
- private FdsBlockFileHeader headerBlock;
- private FdsBlockFileData dataBlock;
-
- public byte FileNumber { get => headerBlock.FileNumber; set => headerBlock.FileNumber = value; }
- public byte FileIndicateCode { get => headerBlock.FileIndicateCode; set => headerBlock.FileIndicateCode = value; }
- public string FileName { get => headerBlock.FileName; set => headerBlock.FileName = value; }
- public ushort FileAddress { get => headerBlock.FileAddress; set => headerBlock.FileAddress = value; }
- public ushort FileSize { get => (ushort)dataBlock.Data.Count(); }
- public FdsBlockFileHeader.Kind FileKind { get => headerBlock.FileKind; set => headerBlock.FileKind = value; }
- public IEnumerable<byte> Data
+ IList<FdsDiskSide> sides;
+ /// <summary>
+ /// Disk Side Images
+ /// </summary>
+ public IList<FdsDiskSide> Sides { get => sides; set => sides = value; }
+
+ public FdsFile()
+ {
+ sides = new List<FdsDiskSide>();
+ }
+
+ public FdsFile(string filename) : this(File.ReadAllBytes(filename))
+ {
+ }
+
+ public FdsFile(byte[] data) : this()
{
- get => dataBlock.Data;
- set
+ if (data[0] == (byte)'F' && data[1] == (byte)'D' && data[2] == (byte)'S')
+ data = data.Skip(16).ToArray(); // skip header
+ for (int i = 0; i < data.Length; i += 65500)
{
- dataBlock.Data = value;
- headerBlock.FileSize = (ushort)dataBlock.Data.Count();
+ var sideData = data.Skip(i).Take(66500).ToArray();
+ sides.Add(FdsDiskSide.FromBytes(sideData));
}
}
- public FdsFile(FdsBlockFileHeader headerBlock, FdsBlockFileData dataBlock)
+ public FdsFile(IEnumerable<FdsDiskSide> sides)
{
- this.headerBlock = headerBlock;
- this.dataBlock = dataBlock;
- headerBlock.FileSize = (ushort)dataBlock.Data.Count();
+ this.sides = new List<FdsDiskSide>(sides);
}
- public FdsFile()
+ public static FdsFile FromBytes(byte[] data)
+ {
+ return new FdsFile(data);
+ }
+
+ public byte[] ToBytes(bool useHeader = false)
{
- this.headerBlock = new FdsBlockFileHeader();
- this.dataBlock = new FdsBlockFileData();
- headerBlock.FileSize = (ushort)dataBlock.Data.Count();
+ var data = sides.SelectMany(s => s.ToBytes());
+ if (useHeader)
+ {
+ var header = new byte[16];
+ header[0] = (byte)'F';
+ header[1] = (byte)'D';
+ header[2] = (byte)'S';
+ header[3] = (byte)sides.Count();
+ data = Enumerable.Concat(header, data);
+ }
+ return data.ToArray();
}
- public byte[] ToBytes() => Enumerable.Concat(headerBlock.ToBytes(), dataBlock.ToBytes()).ToArray();
+ public void Save(string filename, bool useHeader = false)
+ {
+ File.WriteAllBytes(filename, ToBytes(useHeader));
+ }
}
}
diff --git a/FdsGame.cs b/FdsGame.cs
deleted file mode 100644
index 3396494..0000000
--- a/FdsGame.cs
+++ /dev/null
@@ -1,68 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace com.clusterrr.Famicom.Containers
-{
- public class FdsGame
- {
- IList<FdsDiskSide> sides;
- /// <summary>
- /// Disk Side Images
- /// </summary>
- public IList<FdsDiskSide> Sides { get => sides; set => sides = value; }
-
- public FdsGame()
- {
- sides = new List<FdsDiskSide>();
- }
-
- public FdsGame(string filename) : this(File.ReadAllBytes(filename))
- {
- }
-
- public FdsGame(byte[] data) : this()
- {
- if (data[0] == (byte)'F' && data[1] == (byte)'D' && data[2] == (byte)'S')
- data = data.Skip(16).ToArray(); // skip header
- for (int i = 0; i < data.Length; i += 65500)
- {
- var sideData = data.Skip(i).Take(66500).ToArray();
- sides.Add(FdsDiskSide.FromBytes(sideData));
- }
- }
-
- public FdsGame(IEnumerable<FdsDiskSide> sides)
- {
- this.sides = new List<FdsDiskSide>(sides);
- }
-
- public static FdsGame FromBytes(byte[] data)
- {
- return new FdsGame(data);
- }
-
- public byte[] ToBytes(bool useHeader = false)
- {
- var data = sides.SelectMany(s => s.ToBytes());
- if (useHeader)
- {
- var header = new byte[16];
- header[0] = (byte)'F';
- header[1] = (byte)'D';
- header[2] = (byte)'S';
- header[3] = (byte)sides.Count();
- data = Enumerable.Concat(header, data);
- }
- return data.ToArray();
- }
-
- public void Save(string filename, bool useHeader = false)
- {
- File.WriteAllBytes(filename, ToBytes(useHeader));
- }
- }
-}
diff --git a/NesFile.cs b/NesFile.cs
index 2620995..2a9a4dc 100644
--- a/NesFile.cs
+++ b/NesFile.cs
@@ -683,6 +683,11 @@ namespace com.clusterrr.Famicom.Containers
{
}
+ public static NesFile FromBytes(byte[] data)
+ {
+ return new NesFile(data);
+ }
+
/// <summary>
/// Returns iNES data (header + PRG + CHR)
/// </summary>