Start to move CDXA code around

This commit is contained in:
2024-05-31 23:47:39 +02:00
parent 9fab686e1e
commit 658eed7b46
6 changed files with 101 additions and 102 deletions

View File

@@ -49,15 +49,19 @@ namespace JabyEngine {
}
};
namespace IRQ {
void read_sector_to(uint32_t* dst, size_t bytes);
void resume_at(const BCDTimeStamp& cd_time);
}
static State read_current_state() {
return const_cast<volatile State&>(current_state);
}
void read_file(AutoLBAEntry file_info, const SectorBufferAllocator& buffer_allocator);
void read_xa(uint32_t lba, uint8_t channel);
void continue_reading();
CDTimeStamp get_lock();
BCDTimeStamp get_loc();
void enable_CDDA();
void enable_CDXA(bool double_speed);

View File

@@ -62,7 +62,7 @@ namespace JabyEngine {
}
};
struct CDTimeStamp {
struct BCDTimeStamp {
static constexpr size_t MaxSector = 75;
static constexpr size_t MaxSeconds = 60;
@@ -70,23 +70,15 @@ namespace JabyEngine {
uint8_t sec;
uint8_t sector;
static constexpr CDTimeStamp from(uint32_t lba) {
static constexpr BCDTimeStamp from_time(uint8_t min, uint8_t sec, uint8_t sectors) {
return BCDTimeStamp{.min = to_bcd(min), .sec = to_bcd(sec), .sector = to_bcd(sectors)};
}
static constexpr BCDTimeStamp from(uint32_t lba) {
const auto [min, new_lba] = div_and_mod(lba, MaxSector*MaxSeconds);
const auto [sec, sectors] = div_and_mod(new_lba, MaxSector);
return CDTimeStamp{static_cast<uint8_t>(min), static_cast<uint8_t>(sec), static_cast<uint8_t>(sectors)};
}
constexpr uint8_t get_min_cd() const {
return to_bcd(this->min);
}
constexpr uint8_t get_sec_cd() const {
return to_bcd(this->sec);
}
constexpr uint8_t get_sector_cd() const {
return to_bcd(this->sector);
return BCDTimeStamp::from_time(min, sec, sectors);
}
};
}