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-30 17:33:25 +0300
committerAlexey 'Cluster' Avdyukhin <clusterrr@clusterrr.com>2020-11-30 17:33:25 +0300
commiteb10ea5213b4362d9cc859593a89adab05237765 (patch)
treefde607aad441c723b1b4c6ebb8df0017e0c1cc4e /FdsDiskSide.cs
parent93445c376eaf4bebf3e6f36bbe35d6337c17c76d (diff)
Much more FDS stuff
Diffstat (limited to 'FdsDiskSide.cs')
-rw-r--r--FdsDiskSide.cs40
1 files changed, 30 insertions, 10 deletions
diff --git a/FdsDiskSide.cs b/FdsDiskSide.cs
index 11f16d3..4d1af1f 100644
--- a/FdsDiskSide.cs
+++ b/FdsDiskSide.cs
@@ -9,12 +9,15 @@ namespace com.clusterrr.Famicom.Containers
public class FdsDiskSide
{
FdsBlockDiskInfo diskInfoBlock;
-
+ /// <summary>
+ /// Disk info block
+ /// </summary>
+ public FdsBlockDiskInfo DiskInfoBlock { get => diskInfoBlock; }
public string DiskVerification { get => diskInfoBlock.DiskVerification; }
/// <summary>
/// Manufacturer code. $00 = Unlicensed, $01 = Nintendo
/// </summary>
- public byte ManufacturerCode { get => diskInfoBlock.ManufacturerCode; set => diskInfoBlock.ManufacturerCode = value; }
+ public FdsBlockDiskInfo.Manufacturer ManufacturerCode { get => diskInfoBlock.ManufacturerCode; set => diskInfoBlock.ManufacturerCode = value; }
/// <summary>
/// 3-letter ASCII code per game (e.g. ZEL for The Legend of Zelda)
/// </summary>
@@ -125,15 +128,23 @@ namespace com.clusterrr.Famicom.Containers
pos += 2;
while (pos < data.Length)
{
- var fileHeaderBlock = FdsBlockFileHeader.FromBytes(data.Skip(pos).Take(16).ToArray());
- if (!fileHeaderBlock.IsValid)
- break;
- pos += 16;
- var fileDataBlock = FdsBlockFileData.FromBytes(data.Skip(pos).Take(fileHeaderBlock.FileSize + 1).ToArray());
- if (!fileDataBlock.IsValid)
+ try
+ {
+ var fileHeaderBlock = FdsBlockFileHeader.FromBytes(data.Skip(pos).Take(16).ToArray());
+ if (!fileHeaderBlock.IsValid)
+ break;
+ pos += 16;
+ var fileDataBlock = FdsBlockFileData.FromBytes(data.Skip(pos).Take(fileHeaderBlock.FileSize + 1).ToArray());
+ if (!fileDataBlock.IsValid)
+ break;
+ pos += fileHeaderBlock.FileSize + 1;
+ files.Add(new FdsDiskFile(fileHeaderBlock, fileDataBlock));
+ }
+ catch
+ {
+ // just break on out of range
break;
- pos += fileHeaderBlock.FileSize + 1;
- files.Add(new FdsDiskFile(fileHeaderBlock, fileDataBlock));
+ }
}
}
@@ -143,6 +154,15 @@ namespace com.clusterrr.Famicom.Containers
files[i].FileNumber = (byte)i;
}
+ public IEnumerable<IFdsBlock> GetBlocks()
+ {
+ var blocks = new List<IFdsBlock>();
+ blocks.Add(diskInfoBlock);
+ blocks.Add(fileAmountBlock);
+ blocks.AddRange(files.SelectMany(f => new IFdsBlock[] { f.HeaderBlock, f.DataBlock }));
+ return blocks;
+ }
+
public static FdsDiskSide FromBytes(byte[] data)
{
return new FdsDiskSide(data);