#pragma once #include #include #include "Signal.h" namespace EightBit { class InputOutput final { public: InputOutput() = default; uint8_t read(const uint8_t port) { return readInputPort(port); } void write(const uint8_t port, const uint8_t value) { return writeOutputPort(port, value); } uint8_t readInputPort(uint8_t port); void writeInputPort(const uint8_t port, const uint8_t value) { m_input[port] = value; } uint8_t readOutputPort(const uint8_t port) { return m_output[port]; } void writeOutputPort(uint8_t port, uint8_t value); Signal ReadingPort; Signal ReadPort; Signal WritingPort; Signal WrittenPort; protected: void OnReadingPort(uint8_t port); void OnReadPort(uint8_t port); void OnWritingPort(uint8_t port); void OnWrittenPort(uint8_t port); private: std::array m_input = { 0 }; std::array m_output = { 0 }; }; }