add TOC-testing to mednadisc
This commit is contained in:
parent
8c10f401e2
commit
8845b02010
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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);
|
Loading…
Reference in New Issue