OXYGENHUB
◆ main openmsx / src / fdc / DSKDiskImage.cc
1.2 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#include "DSKDiskImage.hh"
2
3
#include "File.hh"
4
#include "Filename.hh"
5
#include "FilePool.hh"
6
7
namespace openmsx {
8
9
DSKDiskImage::DSKDiskImage(const Filename& fileName)
10
	: SectorBasedDisk(DiskName(fileName))
11
	, file(std::make_shared<File>(fileName.getResolved(), File::OpenMode::PRE_CACHE))
12
{
13
	setNbSectors(file->getSize() / sizeof(SectorBuffer));
14
}
15
16
DSKDiskImage::DSKDiskImage(const Filename& fileName,
17
                           std::shared_ptr<File> file_)
18
	: SectorBasedDisk(DiskName(fileName))
19
	, file(std::move(file_))
20
{
21
	setNbSectors(file->getSize() / sizeof(SectorBuffer));
22
}
23
24
void DSKDiskImage::readSectorsImpl(
25
	std::span<SectorBuffer> buffers, size_t startSector)
26
{
27
	file->seek(startSector * sizeof(SectorBuffer));
28
	file->read(buffers);
29
}
30
31
void DSKDiskImage::writeSectorImpl(size_t sector, const SectorBuffer& buf)
32
{
33
	file->seek(sector * sizeof(buf));
34
	file->write(buf.raw);
35
}
36
37
bool DSKDiskImage::isWriteProtectedImpl() const
38
{
39
	return file->isReadOnly();
40
}
41
42
Sha1Sum DSKDiskImage::getSha1SumImpl(FilePool& filePool)
43
{
44
	if (hasPatches()) {
45
		return SectorAccessibleDisk::getSha1SumImpl(filePool);
46
	}
47
	return filePool.getSha1Sum(*file, getName().getResolved());
48
}
49
50
} // namespace openmsx