OXYGENHUB
◆ main openmsx / src / ChakkariCopy.hh
1.4 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#ifndef CHAKKARICOPY_HH
2
#define CHAKKARICOPY_HH
3
4
#include "BooleanSetting.hh"
5
#include "EnumSetting.hh"
6
#include "MSXDevice.hh"
7
#include "Ram.hh"
8
#include "Rom.hh"
9
10
#include <cstdint>
11
12
namespace openmsx {
13
14
class ChakkariCopy final : public MSXDevice, private Observer<Setting>
15
{
16
public:
17
	enum class Mode : uint8_t { COPY, RAM };
18
19
	explicit ChakkariCopy(DeviceConfig& config);
20
	~ChakkariCopy() override;
21
22
	void reset(EmuTime time) override;
23
	void writeIO(uint16_t port, byte value, EmuTime time) override;
24
	[[nodiscard]] byte readIO(uint16_t port, EmuTime time) override;
25
	[[nodiscard]] byte peekIO(uint16_t port, EmuTime time) const override;
26
	[[nodiscard]] byte readMem(uint16_t address, EmuTime time) override;
27
	[[nodiscard]] byte peekMem(uint16_t address, EmuTime time) const override;
28
	[[nodiscard]] const byte* getReadCacheLine(uint16_t address) const override;
29
	void writeMem(uint16_t address, byte value, EmuTime time) override;
30
	[[nodiscard]] byte* getWriteCacheLine(uint16_t address) override;
31
32
	template<typename Archive>
33
	void serialize(Archive& ar, unsigned version);
34
35
private:
36
	// Observer<Setting>
37
	void update(const Setting& setting) noexcept override;
38
39
private:
40
	Ram biosRam;
41
	Ram workRam;
42
	Rom rom;
43
44
	BooleanSetting pauseButtonPressedSetting;
45
	BooleanSetting copyButtonPressedSetting;
46
	EnumSetting<Mode> modeSetting;
47
48
	byte reg = 0xFF; // avoid UMR in initial writeIO()
49
};
50
51
} // namespace openmsx
52
53
#endif