#pragma once #include #include "Signal.h" #include "Register.h" namespace EightBit { class Bus { public: virtual ~Bus() = default; Signal WrittenByte; Signal ReadingByte; register16_t& ADDRESS(); uint8_t& DATA(); uint8_t& placeDATA(uint8_t value); uint8_t& referenceDATA(uint8_t& value); uint8_t peek(uint16_t address); void poke(uint16_t address, uint8_t value); uint16_t peekWord(uint16_t address); uint8_t read(); uint8_t read(uint16_t offset); uint8_t read(register16_t address); void write(uint8_t value); void write(uint16_t offset, uint8_t value); void write(register16_t address, uint8_t value); protected: virtual uint8_t& reference(uint16_t address, bool& rom) = 0; uint8_t& reference(); private: uint8_t* m_data = nullptr; register16_t m_address { 0xff, 0xff }; uint8_t m_temporary = 0xff; // Used to simulate ROM }; }