OXYGENHUB
◆ main openmsx / src / sound / MSXMusic.hh
1.8 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
e8555c89 Andy McCall 1
#ifndef MSXMUSIC_HH
2
#define MSXMUSIC_HH
3
4
#include "MSXDevice.hh"
5
#include "Rom.hh"
6
#include "YM2413.hh"
7
#include "serialize_meta.hh"
8
9
namespace openmsx {
10
11
class MSXMusicBase : public MSXDevice
12
{
13
public:
14
	void reset(EmuTime time) override;
15
	void writeIO(uint16_t port, byte value, EmuTime time) override;
16
	[[nodiscard]] byte peekMem(uint16_t address, EmuTime time) const override;
17
	[[nodiscard]] byte readMem(uint16_t address, EmuTime time) override;
18
	[[nodiscard]] const byte* getReadCacheLine(uint16_t start) const override;
19
20
	template<typename Archive>
21
	void serialize(Archive& ar, unsigned version);
22
23
protected:
24
	explicit MSXMusicBase(DeviceConfig& config);
25
	~MSXMusicBase() override = default;
26
27
	void writePort(bool port, byte value, EmuTime time);
28
29
protected:
30
	Rom rom;
31
	YM2413 ym2413;
32
};
33
SERIALIZE_CLASS_VERSION(MSXMusicBase, 3);
34
35
36
class MSXMusic final : public MSXMusicBase
37
{
38
public:
39
	explicit MSXMusic(DeviceConfig& config);
40
41
	template<typename Archive>
42
	void serialize(Archive& ar, unsigned version);
43
};
44
SERIALIZE_CLASS_VERSION(MSXMusic, 3); // must be same as MSXMusicBase
45
46
47
// Variant used in Panasonic_FS-A1WX and Panasonic_FS-A1WSX
48
class MSXMusicWX final : public MSXMusicBase
49
{
50
public:
51
	explicit MSXMusicWX(DeviceConfig& config);
52
53
	void reset(EmuTime time) override;
54
	[[nodiscard]] byte peekMem(uint16_t address, EmuTime time) const override;
55
	[[nodiscard]] byte readMem(uint16_t address, EmuTime time) override;
56
	[[nodiscard]] const byte* getReadCacheLine(uint16_t start) const override;
57
	void writeMem(uint16_t address, byte value, EmuTime time) override;
58
	[[nodiscard]] byte* getWriteCacheLine(uint16_t start) override;
59
60
	template<typename Archive>
61
	void serialize(Archive& ar, unsigned version);
62
63
private:
64
	byte control;
65
};
66
SERIALIZE_CLASS_VERSION(MSXMusicWX, 3); // must be same as MSXMusicBase
67
68
} // namespace openmsx
69
70
#endif