SVIPPI.hh 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. // This class implements the mapping of the PPI (8255) into the SVI machine.
  2. #ifndef SVIPPI_HH
  3. #define SVIPPI_HH
  4. #include "MSXDevice.hh"
  5. #include "I8255Interface.hh"
  6. #include "I8255.hh"
  7. #include "Keyboard.hh"
  8. #include "KeyClick.hh"
  9. namespace openmsx {
  10. class CassettePortInterface;
  11. class JoystickPortIf;
  12. class SVIPPI final : public MSXDevice, public I8255Interface
  13. {
  14. public:
  15. SVIPPI(const DeviceConfig& config);
  16. void reset(EmuTime::param time) override;
  17. byte readIO(word port, EmuTime::param time) override;
  18. byte peekIO(word port, EmuTime::param time) const override;
  19. void writeIO(word port, byte value, EmuTime::param time) override;
  20. template<typename Archive>
  21. void serialize(Archive& ar, unsigned version);
  22. private:
  23. // I8255Interface
  24. byte readA(EmuTime::param time) override;
  25. byte readB(EmuTime::param time) override;
  26. nibble readC0(EmuTime::param time) override;
  27. nibble readC1(EmuTime::param time) override;
  28. byte peekA(EmuTime::param time) const override;
  29. byte peekB(EmuTime::param time) const override;
  30. nibble peekC0(EmuTime::param time) const override;
  31. nibble peekC1(EmuTime::param time) const override;
  32. void writeA(byte value, EmuTime::param time) override;
  33. void writeB(byte value, EmuTime::param time) override;
  34. void writeC0(nibble value, EmuTime::param time) override;
  35. void writeC1(nibble value, EmuTime::param time) override;
  36. CassettePortInterface& cassettePort;
  37. I8255 i8255;
  38. KeyClick click;
  39. Keyboard keyboard;
  40. JoystickPortIf* ports[2];
  41. nibble prevBits;
  42. nibble selectedRow;
  43. };
  44. } // namespace openmsx
  45. #endif