add TOC-testing to mednadisc

This commit is contained in:
zeromus 2015-02-01 02:10:55 +00:00
parent 8c10f401e2
commit 8845b02010
2 changed files with 36 additions and 14 deletions

View File

@ -9,16 +9,32 @@
#include "cdrom/cdromif.h"
#include "cdrom/CDAccess_Image.h"
class MednaDisc
{
public:
~MednaDisc()
{
delete disc;
}
CDAccess* disc;
CDUtility::TOC toc;
};
EW_EXPORT void* mednadisc_LoadCD(const char* fname)
{
CDAccess* disc = NULL;
try {
disc = cdaccess_open_image(fname,false);
}
catch(MDFN_Error &e) {
catch(MDFN_Error &) {
return NULL;
}
return disc;
MednaDisc* md = new MednaDisc();
md->disc = disc;
disc->Read_TOC(&md->toc);
return md;
}
struct JustTOC
@ -28,28 +44,34 @@ struct JustTOC
uint8 disc_type;
};
EW_EXPORT void mednadisc_ReadTOC(CDAccess* disc, JustTOC* justToc, CDUtility::TOC_Track *tracks101)
EW_EXPORT void mednadisc_ReadTOC(MednaDisc* md, JustTOC* justToc, CDUtility::TOC_Track *tracks101)
{
CDUtility::TOC toc;
disc->Read_TOC(&toc);
CDUtility::TOC &toc = md->toc;
justToc->first_track = toc.first_track;
justToc->last_track = toc.last_track;
justToc->disc_type = toc.disc_type;
memcpy(tracks101,toc.tracks,sizeof(toc.tracks));
}
EW_EXPORT int32 mednadisc_ReadSector(CDAccess* disc, int lba, void* buf2448)
EW_EXPORT int32 mednadisc_ReadSector(MednaDisc* md, int lba, void* buf2448)
{
try {
disc->Read_Raw_Sector((uint8*)buf2448,lba);
CDAccess* disc = md->disc;
CDUtility::TOC &toc = md->toc;
try
{
//if it's at the lead-out track or beyond, synthesize it as a lead-out sector
if(lba >= (int32)toc.tracks[100].lba)
synth_leadout_sector_lba(0x02, toc, lba, (uint8*)buf2448);
else
disc->Read_Raw_Sector((uint8*)buf2448,lba);
}
catch(MDFN_Error &e) {
catch(MDFN_Error &) {
return 0;
}
return 1;
}
EW_EXPORT void mednadisc_CloseCD(CDAccess* disc)
EW_EXPORT void mednadisc_CloseCD(MednaDisc* md)
{
delete disc;
delete md;
}

View File

@ -2,8 +2,8 @@
#include "emuware/emuware.h"
class CDAccess;
class MednaDisc;
EW_EXPORT void* mednadisc_LoadCD(const char* fname);
EW_EXPORT int32 mednadisc_ReadSector(CDAccess* disc, int lba, void* buf2448);
EW_EXPORT void mednadisc_CloseCD(CDAccess* disc);
EW_EXPORT int32 mednadisc_ReadSector(MednaDisc* disc, int lba, void* buf2448);
EW_EXPORT void mednadisc_CloseCD(MednaDisc* disc);