Cosmos/source/Boot/Cosmos.FileSystems.Test/Program.cs
smremde_cp b0c150790e added mbr read/write support
added initial filesystem objects for review
added the ability to use a file as a disk (see filesystem test project)
clead up some redundant fs stuff
2008-06-05 22:16:24 +00:00

70 lines
1.8 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cosmos.Hardware;
using System.IO;
using Cosmos.FileSystem;
namespace Cosmos.FileSystems.Test
{
class Program
{
static void Main(string[] args)
{
Stream s = File.Open("hda.img", FileMode.OpenOrCreate);
s.Seek(1000 * 512 - 1, SeekOrigin.Begin);
s.WriteByte(0);
Disk bd = new StreamDisk(s);
MBR mbr = new MBR(bd);
mbr.DiskSignature = 0x12345678;
mbr.Partition[0].Bootable = true;
mbr.Partition[0].StartLBA = 1;
mbr.Partition[0].EndLBA = (uint)(bd.BlockCount - 2);
mbr.Partition[0].PartitionType =0x0c;
mbr.Save();
}
}
class StreamDisk : Disk
{
Stream s;
public StreamDisk(Stream s)
{
this.s = s;
}
public override uint BlockSize
{
get { return 512; }
}
public override ulong BlockCount
{
get { return (ulong)(s.Length / BlockSize); }
}
public override byte[] ReadBlock(ulong aBlock)
{
byte[] b = new byte[(uint)BlockSize];
s.Seek((uint)(aBlock * BlockSize), SeekOrigin.Begin);
s.Read(b, 0, (int)BlockSize);
return b;
}
public override void WriteBlock(ulong aBlock, byte[] aContents)
{
s.Seek((uint)(aBlock * BlockSize), SeekOrigin.Begin);
s.Write(aContents, 0, (int)BlockSize);
s.Flush();
}
public override string Name
{
get { throw new NotImplementedException(); }
}
}
}