summaryrefslogtreecommitdiffstatshomepage
path: root/src/lib/util/cdrom.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/util/cdrom.cpp')
-rw-r--r--src/lib/util/cdrom.cpp83
1 files changed, 43 insertions, 40 deletions
diff --git a/src/lib/util/cdrom.cpp b/src/lib/util/cdrom.cpp
index e3cb14e8f0c..2235119f776 100644
--- a/src/lib/util/cdrom.cpp
+++ b/src/lib/util/cdrom.cpp
@@ -130,7 +130,7 @@ struct cdrom_file
-------------------------------------------------*/
/**
- * @fn INLINE UINT32 physical_to_chd_lba(cdrom_file *file, UINT32 physlba, UINT32 &tracknum)
+ * @fn static inline UINT32 physical_to_chd_lba(cdrom_file *file, UINT32 physlba, UINT32 &tracknum)
*
* @brief Physical to chd lba.
*
@@ -141,7 +141,7 @@ struct cdrom_file
* @return An UINT32.
*/
-INLINE UINT32 physical_to_chd_lba(cdrom_file *file, UINT32 physlba, UINT32 &tracknum)
+static inline UINT32 physical_to_chd_lba(cdrom_file *file, UINT32 physlba, UINT32 &tracknum)
{
UINT32 chdlba;
int track;
@@ -164,7 +164,7 @@ INLINE UINT32 physical_to_chd_lba(cdrom_file *file, UINT32 physlba, UINT32 &trac
-------------------------------------------------*/
/**
- * @fn INLINE UINT32 logical_to_chd_lba(cdrom_file *file, UINT32 loglba, UINT32 &tracknum)
+ * @fn static inline UINT32 logical_to_chd_lba(cdrom_file *file, UINT32 loglba, UINT32 &tracknum)
*
* @brief Logical to chd lba.
*
@@ -175,7 +175,7 @@ INLINE UINT32 physical_to_chd_lba(cdrom_file *file, UINT32 physlba, UINT32 &trac
* @return An UINT32.
*/
-INLINE UINT32 logical_to_chd_lba(cdrom_file *file, UINT32 loglba, UINT32 &tracknum)
+static inline UINT32 logical_to_chd_lba(cdrom_file *file, UINT32 loglba, UINT32 &tracknum)
{
UINT32 chdlba, physlba;
int track;
@@ -225,8 +225,8 @@ cdrom_file *cdrom_open(const char *inputfile)
/* allocate memory for the CD-ROM file */
file = new cdrom_file();
- if (file == NULL)
- return NULL;
+ if (file == nullptr)
+ return nullptr;
/* setup the CDROM module and get the disc info */
chd_error err = chdcd_parse_toc(inputfile, file->cdtoc, file->track_info);
@@ -234,11 +234,11 @@ cdrom_file *cdrom_open(const char *inputfile)
{
fprintf(stderr, "Error reading input file: %s\n", chd_file::error_string(err));
delete file;
- return NULL;
+ return nullptr;
}
/* fill in the data */
- file->chd = NULL;
+ file->chd = nullptr;
LOG(("CD has %d tracks\n", file->cdtoc.numtrks));
@@ -249,7 +249,7 @@ cdrom_file *cdrom_open(const char *inputfile)
{
fprintf(stderr, "Unable to open file: %s\n", file->track_info.track[i].fname.c_str());
cdrom_close(file);
- return NULL;
+ return nullptr;
}
}
/* calculate the starting frame for each track, keeping in mind that CHDMAN
@@ -322,18 +322,18 @@ cdrom_file *cdrom_open(chd_file *chd)
/* punt if no CHD */
if (!chd)
- return NULL;
+ return nullptr;
/* validate the CHD information */
if (chd->hunk_bytes() % CD_FRAME_SIZE != 0)
- return NULL;
+ return nullptr;
if (chd->unit_bytes() != CD_FRAME_SIZE)
- return NULL;
+ return nullptr;
/* allocate memory for the CD-ROM file */
file = new cdrom_file();
- if (file == NULL)
- return NULL;
+ if (file == nullptr)
+ return nullptr;
/* fill in the data */
file->chd = chd;
@@ -343,7 +343,7 @@ cdrom_file *cdrom_open(chd_file *chd)
if (err != CHDERR_NONE)
{
delete file;
- return NULL;
+ return nullptr;
}
LOG(("CD has %d tracks\n", file->cdtoc.numtrks));
@@ -371,8 +371,8 @@ cdrom_file *cdrom_open(chd_file *chd)
chdofs += file->cdtoc.tracks[i].frames;
chdofs += file->cdtoc.tracks[i].extraframes;
logofs += file->cdtoc.tracks[i].frames;
-
-/* printf("Track %02d is format %d subtype %d datasize %d subsize %d frames %d extraframes %d pregap %d pgmode %d presize %d postgap %d logofs %d physofs %d chdofs %d\n", i+1,
+/*
+ printf("Track %02d is format %d subtype %d datasize %d subsize %d frames %d extraframes %d pregap %d pgmode %d presize %d postgap %d logofs %d physofs %d chdofs %d\n", i+1,
file->cdtoc.tracks[i].trktype,
file->cdtoc.tracks[i].subtype,
file->cdtoc.tracks[i].datasize,
@@ -411,10 +411,10 @@ cdrom_file *cdrom_open(chd_file *chd)
void cdrom_close(cdrom_file *file)
{
- if (file == NULL)
+ if (file == nullptr)
return;
- if (file->chd == NULL)
+ if (file->chd == nullptr)
{
for (int i = 0; i < file->cdtoc.numtrks; i++)
{
@@ -447,21 +447,24 @@ void cdrom_close(cdrom_file *file)
* @return The partial sector.
*/
-chd_error read_partial_sector(cdrom_file *file, void *dest, UINT32 lbasector, UINT32 chdsector, UINT32 tracknum, UINT32 startoffs, UINT32 length)
+chd_error read_partial_sector(cdrom_file *file, void *dest, UINT32 lbasector, UINT32 chdsector, UINT32 tracknum, UINT32 startoffs, UINT32 length, bool phys=false)
{
chd_error result = CHDERR_NONE;
bool needswap = false;
// if this is pregap info that isn't actually in the file, just return blank data
- if ((file->cdtoc.tracks[tracknum].pgdatasize == 0) && (lbasector < (file->cdtoc.tracks[tracknum].logframeofs + file->cdtoc.tracks[tracknum].pregap)))
+ if (!phys)
{
-// printf("PG missing sector: LBA %d, trklog %d\n", lbasector, file->cdtoc.tracks[tracknum].logframeofs);
- memset(dest, 0, length);
- return result;
+ if ((file->cdtoc.tracks[tracknum].pgdatasize == 0) && (lbasector < (file->cdtoc.tracks[tracknum].logframeofs + file->cdtoc.tracks[tracknum].pregap)))
+ {
+ //printf("PG missing sector: LBA %d, trklog %d\n", lbasector, file->cdtoc.tracks[tracknum].logframeofs);
+ memset(dest, 0, length);
+ return result;
+ }
}
// if a CHD, just read
- if (file->chd != NULL)
+ if (file->chd != nullptr)
{
result = file->chd->read_bytes(UINT64(chdsector) * UINT64(CD_FRAME_SIZE) + startoffs, dest, length);
/* swap CDDA in the case of LE GDROMs */
@@ -521,7 +524,7 @@ chd_error read_partial_sector(cdrom_file *file, void *dest, UINT32 lbasector, UI
UINT32 cdrom_read_data(cdrom_file *file, UINT32 lbasector, void *buffer, UINT32 datatype, bool phys)
{
- if (file == NULL)
+ if (file == nullptr)
return 0;
// compute CHD sector and tracknumber
@@ -542,14 +545,14 @@ UINT32 cdrom_read_data(cdrom_file *file, UINT32 lbasector, void *buffer, UINT32
if ((datatype == tracktype) || (datatype == CD_TRACK_RAW_DONTCARE))
{
- return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 0, file->cdtoc.tracks[tracknum].datasize) == CHDERR_NONE);
+ return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 0, file->cdtoc.tracks[tracknum].datasize, phys) == CHDERR_NONE);
}
else
{
/* return 2048 bytes of mode 1 data from a 2352 byte mode 1 raw sector */
if ((datatype == CD_TRACK_MODE1) && (tracktype == CD_TRACK_MODE1_RAW))
{
- return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 16, 2048) == CHDERR_NONE);
+ return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 16, 2048, phys) == CHDERR_NONE);
}
/* return 2352 byte mode 1 raw sector from 2048 bytes of mode 1 data */
@@ -565,19 +568,19 @@ UINT32 cdrom_read_data(cdrom_file *file, UINT32 lbasector, void *buffer, UINT32
bufptr[14] = msf&0xff;
bufptr[15] = 1; // mode 1
LOG(("CDROM: promotion of mode1/form1 sector to mode1 raw is not complete!\n"));
- return (read_partial_sector(file, bufptr+16, lbasector, chdsector, tracknum, 0, 2048) == CHDERR_NONE);
+ return (read_partial_sector(file, bufptr+16, lbasector, chdsector, tracknum, 0, 2048, phys) == CHDERR_NONE);
}
/* return 2048 bytes of mode 1 data from a mode2 form1 or raw sector */
if ((datatype == CD_TRACK_MODE1) && ((tracktype == CD_TRACK_MODE2_FORM1)||(tracktype == CD_TRACK_MODE2_RAW)))
{
- return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 24, 2048) == CHDERR_NONE);
+ return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 24, 2048, phys) == CHDERR_NONE);
}
/* return mode 2 2336 byte data from a 2352 byte mode 1 or 2 raw sector (skip the header) */
if ((datatype == CD_TRACK_MODE2) && ((tracktype == CD_TRACK_MODE1_RAW) || (tracktype == CD_TRACK_MODE2_RAW)))
{
- return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 16, 2336) == CHDERR_NONE);
+ return (read_partial_sector(file, buffer, lbasector, chdsector, tracknum, 16, 2336, phys) == CHDERR_NONE);
}
LOG(("CDROM: Conversion from type %d to type %d not supported!\n", tracktype, datatype));
@@ -606,7 +609,7 @@ UINT32 cdrom_read_data(cdrom_file *file, UINT32 lbasector, void *buffer, UINT32
UINT32 cdrom_read_subcode(cdrom_file *file, UINT32 lbasector, void *buffer, bool phys)
{
- if (file == NULL)
+ if (file == nullptr)
return ~0;
// compute CHD sector and tracknumber
@@ -656,7 +659,7 @@ UINT32 cdrom_get_track(cdrom_file *file, UINT32 frame)
{
UINT32 track = 0;
- if (file == NULL)
+ if (file == nullptr)
return ~0;
/* convert to a CHD sector offset and get track information */
@@ -684,7 +687,7 @@ UINT32 cdrom_get_track(cdrom_file *file, UINT32 frame)
UINT32 cdrom_get_track_start(cdrom_file *file, UINT32 track)
{
- if (file == NULL)
+ if (file == nullptr)
return ~0;
/* handle lead-out specially */
@@ -712,7 +715,7 @@ UINT32 cdrom_get_track_start(cdrom_file *file, UINT32 track)
UINT32 cdrom_get_track_start_phys(cdrom_file *file, UINT32 track)
{
- if (file == NULL)
+ if (file == nullptr)
return ~0;
/* handle lead-out specially */
@@ -743,7 +746,7 @@ UINT32 cdrom_get_track_start_phys(cdrom_file *file, UINT32 track)
int cdrom_get_last_track(cdrom_file *file)
{
- if (file == NULL)
+ if (file == nullptr)
return -1;
return file->cdtoc.numtrks;
@@ -768,7 +771,7 @@ int cdrom_get_last_track(cdrom_file *file)
int cdrom_get_adr_control(cdrom_file *file, int track)
{
- if (file == NULL)
+ if (file == nullptr)
return -1;
if (track == 0xaa || file->cdtoc.tracks[track].trktype == CD_TRACK_AUDIO)
@@ -797,7 +800,7 @@ int cdrom_get_adr_control(cdrom_file *file, int track)
int cdrom_get_track_type(cdrom_file *file, int track)
{
- if (file == NULL)
+ if (file == nullptr)
return -1;
return file->cdtoc.tracks[track].trktype;
@@ -821,8 +824,8 @@ int cdrom_get_track_type(cdrom_file *file, int track)
const cdrom_toc *cdrom_get_toc(cdrom_file *file)
{
- if (file == NULL)
- return NULL;
+ if (file == nullptr)
+ return nullptr;
return &file->cdtoc;
}