openMSX
I8255.hh
Go to the documentation of this file.
1 // This class implements the Intel 8255 chip
2 //
3 // * Only the 8255 is emulated, no surrounding hardware.
4 // Use the class I8255Interface to do that.
5 // * Only mode 0 (basic input/output) is implemented
6 
7 #ifndef I8255_HH
8 #define I8255_HH
9 
10 #include "EmuTime.hh"
11 #include "TclCallback.hh"
12 #include "openmsx.hh"
13 
14 namespace openmsx {
15 
16 class I8255Interface;
17 class StringSetting;
18 
19 class I8255
20 {
21 public:
22  I8255(I8255Interface& interf, EmuTime::param time,
23  StringSetting& invalidPpiModeSetting);
24 
25  // CPU side
26  void reset(EmuTime::param time);
27  [[nodiscard]] byte read(byte port, EmuTime::param time);
28  [[nodiscard]] byte peek(byte port, EmuTime::param time) const;
29  void write(byte port, byte value, EmuTime::param time);
30 
31  // Peripheral side, pull-interface
32  // (the I8255Interface class implements the push-interface)
33  byte getPortA() const;
34  byte getPortB() const;
35  byte getPortC() const;
36 
37  template<typename Archive>
38  void serialize(Archive& ar, unsigned version);
39 
40 private:
41  [[nodiscard]] byte readPortA(EmuTime::param time);
42  [[nodiscard]] byte readPortB(EmuTime::param time);
43  [[nodiscard]] byte readPortC(EmuTime::param time);
44  [[nodiscard]] byte readControlPort(EmuTime::param time) const;
45  [[nodiscard]] byte peekPortA(EmuTime::param time) const;
46  [[nodiscard]] byte peekPortB(EmuTime::param time) const;
47  [[nodiscard]] byte peekPortC(EmuTime::param time) const;
48  void writePortA(byte value, EmuTime::param time);
49  void writePortB(byte value, EmuTime::param time);
50  void writePortC(byte value, EmuTime::param time);
51  void writeControlPort(byte value, EmuTime::param time);
52 
53  [[nodiscard]] byte readC0(EmuTime::param time);
54  [[nodiscard]] byte readC1(EmuTime::param time);
55  [[nodiscard]] byte peekC0(EmuTime::param time) const;
56  [[nodiscard]] byte peekC1(EmuTime::param time) const;
57  void outputPortA(byte value, EmuTime::param time);
58  void outputPortB(byte value, EmuTime::param time);
59  void outputPortC(byte value, EmuTime::param time);
60 
61 private:
62  I8255Interface& interface;
63 
64  byte control;
65  byte latchPortA;
66  byte latchPortB;
67  byte latchPortC;
68 
69  TclCallback ppiModeCallback;
70 };
71 
72 } // namespace openmsx
73 
74 #endif
void reset(EmuTime::param time)
Definition: I8255.cc:33
byte getPortA() const
Definition: I8255.cc:365
I8255(I8255Interface &interf, EmuTime::param time, StringSetting &invalidPpiModeSetting)
Definition: I8255.cc:25
byte getPortC() const
Definition: I8255.cc:385
byte getPortB() const
Definition: I8255.cc:375
byte peek(byte port, EmuTime::param time) const
Definition: I8255.cc:59
byte read(byte port, EmuTime::param time)
Definition: I8255.cc:42
void serialize(Archive &ar, unsigned version)
Definition: I8255.cc:400
void write(byte port, byte value, EmuTime::param time)
Definition: I8255.cc:76
This file implemented 3 utility functions:
Definition: Autofire.cc:9