Fix for read from raw drive on some machines,

must have been a fluke that it worked for me and a few others
thanks to shuffle2 and daxtsu for testing patch

some linux compile fixes

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2360 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
LPFaint99
2009-02-22 07:52:02 +00:00
parent 42101f0ce6
commit e5cf9c8b8c
4 changed files with 17 additions and 30 deletions

View File

@ -64,6 +64,7 @@ public:
~SectorReader();
const u8 *GetBlockData(u64 block_num);
bool Read(u64 offset, u64 size, u8* out_ptr);
friend class DriveReader;
};
// Factory function - examines the path to choose the right type of IBlobReader, and returns one.

View File

@ -36,7 +36,7 @@ namespace DiscIO
}
else
{
SetSectorSize(2048);
SectorReader::SetSectorSize(2048);
#ifdef _LOCKDRIVE
// Lock the compact disc in the CD-ROM drive to prevent accidental
// removal while reading from it.
@ -127,27 +127,17 @@ namespace DiscIO
delete lpSector;
}
void DriveReader::SetSectorSize(int blocksize)
{
for (int i = 0; i < CACHE_SIZE; i++)
{
cache[i] = new u8[blocksize];
cache_tags[i] = (u64)(s64) - 1;
}
m_blocksize = blocksize;
}
const u8 *DriveReader::GetBlockData(u64 block_num)
{
if (cache_tags[0] == block_num)
if (SectorReader::cache_tags[0] == block_num)
{
return cache[0];
return SectorReader::cache[0];
}
else
{
GetBlock(block_num, cache[0]);
cache_tags[0] = block_num;
return cache[0];
SectorReader::cache_tags[0] = block_num;
return SectorReader::cache[0];
}
}

View File

@ -32,13 +32,8 @@ class DriveReader : public SectorReader
{
private:
DriveReader(const char *drive);
void SetSectorSize(int blocksize);
enum { CACHE_SIZE = 32 };
int m_blocksize;
u8* cache[CACHE_SIZE];
u64 cache_tags[CACHE_SIZE];
int cache_age[CACHE_SIZE];
void GetBlock(u64 block_num, u8 *out_ptr);
#ifdef _WIN32
HANDLE hDisc;
PREVENT_MEDIA_REMOVAL pmrLockCDROM;
@ -47,6 +42,7 @@ private:
#endif
s64 size;
u64 *block_pointers;
public:
static DriveReader *Create(const char *drive);
~DriveReader();