BeerIDE.hh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #ifndef BEERIDE_HH
  2. #define BEERIDE_HH
  3. // Based on the blueMSX implementation:
  4. // Source: /cygdrive/d/Private/_SVNROOT/bluemsx/blueMSX/Src/Memory/romMapperBeerIDE.c,v Revision: 1.9 Date: 2008-03-31 19:42:22
  5. /*
  6. PPI NAME IDE PIN
  7. --- ---- -------
  8. PA0 HD0 17 D0
  9. PA1 HD1 15 D1
  10. PA2 HD2 13 D2
  11. PA3 HD3 11 D3
  12. PA4 HD4 9 D4
  13. PA5 HD5 7 D5
  14. PA6 HD6 5 D6
  15. PA7 HD7 3 D7
  16. PB0 HD8 4 D8
  17. PB1 HD9 6 D9
  18. PB2 HD10 8 D10
  19. PB3 HD11 10 D11
  20. PB4 HD12 12 D12
  21. PB5 HD13 14 D13
  22. PB6 HD14 16 D14
  23. PB7 HD15 18 D15
  24. PC0 HA0 35 A0
  25. PC1 HA1 33 A1
  26. PC2 HA2 36 A2
  27. PC3 N/A
  28. PC4 N/A
  29. PC5 HCS 37 /CS0
  30. PC6 HWR 23 /IOWR
  31. PC7 HRD 25 /IORD
  32. */
  33. #include "MSXDevice.hh"
  34. #include "I8255Interface.hh"
  35. #include "I8255.hh"
  36. #include "Rom.hh"
  37. #include <memory>
  38. namespace openmsx {
  39. class IDEDevice;
  40. class BeerIDE final : public MSXDevice, public I8255Interface
  41. {
  42. public:
  43. explicit BeerIDE(const DeviceConfig& config);
  44. ~BeerIDE() override;
  45. void reset(EmuTime::param time) override;
  46. byte readMem(word address, EmuTime::param time) override;
  47. const byte* getReadCacheLine(word start) const override;
  48. byte peekIO(word port, EmuTime::param time) const override;
  49. byte readIO(word port, EmuTime::param time) override;
  50. void writeIO(word port, byte value, EmuTime::param time) override;
  51. template<typename Archive>
  52. void serialize(Archive& ar, unsigned version);
  53. private:
  54. void changeControl(byte value, EmuTime::param time);
  55. // I8255Interface
  56. byte readA(EmuTime::param time) override;
  57. byte readB(EmuTime::param time) override;
  58. nibble readC0(EmuTime::param time) override;
  59. nibble readC1(EmuTime::param time) override;
  60. byte peekA(EmuTime::param time) const override;
  61. byte peekB(EmuTime::param time) const override;
  62. nibble peekC0(EmuTime::param time) const override;
  63. nibble peekC1(EmuTime::param time) const override;
  64. void writeA(byte value, EmuTime::param time) override;
  65. void writeB(byte value, EmuTime::param time) override;
  66. void writeC0(nibble value, EmuTime::param time) override;
  67. void writeC1(nibble value, EmuTime::param time) override;
  68. I8255 i8255;
  69. Rom rom;
  70. std::unique_ptr<IDEDevice> device;
  71. word dataReg;
  72. byte controlReg;
  73. };
  74. } // namespace openmsx
  75. #endif