add TOC-testing to mednadisc
This commit is contained in:
parent
8c10f401e2
commit
8845b02010
|
@ -9,16 +9,32 @@
|
||||||
#include "cdrom/cdromif.h"
|
#include "cdrom/cdromif.h"
|
||||||
#include "cdrom/CDAccess_Image.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)
|
EW_EXPORT void* mednadisc_LoadCD(const char* fname)
|
||||||
{
|
{
|
||||||
CDAccess* disc = NULL;
|
CDAccess* disc = NULL;
|
||||||
try {
|
try {
|
||||||
disc = cdaccess_open_image(fname,false);
|
disc = cdaccess_open_image(fname,false);
|
||||||
}
|
}
|
||||||
catch(MDFN_Error &e) {
|
catch(MDFN_Error &) {
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
return disc;
|
|
||||||
|
MednaDisc* md = new MednaDisc();
|
||||||
|
md->disc = disc;
|
||||||
|
disc->Read_TOC(&md->toc);
|
||||||
|
return md;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct JustTOC
|
struct JustTOC
|
||||||
|
@ -28,28 +44,34 @@ struct JustTOC
|
||||||
uint8 disc_type;
|
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;
|
CDUtility::TOC &toc = md->toc;
|
||||||
disc->Read_TOC(&toc);
|
|
||||||
justToc->first_track = toc.first_track;
|
justToc->first_track = toc.first_track;
|
||||||
justToc->last_track = toc.last_track;
|
justToc->last_track = toc.last_track;
|
||||||
justToc->disc_type = toc.disc_type;
|
justToc->disc_type = toc.disc_type;
|
||||||
memcpy(tracks101,toc.tracks,sizeof(toc.tracks));
|
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 {
|
CDAccess* disc = md->disc;
|
||||||
disc->Read_Raw_Sector((uint8*)buf2448,lba);
|
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 0;
|
||||||
}
|
}
|
||||||
return 1;
|
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"
|
#include "emuware/emuware.h"
|
||||||
|
|
||||||
class CDAccess;
|
class MednaDisc;
|
||||||
|
|
||||||
EW_EXPORT void* mednadisc_LoadCD(const char* fname);
|
EW_EXPORT void* mednadisc_LoadCD(const char* fname);
|
||||||
EW_EXPORT int32 mednadisc_ReadSector(CDAccess* disc, int lba, void* buf2448);
|
EW_EXPORT int32 mednadisc_ReadSector(MednaDisc* disc, int lba, void* buf2448);
|
||||||
EW_EXPORT void mednadisc_CloseCD(CDAccess* disc);
|
EW_EXPORT void mednadisc_CloseCD(MednaDisc* disc);
|
Loading…
Reference in New Issue