OXYGENHUB
◆ main openmsx / src / SVIPPI.hh
1.6 KiB · C++ · last changed chore(): initial commit 1 month ago source blame history raw
1
// This class implements the mapping of the PPI (8255) into the SVI machine.
2
3
#ifndef SVIPPI_HH
4
#define SVIPPI_HH
5
6
#include "I8255.hh"
7
#include "I8255Interface.hh"
8
#include "KeyClick.hh"
9
#include "Keyboard.hh"
10
#include "MSXDevice.hh"
11
12
#include <array>
13
14
namespace openmsx {
15
16
class CassettePortInterface;
17
class JoystickPortIf;
18
19
class SVIPPI final : public MSXDevice, public I8255Interface
20
{
21
public:
22
	explicit SVIPPI(const DeviceConfig& config);
23
24
	void reset(EmuTime time) override;
25
	[[nodiscard]] uint8_t readIO(uint16_t port, EmuTime time) override;
26
	[[nodiscard]] uint8_t peekIO(uint16_t port, EmuTime time) const override;
27
	void writeIO(uint16_t port, uint8_t value, EmuTime time) override;
28
29
	template<typename Archive>
30
	void serialize(Archive& ar, unsigned version);
31
32
private:
33
	// I8255Interface
34
	[[nodiscard]] uint8_t readA (EmuTime time) override;
35
	[[nodiscard]] uint8_t readB (EmuTime time) override;
36
	[[nodiscard]] uint4_t readC0(EmuTime time) override;
37
	[[nodiscard]] uint4_t readC1(EmuTime time) override;
38
	[[nodiscard]] uint8_t peekA (EmuTime time) const override;
39
	[[nodiscard]] uint8_t peekB (EmuTime time) const override;
40
	[[nodiscard]] uint4_t peekC0(EmuTime time) const override;
41
	[[nodiscard]] uint4_t peekC1(EmuTime time) const override;
42
	void writeA (uint8_t value, EmuTime time) override;
43
	void writeB (uint8_t value, EmuTime time) override;
44
	void writeC0(uint4_t value, EmuTime time) override;
45
	void writeC1(uint4_t value, EmuTime time) override;
46
47
private:
48
	CassettePortInterface& cassettePort;
49
	I8255 i8255;
50
	KeyClick click;
51
	Keyboard keyboard;
52
	std::array<JoystickPortIf*, 2> ports;
53
	uint4_t prevBits = 15;
54
	uint4_t selectedRow = 0;
55
};
56
57
} // namespace openmsx
58
59
#endif