int CdRead(u32 lsn, u32 sectors, void *buf, CdRMode *mode){ u32 i; u8* buff; int rmode; switch (mode->datapattern) { case CdSecS2048: rmode = CDVD_MODE_2048; break; case CdSecS2328: rmode = CDVD_MODE_2328; break; case CdSecS2340: rmode = CDVD_MODE_2340; break; default: return 0; } for (i=0; i<sectors; i++){ if (CDVDreadTrack(lsn+i, rmode)==-1) return 0; buff = CDVDgetBuffer(); if (buff==NULL) return 0; switch (mode->datapattern){ case CdSecS2048: memcpy((void*)((uptr)buf+2048*i), buff, 2048);break;//only data case CdSecS2328: memcpy((void*)((uptr)buf+2328*i), buff, 2328);break;//without sync & head & sub case CdSecS2340: memcpy((void*)((uptr)buf+2340*i), buff, 2340);break;//without sync } } return 1; }
void ReadTrack() { cdr.Prev[0] = itob(cdr.SetSector[0]); cdr.Prev[1] = itob(cdr.SetSector[1]); cdr.Prev[2] = itob(cdr.SetSector[2]); CDR_LOG("KEY *** %x:%x:%x\n", cdr.Prev[0], cdr.Prev[1], cdr.Prev[2]); cdr.RErr = CDVDreadTrack(MSFtoLSN(cdr.SetSector), CDVD_MODE_2352); }
int DvdRead(u32 lsn, u32 sectors, void *buf, CdRMode *mode){ u32 i; u8* buff; for (i=lsn; i<(lsn+sectors); i++){ if (CDVDreadTrack(i, CDVD_MODE_2048)==-1) return 0; buff = CDVDgetBuffer(); if (buff==NULL) return 0; // switch (mode->datapattern){ // case CdSecS2064: ((u32*)buf)[0] = i + 0x30000; memcpy((u8*)buf+12, buff, 2048); (u8*)buf+= 2064; break; // default: // return 0; // } } return 1; }