OXYGENHUB
◆ main openmsx / src / memory / SdCard.hh
934 B · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#ifndef SDCARD_HH
2
#define SDCARD_HH
3
4
#include "DiskImageUtils.hh"
5
6
#include "circular_buffer.hh"
7
8
#include <array>
9
#include <cstdint>
10
#include <memory>
11
12
namespace openmsx {
13
14
class DeviceConfig;
15
class HD;
16
17
class SdCard
18
{
19
public:
20
	explicit SdCard(const DeviceConfig& config);
21
	~SdCard();
22
23
	uint8_t transfer(uint8_t value, bool cs);
24
25
	template<typename Archive>
26
	void serialize(Archive& ar, unsigned version);
27
28
// private:
29
	enum class Mode : uint8_t {
30
		COMMAND,
31
		READ,
32
		MULTI_READ,
33
		WRITE,
34
		MULTI_WRITE
35
	};
36
37
private:
38
	void executeCommand();
39
	[[nodiscard]] uint8_t readCurrentByteFromCurrentSector();
40
41
private:
42
	const std::unique_ptr<HD> hd; // can be nullptr
43
44
	std::array<uint8_t, 6> cmdBuf;
45
	SectorBuffer sectorBuf;
46
	unsigned cmdIdx = 0;
47
48
	cb_queue<uint8_t> responseQueue;
49
50
	uint8_t transferDelayCounter = 0;
51
	Mode mode = Mode::COMMAND;
52
	unsigned currentSector = 0;
53
	int currentByteInSector = 0;
54
};
55
56
} // namespace openmsx
57
58
#endif