This commit is contained in:
parent
ff52a51a9d
commit
6c32ee7a11
4 changed files with 77 additions and 0 deletions
|
@ -46,6 +46,42 @@ int Error=0;
|
||||||
BigLump->Sector+=Count;
|
BigLump->Sector+=Count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
void CCDFileIO::ReadAsync(sASyncQueue &File)
|
||||||
|
{
|
||||||
|
u8 Com=CdlModeSpeed;
|
||||||
|
static int Error=0;
|
||||||
|
/*
|
||||||
|
switch(File.Status)
|
||||||
|
{
|
||||||
|
case BLStatusReady:
|
||||||
|
CdIntToPos(File.Sector+FileStart,&CdPos);
|
||||||
|
CdControlF(CdlSetloc, (u8*)&CdPos); // Set CD Pos
|
||||||
|
File.Status=BLStatusOpen;
|
||||||
|
break;
|
||||||
|
case BLStatusOpen:
|
||||||
|
if (CdReadSync(1,0) > 0) return;
|
||||||
|
CdControlB(CdlSetmode, &Com,0);
|
||||||
|
CdRead(File.Length, (u32*)File.Dst, CdlModeSpeed);
|
||||||
|
File.Status=BLStatusRead;
|
||||||
|
break;
|
||||||
|
case BLStatusRead:
|
||||||
|
if (CdReadSync(1,0) > 0) return;
|
||||||
|
File.Status=BLStatusOffline;
|
||||||
|
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
CdIntToPos(File.Sector+FileStart,&CdPos);
|
||||||
|
CdControlB(CdlSetloc, (u8*)&CdPos, 0); // Set CD Pos
|
||||||
|
CdControlB(CdlSetmode, &Com, 0);
|
||||||
|
Error=CdRead(File.Length, (u32*)File.Dst, CdlModeSpeed);
|
||||||
|
if (Error!=0) File.Status=BLStatusOffline;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
void CCDFileIO::Close()
|
void CCDFileIO::Close()
|
||||||
{
|
{
|
||||||
|
|
|
@ -16,6 +16,7 @@ public:
|
||||||
|
|
||||||
void Open();
|
void Open();
|
||||||
void Read(u32 Length,void *Buffer);
|
void Read(u32 Length,void *Buffer);
|
||||||
|
void ReadAsync(sASyncQueue &File);
|
||||||
void Close();
|
void Close();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
|
@ -23,6 +23,8 @@ CLOFileIO *CFileIO::FileIO;
|
||||||
int CFileIO::FilePosList[FILEPOS_MAX];
|
int CFileIO::FilePosList[FILEPOS_MAX];
|
||||||
|
|
||||||
sFAT *CFileIO::MainFAT=0;
|
sFAT *CFileIO::MainFAT=0;
|
||||||
|
sASyncQueue CFileIO::ASyncQueue;
|
||||||
|
bool CFileIO::ASyncFlag;
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
sDataBank CFileIO::DataBank[DATABANK_MAX]=
|
sDataBank CFileIO::DataBank[DATABANK_MAX]=
|
||||||
|
@ -77,6 +79,8 @@ int FATSize=FileEquate_MAX*sizeof(sFAT);
|
||||||
for (int Bank=0;Bank<DATABANK_MAX; Bank++) DataBank[Bank].Data=0;
|
for (int Bank=0;Bank<DATABANK_MAX; Bank++) DataBank[Bank].Data=0;
|
||||||
// loadDataBank(DATABANK_SYSTEM);
|
// loadDataBank(DATABANK_SYSTEM);
|
||||||
// CurrentDataBank=DATABANK_MAX;
|
// CurrentDataBank=DATABANK_MAX;
|
||||||
|
ASyncQueue.Status=BLStatusOffline;
|
||||||
|
ASyncFlag=false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -335,6 +339,25 @@ int CFileIO::GetReadLeft()
|
||||||
{
|
{
|
||||||
return(BigLump.LengthLeft);
|
return(BigLump.LengthLeft);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
void CFileIO::AddASyncFile(FileEquate file,u8 *Dst)
|
||||||
|
{
|
||||||
|
ASyncQueue.Sector = getFileSector(file);
|
||||||
|
ASyncQueue.Length = getFileSize(file )/2048;
|
||||||
|
ASyncQueue.Dst=Dst;
|
||||||
|
ASyncQueue.Status=BLStatusReady;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
void CFileIO::LoadASyncFiles()
|
||||||
|
{
|
||||||
|
if (ASyncQueue.Status!=BLStatusOffline && ASyncFlag)
|
||||||
|
{
|
||||||
|
FileIO->ReadAsync(ASyncQueue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
/*** Data Banks **************************************************************/
|
/*** Data Banks **************************************************************/
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
|
|
@ -76,6 +76,15 @@ struct sDataBank
|
||||||
sFAT *Data;
|
sFAT *Data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/*****************************************************************************/
|
||||||
|
struct sASyncQueue
|
||||||
|
{
|
||||||
|
int Sector;
|
||||||
|
int Length;
|
||||||
|
u8 *Dst;
|
||||||
|
int Status;
|
||||||
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
class CLOFileIO;
|
class CLOFileIO;
|
||||||
class CFileIO
|
class CFileIO
|
||||||
|
@ -110,6 +119,11 @@ static void FindAllFilePos();
|
||||||
static void GetAllFilePos();
|
static void GetAllFilePos();
|
||||||
static int GetReadLeft();
|
static int GetReadLeft();
|
||||||
|
|
||||||
|
// Fake ASync Que Stuff
|
||||||
|
static void EnableASync(bool f) {ASyncFlag=f;}
|
||||||
|
static void AddASyncFile(FileEquate file,u8 *Dst);
|
||||||
|
static void LoadASyncFiles();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
static void CheckChunk();
|
static void CheckChunk();
|
||||||
|
|
||||||
|
@ -121,6 +135,8 @@ static sDataBank DataBank[DATABANK_MAX];
|
||||||
static DataBankEquate CurrentDataBank;
|
static DataBankEquate CurrentDataBank;
|
||||||
|
|
||||||
static sFAT *MainFAT;
|
static sFAT *MainFAT;
|
||||||
|
static sASyncQueue ASyncQueue;
|
||||||
|
static bool ASyncFlag;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*****************************************************************************/
|
/*****************************************************************************/
|
||||||
|
@ -129,6 +145,7 @@ class CLOFileIO
|
||||||
public:
|
public:
|
||||||
virtual void Open()=0;
|
virtual void Open()=0;
|
||||||
virtual void Read(u32 Length,void *Buffer)=0;
|
virtual void Read(u32 Length,void *Buffer)=0;
|
||||||
|
virtual void ReadAsync(sASyncQueue &File){};
|
||||||
virtual void Close()=0;
|
virtual void Close()=0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue