// // AllRAMProcessor.hpp // Clock Signal // // Created by Thomas Harte on 16/05/2017. // Copyright © 2017 Thomas Harte. All rights reserved. // #ifndef AllRAMProcessor_hpp #define AllRAMProcessor_hpp #include #include #include namespace CPU { class AllRAMProcessor { public: AllRAMProcessor(size_t memory_size); virtual uint32_t get_timestamp(); void set_data_at_address(uint16_t startAddress, size_t length, const uint8_t *data); void get_data_at_address(uint16_t startAddress, size_t length, uint8_t *data); class TrapHandler { public: virtual void processor_did_trap(AllRAMProcessor &, uint16_t address) = 0; }; void set_trap_handler(TrapHandler *trap_handler); void add_trap_address(uint16_t address); protected: std::vector memory_; uint32_t timestamp_; inline void check_address_for_trap(uint16_t address) { if(traps_[address]) { trap_handler_->processor_did_trap(*this, address); } } private: TrapHandler *trap_handler_; std::vector traps_; }; } #endif /* AllRAMProcessor_hpp */