Improve CDDA track list

This commit is contained in:
Jaby 2024-05-05 23:12:08 +02:00
parent a7876ac2a6
commit 6301eb211f
4 changed files with 19 additions and 5 deletions

View File

@ -15,6 +15,6 @@ namespace JabyEngine {
TrackList get_tracks();
void play(uint8_t track);
void stop();
void pause();
}
}

View File

@ -29,8 +29,9 @@ namespace JabyEngine {
CD::Command::send<CD_IO::PortIndex0>(CD_IO::Command::Play, track);
}
void stop() {
void pause() {
CD::Command::wait_completed();
CD::Command::send<CD_IO::PortIndex0>(CD_IO::Command::Pause);
}
}
}

View File

@ -70,7 +70,11 @@ impl Time {
let minute = (((lba/Time::MAX_SECTORS)/Time::MAX_SECONDS)%Time::MAX_MINUTES) as u8;
Time{sector, second, minute}
}
}
pub fn as_sectors(&self) -> usize {
self.sector as usize + self.second as usize*Self::MAX_SECTORS + self.minute as usize*Self::MAX_SECONDS*Self::MAX_SECTORS
}
pub fn dump(&self) -> String {
format!("min: {}, sec: {}, sector: {}", self.minute, self.second, self.sector)

View File

@ -50,7 +50,16 @@ impl SectorWriter for BinCueWriter {
fn cd_da_start(&mut self) -> Result<(), Error> {
self.track += 1;
self.cue.push(CueSpecifier::Track{number: self.track, data_type: CueDataType::Audio});
// Skip pregap because why have one?
if self.track == 2 {
self.cue.push(CueSpecifier::PreGap{time: Time::cd_pregap()});
}
else {
self.cue.push(CueSpecifier::Index{number: 0, time: self.cd_time.clone()});
self.cd_time.add_sectors(Time::cd_pregap().as_sectors())?;
}
self.cue.push(CueSpecifier::Index{number: 1, time: self.cd_time.clone()});
Ok(())
}