Skip to content
This repository has been archived by the owner on Jul 10, 2023. It is now read-only.

Commit

Permalink
CHD: Check for extra frames
Browse files Browse the repository at this point in the history
If the frame count is not dividable by 4, there are extra frames added to keep a padding.
This is true for F355 (450 frames -> 2 extra frames) and others.

Also move CD_TRACK_PADDING to chd.cpp to work around problems with including from C and C++.
  • Loading branch information
baka0815 committed Sep 22, 2018
1 parent 1426059 commit 1d7ecda
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 15 deletions.
3 changes: 0 additions & 3 deletions core/deps/chdr/cdrom.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,6 @@
CONSTANTS
***************************************************************************/

/* tracks are padded to a multiple of this many frames */
extern const uint32_t CD_TRACK_PADDING;

#define CD_MAX_TRACKS (99) /* AFAIK the theoretical limit */
#define CD_MAX_SECTOR_DATA (2352)
#define CD_MAX_SUBCODE_DATA (96)
Expand Down
30 changes: 18 additions & 12 deletions core/imgread/chd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@

#include "deps/chdr/chd.h"

/* tracks are padded to a multiple of this many frames */
const uint32_t CD_TRACK_PADDING = 4;

struct CHDDisc : Disc
{
chd_file* chd;
Expand Down Expand Up @@ -91,10 +94,11 @@ bool CHDDisc::TryOpen(const wchar* file)
u8 flags;
char temp[512];
u32 temp_len;
u32 total_frames=150;
u32 total_frames = 150;

u32 total_secs=0;
u32 total_hunks=0;
u32 total_secs = 0;
u32 total_hunks = 0;
int extraframes = 0;

for(;;)
{
Expand Down Expand Up @@ -137,15 +141,17 @@ bool CHDDisc::TryOpen(const wchar* file)
}
printf("%s\n",temp);
Track t;
t.StartFAD=total_frames;
total_frames+=frames;
t.EndFAD=total_frames-1;
t.ADDR=0;
t.CTRL=strcmp(type,"AUDIO")==0?0:4;
t.file = new CHDTrack(this,t.StartFAD,total_hunks,strcmp(type,"MODE1")?2352:2048);

total_hunks+=frames/sph;
if (frames%sph)
t.StartFAD = total_frames + extraframes;
int padded = (frames + CD_TRACK_PADDING - 1) / CD_TRACK_PADDING;
extraframes += (padded * CD_TRACK_PADDING) - frames;
total_frames += frames;
t.EndFAD = total_frames - 1 + extraframes;
t.ADDR = 0;
t.CTRL = strcmp(type,"AUDIO") == 0 ? 0 : 4;
t.file = new CHDTrack(this, t.StartFAD, total_hunks, strcmp(type,"MODE1") ? 2352 : 2048);

total_hunks += frames / sph;
if (frames % sph)
total_hunks++;

tracks.push_back(t);
Expand Down

0 comments on commit 1d7ecda

Please sign in to comment.