CHD: Reworked the extra frame handling
This way Sonic 2, F355, Crazy Taxi, Rayman 2 and Daytona USA work.
This commit is contained in:
parent
6a8eafbc5c
commit
e72bd9161e
|
@ -38,18 +38,28 @@ struct CHDTrack : TrackFile
|
||||||
u32 StartHunk;
|
u32 StartHunk;
|
||||||
u32 fmt;
|
u32 fmt;
|
||||||
|
|
||||||
CHDTrack(CHDDisc* disc, u32 StartFAD,u32 StartHunk, u32 fmt)
|
u32 extraframes; /* number of "spillage" frames in previous tracks */
|
||||||
|
|
||||||
|
CHDTrack(CHDDisc* disc, u32 StartFAD,u32 StartHunk, u32 fmt, u32 extraframes)
|
||||||
{
|
{
|
||||||
this->disc=disc;
|
this->disc=disc;
|
||||||
this->StartFAD=StartFAD;
|
this->StartFAD=StartFAD;
|
||||||
this->StartHunk=StartHunk;
|
this->StartHunk=StartHunk;
|
||||||
this->fmt=fmt;
|
this->fmt=fmt;
|
||||||
|
this->extraframes = extraframes;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Read(u32 FAD,u8* dst,SectorFormat* sector_type,u8* subcode,SubcodeFormat* subcode_type)
|
virtual void Read(u32 FAD,u8* dst,SectorFormat* sector_type,u8* subcode,SubcodeFormat* subcode_type)
|
||||||
{
|
{
|
||||||
u32 fad_offs=FAD-StartFAD;
|
s32 fad_offs = FAD - (StartFAD + extraframes);
|
||||||
u32 hunk=(fad_offs)/disc->sph + StartHunk;
|
u32 hunk=(fad_offs)/(s32)disc->sph + StartHunk;
|
||||||
|
|
||||||
|
if (fad_offs < 0)
|
||||||
|
{
|
||||||
|
hunk--;
|
||||||
|
fad_offs += disc->sph;
|
||||||
|
}
|
||||||
|
|
||||||
if (disc->old_hunk!=hunk)
|
if (disc->old_hunk!=hunk)
|
||||||
{
|
{
|
||||||
chd_read(disc->chd,hunk,disc->hunk_mem); //CHDERR_NONE
|
chd_read(disc->chd,hunk,disc->hunk_mem); //CHDERR_NONE
|
||||||
|
@ -141,14 +151,14 @@ bool CHDDisc::TryOpen(const wchar* file)
|
||||||
}
|
}
|
||||||
printf("%s\n",temp);
|
printf("%s\n",temp);
|
||||||
Track t;
|
Track t;
|
||||||
t.StartFAD = total_frames + extraframes;
|
t.StartFAD = total_frames;
|
||||||
int padded = (frames + CD_TRACK_PADDING - 1) / CD_TRACK_PADDING;
|
|
||||||
extraframes += (padded * CD_TRACK_PADDING) - frames;
|
|
||||||
total_frames += frames;
|
total_frames += frames;
|
||||||
t.EndFAD = total_frames - 1 + extraframes;
|
t.EndFAD = total_frames - 1;
|
||||||
t.ADDR = 0;
|
t.ADDR = 0;
|
||||||
t.CTRL = strcmp(type,"AUDIO") == 0 ? 0 : 4;
|
t.CTRL = strcmp(type,"AUDIO") == 0 ? 0 : 4;
|
||||||
t.file = new CHDTrack(this, t.StartFAD, total_hunks, strcmp(type,"MODE1") ? 2352 : 2048);
|
t.file = new CHDTrack(this, t.StartFAD, total_hunks, strcmp(type,"MODE1") ? 2352 : 2048, extraframes);
|
||||||
|
int padded = (frames + CD_TRACK_PADDING - 1) / CD_TRACK_PADDING;
|
||||||
|
extraframes += (padded * CD_TRACK_PADDING) - frames;
|
||||||
|
|
||||||
total_hunks += frames / sph;
|
total_hunks += frames / sph;
|
||||||
if (frames % sph)
|
if (frames % sph)
|
||||||
|
|
Loading…
Reference in New Issue