diff options
Diffstat (limited to 'src/lib/util/cdrom.cpp')
| -rw-r--r-- | src/lib/util/cdrom.cpp | 83 |
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; } |
