SunriseIDE.hh 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. #ifndef SUNRISEIDE_HH
  2. #define SUNRISEIDE_HH
  3. #include "MSXDevice.hh"
  4. #include "Rom.hh"
  5. #include "RomBlockDebuggable.hh"
  6. #include <memory>
  7. namespace openmsx {
  8. class IDEDevice;
  9. class SunriseIDE final : public MSXDevice
  10. {
  11. public:
  12. explicit SunriseIDE(const DeviceConfig& config);
  13. ~SunriseIDE() override;
  14. void powerUp(EmuTime::param time) override;
  15. void reset(EmuTime::param time) override;
  16. byte readMem(word address, EmuTime::param time) override;
  17. void writeMem(word address, byte value, EmuTime::param time) override;
  18. const byte* getReadCacheLine(word start) const override;
  19. template<typename Archive>
  20. void serialize(Archive& ar, unsigned version);
  21. private:
  22. byte getBank() const;
  23. void writeControl(byte value);
  24. byte readDataLow(EmuTime::param time);
  25. byte readDataHigh(EmuTime::param time);
  26. word readData(EmuTime::param time);
  27. byte readReg(nibble reg, EmuTime::param time);
  28. void writeDataLow(byte value);
  29. void writeDataHigh(byte value, EmuTime::param time);
  30. void writeData(word value, EmuTime::param time);
  31. void writeReg(nibble reg, byte value, EmuTime::param time);
  32. struct Blocks final : RomBlockDebuggableBase {
  33. explicit Blocks(SunriseIDE& device);
  34. byte read(unsigned address) override;
  35. } romBlockDebug;
  36. Rom rom;
  37. std::unique_ptr<IDEDevice> device[2];
  38. const byte* internalBank;
  39. byte readLatch;
  40. byte writeLatch;
  41. byte selectedDevice;
  42. byte control;
  43. bool ideRegsEnabled;
  44. bool softReset;
  45. };
  46. } // namespace openmsx
  47. #endif