openMSX
CassettePort.hh
Go to the documentation of this file.
1 #ifndef CASSETTEPORT_HH
2 #define CASSETTEPORT_HH
3 
4 #include "Connector.hh"
5 #include "serialize_meta.hh"
6 #include "components.hh"
7 
8 namespace openmsx {
9 
10 class HardwareConfig;
11 class MSXMotherBoard;
12 class CassetteDevice;
13 class CassettePlayer;
14 #if COMPONENT_LASERDISC
15 class LaserdiscPlayer;
16 #endif
17 
19 {
20 public:
21  virtual ~CassettePortInterface() = default;
22 
27  virtual void setMotor(bool status, EmuTime::param time) = 0;
28 
36  virtual void cassetteOut(bool output, EmuTime::param time) = 0;
37 
42  [[nodiscard]] virtual bool lastOut() const = 0;
43 
52  virtual bool cassetteIn(EmuTime::param time) = 0;
53 
54 #if COMPONENT_LASERDISC
59  virtual void setLaserdiscPlayer(LaserdiscPlayer *laserdisc) = 0;
60 #endif
61 };
62 
63 class CassettePort final : public CassettePortInterface, public Connector
64 {
65 public:
66  explicit CassettePort(const HardwareConfig& hwConf);
67  ~CassettePort() override;
68  void setMotor(bool status, EmuTime::param time) override;
69  void cassetteOut(bool output, EmuTime::param time) override;
70  bool cassetteIn(EmuTime::param time) override;
71 #if COMPONENT_LASERDISC
72  void setLaserdiscPlayer(LaserdiscPlayer* laserdisc) override;
73 #endif
74  [[nodiscard]] bool lastOut() const override;
75 
76  // Connector
77  [[nodiscard]] std::string_view getDescription() const override;
78  [[nodiscard]] std::string_view getClass() const override;
79  void unplug(EmuTime::param time) override;
80 
81  template<typename Archive>
82  void serialize(Archive& ar, unsigned version);
83 
84 private:
85  [[nodiscard]] CassetteDevice& getPluggedCasDev() const;
86 
87  MSXMotherBoard& motherBoard;
88 
89 #if COMPONENT_LASERDISC
90  LaserdiscPlayer* laserdiscPlayer;
91 #endif
92  CassettePlayer* cassettePlayer;
93 
94  bool lastOutput;
95  bool motorControl;
96 };
98 
100 {
101 public:
102  void setMotor(bool status, EmuTime::param time) override;
103  void cassetteOut(bool output, EmuTime::param time) override;
104  bool cassetteIn(EmuTime::param time) override;
105 #if COMPONENT_LASERDISC
106  void setLaserdiscPlayer(LaserdiscPlayer *laserdisc) override;
107 #endif
108  [[nodiscard]] bool lastOut() const override;
109 };
110 
111 } // namespace openmsx
112 
113 #endif
virtual ~CassettePortInterface()=default
virtual void cassetteOut(bool output, EmuTime::param time)=0
Writes one bit to the cassette port.
virtual void setMotor(bool status, EmuTime::param time)=0
Sets the cassette motor relay false = off true = on.
virtual bool cassetteIn(EmuTime::param time)=0
Reads one bit from the cassette port.
virtual bool lastOut() const =0
last bit written to CasOut.
virtual void setLaserdiscPlayer(LaserdiscPlayer *laserdisc)=0
Set the Laserdisc Player; when the motor control is off, sound is read from the laserdisc.
bool cassetteIn(EmuTime::param time) override
Reads one bit from the cassette port.
Definition: CassettePort.cc:88
void cassetteOut(bool output, EmuTime::param time) override
Writes one bit to the cassette port.
Definition: CassettePort.cc:76
bool lastOut() const override
last bit written to CasOut.
Definition: CassettePort.cc:83
void unplug(EmuTime::param time) override
This unplugs the currently inserted Pluggable from this Connector.
void serialize(Archive &ar, unsigned version)
~CassettePort() override
Definition: CassettePort.cc:63
std::string_view getClass() const override
A Connector belong to a certain class.
CassettePort(const HardwareConfig &hwConf)
Definition: CassettePort.cc:48
void setLaserdiscPlayer(LaserdiscPlayer *laserdisc) override
Set the Laserdisc Player; when the motor control is off, sound is read from the laserdisc.
void setMotor(bool status, EmuTime::param time) override
Sets the cassette motor relay false = off true = on.
Definition: CassettePort.cc:69
std::string_view getDescription() const override
Get a description for this connector.
Represents something you can plug devices into.
Definition: Connector.hh:21
bool lastOut() const override
last bit written to CasOut.
Definition: CassettePort.cc:34
void setLaserdiscPlayer(LaserdiscPlayer *laserdisc) override
Set the Laserdisc Player; when the motor control is off, sound is read from the laserdisc.
Definition: CassettePort.cc:39
bool cassetteIn(EmuTime::param time) override
Reads one bit from the cassette port.
Definition: CassettePort.cc:30
void cassetteOut(bool output, EmuTime::param time) override
Writes one bit to the cassette port.
Definition: CassettePort.cc:26
void setMotor(bool status, EmuTime::param time) override
Sets the cassette motor relay false = off true = on.
Definition: CassettePort.cc:22
This file implemented 3 utility functions:
Definition: Autofire.cc:5
SERIALIZE_CLASS_VERSION(CassettePlayer, 2)