#pragma once #include #include #include "Signal.h" namespace EightBit { class InputOutput final { public: InputOutput() = default; [[nodiscard]] auto read(const uint8_t port) { return readInputPort(port); } void write(const uint8_t port, const uint8_t value) { writeOutputPort(port, value); } [[nodiscard]] uint8_t readInputPort(uint8_t port); void writeInputPort(const uint8_t port, const uint8_t value) noexcept { m_input[port] = value; } [[nodiscard]] auto readOutputPort(const uint8_t port) noexcept { 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 }; }; }