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:
22 
27  virtual void setMotor(bool status, EmuTime::param time) = 0;
28 
36  virtual void cassetteOut(bool output, EmuTime::param time) = 0;
37 
42  virtual bool lastOut() const = 0;
43 
52  virtual bool cassetteIn(EmuTime::param time) = 0;
53 
54 #if COMPONENT_LASERDISC
55 
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();
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  bool lastOut() const override;
75 
76  // Connector
77  const std::string getDescription() const override;
78  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  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  bool lastOut() const override;
109 };
110 
111 } // namespace openmsx
112 
113 #endif
Represents something you can plug devices into.
Definition: Connector.hh:20
virtual bool cassetteIn(EmuTime::param time)=0
Reads one bit from the cassette port.
virtual void setLaserdiscPlayer(LaserdiscPlayer *laserdisc)=0
Set the Laserdisc Player; when the motor control is off, sound is read from the laserdisc.
SERIALIZE_CLASS_VERSION(CassettePlayer, 2)
virtual bool lastOut() const =0
last bit written to CasOut.
Thanks to enen for testing this on a real cartridge:
Definition: Autofire.cc:5
This class implements a (close approximation) of the std::string_view class.
Definition: string_view.hh:15
virtual void cassetteOut(bool output, EmuTime::param time)=0
Writes one bit to the cassette port.
void serialize(Archive &ar, T &t, unsigned version)
virtual void setMotor(bool status, EmuTime::param time)=0
Sets the cassette motor relay false = off true = on.