void GetDriveToc(u32* to,DiskArea area) { if (!disc) return; memset(to,0xFFFFFFFF,102*4); //can't get toc on the second area on discs that don't have it verify(area != DoubleDensity || disc->type == GdRom); //normal CDs: 1 .. tc //GDROM: area0 is 1 .. 2, area1 is 3 ... tc u32 first_track=1; u32 last_track=disc->tracks.size(); if (area==DoubleDensity) first_track=3; else if (disc->type==GdRom) { last_track=2; } //Geneate the TOC info //-1 for 1..99 0 ..98 to[99]=CreateTrackInfo_se(disc->tracks[first_track-1].CTRL,disc->tracks[first_track-1].ADDR,first_track); to[100]=CreateTrackInfo_se(disc->tracks[last_track-1].CTRL,disc->tracks[last_track-1].ADDR,last_track); if (disc->type==GdRom) { //use smaller LEADOUT if (area==SingleDensity) to[101]=CreateTrackInfo(disc->LeadOut.CTRL,disc->LeadOut.ADDR,13085); } else to[101]=CreateTrackInfo(disc->LeadOut.CTRL,disc->LeadOut.ADDR,disc->LeadOut.StartFAD); for (u32 i=first_track-1;i<last_track;i++) { to[i]=CreateTrackInfo(disc->tracks[i].CTRL,disc->tracks[i].ADDR,disc->tracks[i].StartFAD); } }
Chiptune(ModuleData::Ptr data, Parameters::Accessor::Ptr properties) : Data(data) , Properties(properties) , Info(CreateTrackInfo(Data, AYM::TRACK_CHANNELS)) { }
Chiptune(ModuleData::Ptr data, Parameters::Accessor::Ptr properties) : Data(std::move(data)) , Properties(std::move(properties)) , Info(CreateTrackInfo(Data, CHANNELS_COUNT)) { }