OXYGENHUB
◆ main openmsx / src / memory / MSXHBI55.hh
1.5 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
#ifndef MSXHBI55_HH
2
#define MSXHBI55_HH
3
4
#include "SRAM.hh"
5
6
#include "I8255.hh"
7
#include "I8255Interface.hh"
8
#include "MSXDevice.hh"
9
#include "serialize_meta.hh"
10
11
namespace openmsx {
12
13
class MSXHBI55 final : public MSXDevice, public I8255Interface
14
{
15
public:
16
	explicit MSXHBI55(const DeviceConfig& config);
17
18
	void reset(EmuTime time) override;
19
	[[nodiscard]] uint8_t readIO(uint16_t port, EmuTime time) override;
20
	[[nodiscard]] uint8_t peekIO(uint16_t port, EmuTime time) const override;
21
	void writeIO(uint16_t port, uint8_t value, EmuTime time) override;
22
23
	template<typename Archive>
24
	void serialize(Archive& ar, unsigned version);
25
26
private:
27
	// I8255Interface
28
	[[nodiscard]] uint8_t readA (EmuTime time) override;
29
	[[nodiscard]] uint8_t readB (EmuTime time) override;
30
	[[nodiscard]] uint4_t readC0(EmuTime time) override;
31
	[[nodiscard]] uint4_t readC1(EmuTime time) override;
32
	[[nodiscard]] uint8_t peekA (EmuTime time) const override;
33
	[[nodiscard]] uint8_t peekB (EmuTime time) const override;
34
	[[nodiscard]] uint4_t peekC0(EmuTime time) const override;
35
	[[nodiscard]] uint4_t peekC1(EmuTime time) const override;
36
	void writeA (uint8_t value, EmuTime time) override;
37
	void writeB (uint8_t value, EmuTime time) override;
38
	void writeC0(uint4_t value, EmuTime time) override;
39
	void writeC1(uint4_t value, EmuTime time) override;
40
41
	void writeStuff();
42
	uint8_t readStuff() const;
43
44
private:
45
	I8255 i8255;
46
	SRAM sram;
47
	uint8_t lastC; // hack to approach a 'floating value'
48
};
49
SERIALIZE_CLASS_VERSION(MSXHBI55, 2);
50
51
} // namespace openmsx
52
53
#endif