Start to move CDXA code around
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user