OXYGENHUB
◆ main openmsx / src / fdc / DMKDiskImage.hh
1.3 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#ifndef DMKDISKIMAGE_HH
2
#define DMKDISKIMAGE_HH
3
4
#include "Disk.hh"
5
#include <memory>
6
7
namespace openmsx {
8
9
class File;
10
11
/** DMK disk image. A description of the file format can be found
12
  *   in doc/DMK-Format-Details.txt or at the original site:
13
  *   http://www.trs-80.com/wordpress/dsk-and-dmk-image-utilities/
14
  *   (at the bottom of the page)
15
  */
16
class DMKDiskImage final : public Disk
17
{
18
public:
19
	DMKDiskImage(Filename filename, std::shared_ptr<File> file);
20
21
	void readTrack(uint8_t track, uint8_t side, RawTrack& output) override;
22
	void writeTrackImpl(uint8_t track, uint8_t side, const RawTrack& input) override;
23
24
	// logical sector emulation for SectorAccessibleDisk
25
	void readSectorImpl (size_t sector,       SectorBuffer& buf) override;
26
	void writeSectorImpl(size_t sector, const SectorBuffer& buf) override;
27
	[[nodiscard]] size_t getNbSectorsImpl() override;
28
	[[nodiscard]] bool isWriteProtectedImpl() const override;
29
	[[nodiscard]] Sha1Sum getSha1SumImpl(FilePool& filePool) override;
30
31
private:
32
	void detectGeometryFallback() override;
33
34
	void seekTrack(uint8_t track, uint8_t side);
35
	void doWriteTrack(uint8_t track, uint8_t side, const RawTrack& input);
36
	void extendImageToTrack(uint8_t track);
37
38
private:
39
	std::shared_ptr<File> file;
40
	unsigned dmkTrackLen;
41
	uint8_t numTracks;
42
	bool singleSided;
43
	bool writeProtected;
44
};
45
46
} // namespace openmsx
47
48
#endif