#ifndef _MEMORYMAP_H_ #define _MEMORYMAP_H_ #include "Types.h" #include #include enum MEMORYMAP_ENDIANESS { MEMORYMAP_ENDIAN_LSBF, MEMORYMAP_ENDIAN_MSBF, }; class CMemoryMap { public: typedef std::tr1::function WriteNotifyHandlerType; typedef std::tr1::function MemoryMapHandlerType; enum MEMORYMAP_TYPE { MEMORYMAP_TYPE_MEMORY, MEMORYMAP_TYPE_FUNCTION }; struct MEMORYMAPELEMENT { uint32 nStart; uint32 nEnd; void* pPointer; MemoryMapHandlerType handler; MEMORYMAP_TYPE nType; }; typedef std::map MemoryMapListType; virtual ~CMemoryMap(); uint8 GetByte(uint32); virtual uint16 GetHalf(uint32) = 0; virtual uint32 GetWord(uint32) = 0; virtual uint32 GetInstruction(uint32) = 0; virtual void SetByte(uint32, uint8); virtual void SetHalf(uint32, uint16) = 0; virtual void SetWord(uint32, uint32) = 0; void InsertReadMap(uint32, uint32, void*, unsigned char); void InsertReadMap(uint32, uint32, const MemoryMapHandlerType&, unsigned char); void InsertWriteMap(uint32, uint32, void*, unsigned char); void InsertWriteMap(uint32, uint32, const MemoryMapHandlerType&, unsigned char); void InsertInstructionMap(uint32, uint32, void*, unsigned char); MEMORYMAPELEMENT* GetReadMap(uint32); MEMORYMAPELEMENT* GetWriteMap(uint32); void SetWriteNotifyHandler(const WriteNotifyHandlerType&); protected: WriteNotifyHandlerType m_WriteNotifyHandler; static MEMORYMAPELEMENT* GetMap(MemoryMapListType&, uint32); MemoryMapListType m_instructionMap; MemoryMapListType m_readMap; MemoryMapListType m_writeMap; private: static void InsertMap(MemoryMapListType&, uint32, uint32, void*, unsigned char); static void InsertMap(MemoryMapListType&, uint32, uint32, const MemoryMapHandlerType&, unsigned char); static void DeleteMap(MemoryMapListType&); }; class CMemoryMap_LSBF : public CMemoryMap { public: uint16 GetHalf(uint32); uint32 GetWord(uint32); uint32 GetInstruction(uint32); void SetHalf(uint32, uint16); void SetWord(uint32, uint32); }; #endif