60 lines
1.4 KiB
C#
60 lines
1.4 KiB
C#
using System.IO;
|
|
|
|
namespace BizHawk.Emulation.Cores.Computers.Commodore64
|
|
{
|
|
public static class G64
|
|
{
|
|
public static Disk Read(byte[] source)
|
|
{
|
|
MemoryStream mem = new MemoryStream(source);
|
|
BinaryReader reader = new BinaryReader(mem);
|
|
Disk result = new Disk();
|
|
string id = new string(reader.ReadChars(8));
|
|
|
|
if (id == @"GCR-1541")
|
|
{
|
|
int trackCount;
|
|
int[] trackOffsetTable = new int[84];
|
|
int[] trackSpeedTable = new int[84];
|
|
|
|
reader.ReadByte(); //version
|
|
trackCount = reader.ReadByte();
|
|
reader.ReadInt16(); //max track size in bytes
|
|
|
|
for (int i = 0; i < 84; i++)
|
|
trackOffsetTable[i] = reader.ReadInt32();
|
|
|
|
for (int i = 0; i < 84; i++)
|
|
trackSpeedTable[i] = reader.ReadInt32();
|
|
|
|
for (int i = 0; i < 84; i++)
|
|
{
|
|
if (trackOffsetTable[i] > 0)
|
|
{
|
|
int trackLength;
|
|
byte[] trackData;
|
|
Track track = new Track();
|
|
|
|
mem.Position = trackOffsetTable[i];
|
|
trackLength = reader.ReadInt16();
|
|
trackData = reader.ReadBytes(trackLength);
|
|
track.bits = trackLength * 8;
|
|
track.data = trackData;
|
|
track.density = trackSpeedTable[i];
|
|
track.index = i;
|
|
result.tracks.Add(track);
|
|
}
|
|
}
|
|
}
|
|
|
|
result.valid = (result.tracks.Count > 0);
|
|
return result;
|
|
}
|
|
|
|
public static byte[] Write(Disk source)
|
|
{
|
|
return null;
|
|
}
|
|
}
|
|
}
|