This commit is contained in:
Daveo 2001-04-04 12:38:57 +00:00
parent ff52a51a9d
commit 6c32ee7a11
4 changed files with 77 additions and 0 deletions

View File

@ -46,6 +46,42 @@ int Error=0;
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()
{

View File

@ -16,6 +16,7 @@ public:
void Open();
void Read(u32 Length,void *Buffer);
void ReadAsync(sASyncQueue &File);
void Close();
private:

View File

@ -23,6 +23,8 @@ CLOFileIO *CFileIO::FileIO;
int CFileIO::FilePosList[FILEPOS_MAX];
sFAT *CFileIO::MainFAT=0;
sASyncQueue CFileIO::ASyncQueue;
bool CFileIO::ASyncFlag;
/*****************************************************************************/
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;
// loadDataBank(DATABANK_SYSTEM);
// CurrentDataBank=DATABANK_MAX;
ASyncQueue.Status=BLStatusOffline;
ASyncFlag=false;
}
/*****************************************************************************/
@ -335,6 +339,25 @@ int CFileIO::GetReadLeft()
{
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 **************************************************************/
/*****************************************************************************/

View File

@ -76,6 +76,15 @@ struct sDataBank
sFAT *Data;
};
/*****************************************************************************/
struct sASyncQueue
{
int Sector;
int Length;
u8 *Dst;
int Status;
};
/*****************************************************************************/
class CLOFileIO;
class CFileIO
@ -110,6 +119,11 @@ static void FindAllFilePos();
static void GetAllFilePos();
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:
static void CheckChunk();
@ -121,6 +135,8 @@ static sDataBank DataBank[DATABANK_MAX];
static DataBankEquate CurrentDataBank;
static sFAT *MainFAT;
static sASyncQueue ASyncQueue;
static bool ASyncFlag;
};
/*****************************************************************************/
@ -129,6 +145,7 @@ class CLOFileIO
public:
virtual void Open()=0;
virtual void Read(u32 Length,void *Buffer)=0;
virtual void ReadAsync(sASyncQueue &File){};
virtual void Close()=0;
};