70 lines
1.7 KiB
C#
70 lines
1.7 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace BizHawk.Emulation.DiscSystem
|
|
{
|
|
public partial class Disc : IDisposable
|
|
{
|
|
public sealed class Blob_ZeroPadAdapter : IBlob
|
|
{
|
|
public Blob_ZeroPadAdapter(IBlob baseBlob, long padFrom, long padLen)
|
|
{
|
|
this.baseBlob = baseBlob;
|
|
this.padFrom = padFrom;
|
|
this.padLen = padLen;
|
|
}
|
|
|
|
public int Read(long byte_pos, byte[] buffer, int offset, int count)
|
|
{
|
|
//I have an ff9 disc which can demo this
|
|
throw new NotImplementedException("Blob_ZeroPadAdapter hasnt been tested yet! please report this!");
|
|
|
|
//something about this seems unnecessarily complex, but... i dunno.
|
|
/*
|
|
//figure out how much remains until the zero-padding begins
|
|
long remain = byte_pos - padFrom;
|
|
int todo;
|
|
if (remain < count)
|
|
todo = (int)remain;
|
|
else todo = count;
|
|
|
|
//read up until the zero-padding
|
|
int totalRead = 0;
|
|
int readed = baseBlob.Read(byte_pos, buffer, offset, todo);
|
|
totalRead += readed;
|
|
offset += todo;
|
|
|
|
//if we didnt read enough, we certainly shouldnt try to read any more
|
|
if (readed < todo)
|
|
return readed;
|
|
|
|
//if that was all we needed, then we're done
|
|
count -= todo;
|
|
if (count == 0)
|
|
return totalRead;
|
|
|
|
//if we need more, it must come from zero-padding
|
|
remain = padLen;
|
|
if (remain < count)
|
|
todo = (int)remain;
|
|
else todo = count;
|
|
|
|
Array.Clear(buffer, offset, todo);
|
|
totalRead += todo;
|
|
|
|
return totalRead;
|
|
*/
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
baseBlob.Dispose();
|
|
}
|
|
|
|
private readonly IBlob baseBlob;
|
|
private long padFrom;
|
|
private long padLen;
|
|
}
|
|
|
|
}
|
|
} |