CDROM: Initial debug windows

This commit is contained in:
Connor McLaughlin
2019-10-17 23:54:51 +10:00
parent a6a121f8fe
commit 0324ae2fd7
5 changed files with 142 additions and 23 deletions

View File

@ -11,20 +11,6 @@ CDImage::~CDImage()
m_data_file->Release();
}
constexpr u64 CDImage::MSFToLBA(u32 pregap_seconds, u32 minute, u32 second, u32 frame)
{
return ZeroExtend64(minute) * FRAMES_PER_MINUTE + ZeroExtend64(second) * FRAMES_PER_SECOND + ZeroExtend64(frame) -
ZeroExtend64(pregap_seconds) * FRAMES_PER_SECOND;
}
constexpr void CDImage::LBAToMSF(u32 pregap_seconds, u64 lba, u32* minute, u32* second, u32* frame)
{
const u64 offset = (lba + (pregap_seconds * FRAMES_PER_SECOND) % FRAMES_PER_MINUTE);
*minute = Truncate32(lba / FRAMES_PER_MINUTE);
*second = Truncate32(offset / FRAMES_PER_SECOND);
*frame = Truncate32(offset % FRAMES_PER_SECOND);
}
bool CDImage::Open(const char* path)
{
Assert(!m_data_file);
@ -35,6 +21,7 @@ bool CDImage::Open(const char* path)
return false;
}
m_filename = path;
m_lba_count = m_data_file->GetSize() / RAW_SECTOR_SIZE;
return true;
}

View File

@ -1,6 +1,7 @@
#pragma once
#include "bitfield.h"
#include "types.h"
#include <tuple>
class ByteStream;
@ -37,11 +38,25 @@ public:
};
// Conversion helpers.
static constexpr u64 MSFToLBA(u32 pregap_seconds, u32 minute, u32 second, u32 frame);
static constexpr void LBAToMSF(u32 pregap_seconds, u64 lba, u32* minute, u32* second, u32* frame);
static constexpr u64 MSFToLBA(u32 pregap_seconds, u32 minute, u32 second, u32 frame)
{
return ZeroExtend64(minute) * FRAMES_PER_MINUTE + ZeroExtend64(second) * FRAMES_PER_SECOND + ZeroExtend64(frame) -
ZeroExtend64(pregap_seconds) * FRAMES_PER_SECOND;
}
static constexpr std::tuple<u32, u32, u32> LBAToMSF(u32 pregap_seconds, u64 lba)
{
const u64 offset = (lba + (pregap_seconds * FRAMES_PER_SECOND) % FRAMES_PER_MINUTE);
const u32 minute = Truncate32(lba / FRAMES_PER_MINUTE);
const u32 second = Truncate32(offset / FRAMES_PER_SECOND);
const u32 frame = Truncate32(offset % FRAMES_PER_SECOND);
return std::make_tuple(minute, second, frame);
}
// Accessors.
const std::string& GetFileName() const { return m_filename; }
u32 GetPregapSeconds() const { return m_pregap_seconds; }
u64 GetCurrentLBA() const { return m_current_lba; }
std::tuple<u32, u32, u32> GetPositionMSF() const { return LBAToMSF(m_pregap_seconds, m_current_lba); }
u64 GetLBACount() const { return m_lba_count; }
bool Open(const char* path);
@ -60,6 +75,8 @@ public:
u32 Read(ReadMode read_mode, u32 sector_count, void* buffer);
private:
std::string m_filename;
// TODO: Multiple data files from cue sheet
ByteStream* m_data_file = nullptr;