Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alexbevi
GitHub Repository: alexbevi/BizHawk
Path: blob/master/psx/mednadisc/Mednadisc.cpp
2 views
1
#include "emuware/emuware.h"
2
3
#include "Mednadisc.h"
4
5
#include "error.h"
6
7
#include "cdrom/CDAccess.h"
8
#include "cdrom/CDUtility.h"
9
#include "cdrom/cdromif.h"
10
#include "cdrom/CDAccess_Image.h"
11
12
13
class MednaDisc
14
{
15
public:
16
~MednaDisc()
17
{
18
delete disc;
19
}
20
CDAccess* disc;
21
CDUtility::TOC toc;
22
};
23
24
EW_EXPORT void* mednadisc_LoadCD(const char* fname)
25
{
26
CDAccess* disc = NULL;
27
try {
28
disc = CDAccess_Open(fname,false);
29
}
30
catch(MDFN_Error &) {
31
return NULL;
32
}
33
34
MednaDisc* md = new MednaDisc();
35
md->disc = disc;
36
disc->Read_TOC(&md->toc);
37
return md;
38
}
39
40
struct JustTOC
41
{
42
uint8 first_track;
43
uint8 last_track;
44
uint8 disc_type;
45
};
46
47
EW_EXPORT void mednadisc_ReadTOC(MednaDisc* md, JustTOC* justToc, CDUtility::TOC_Track *tracks101)
48
{
49
CDUtility::TOC &toc = md->toc;
50
justToc->first_track = toc.first_track;
51
justToc->last_track = toc.last_track;
52
justToc->disc_type = toc.disc_type;
53
memcpy(tracks101,toc.tracks,sizeof(toc.tracks));
54
}
55
56
//NOTE: the subcode will come out interleaved.
57
//Don't try changing this unless youre REALLY bored. It's convoluted.
58
//If you do, make sure you have three states: must_interleave, must_deinterleaved and dontcare
59
EW_EXPORT int32 mednadisc_ReadSector(MednaDisc* md, int lba, void* buf2448)
60
{
61
CDAccess* disc = md->disc;
62
CDUtility::TOC &toc = md->toc;
63
try
64
{
65
//EDIT: this is handled now by the individual readers
66
//if it's at the lead-out track or beyond, synthesize it as a lead-out sector
67
//if(lba >= (int32)toc.tracks[100].lba)
68
// synth_leadout_sector_lba(0x02, toc, lba, (uint8*)buf2448);
69
//else
70
disc->Read_Raw_Sector((uint8*)buf2448,lba);
71
}
72
catch(MDFN_Error &) {
73
return 0;
74
}
75
return 1;
76
}
77
78
EW_EXPORT void mednadisc_CloseCD(MednaDisc* md)
79
{
80
delete md;
81
}
82
83