00001 // 00002 // Copyright (c) 2005-2008 Kenichi Watanabe. 00003 // Copyright (c) 2005-2008 Yasuhiro Watari. 00004 // Copyright (c) 2005-2008 Hironori Ichibayashi. 00005 // Copyright (c) 2008-2009 Kazuo Horio. 00006 // Copyright (c) 2009-2013 Naruki Kurata. 00007 // Copyright (c) 2005-2013 Ryota Shioya. 00008 // Copyright (c) 2005-2013 Masahiro Goshima. 00009 // 00010 // This software is provided 'as-is', without any express or implied 00011 // warranty. In no event will the authors be held liable for any damages 00012 // arising from the use of this software. 00013 // 00014 // Permission is granted to anyone to use this software for any purpose, 00015 // including commercial applications, and to alter it and redistribute it 00016 // freely, subject to the following restrictions: 00017 // 00018 // 1. The origin of this software must not be misrepresented; you must not 00019 // claim that you wrote the original software. If you use this software 00020 // in a product, an acknowledgment in the product documentation would be 00021 // appreciated but is not required. 00022 // 00023 // 2. Altered source versions must be plainly marked as such, and must not be 00024 // misrepresented as being the original software. 00025 // 00026 // 3. This notice may not be removed or altered from any source 00027 // distribution. 00028 // 00029 // 00030 00031 00032 #ifndef __EMULATORUTILITY_MEMORY_UTILITY_H__ 00033 #define __EMULATORUTILITY_MEMORY_UTILITY_H__ 00034 00035 #include "Emu/Utility/System/Memory/MemorySystem.h" 00036 00037 namespace Onikiri { 00038 namespace EmulatorUtility { 00039 00040 class EmuMemAccess : public MemAccess 00041 { 00042 public: 00043 00044 EmuMemAccess( u64 address, int size, bool sign = false ) 00045 { 00046 this->address.address = address; 00047 this->size = size; 00048 this->sign = sign; 00049 } 00050 00051 EmuMemAccess( u64 address, int size, u64 value ) 00052 { 00053 this->address.address = address; 00054 this->size = size; 00055 this->value = value; 00056 } 00057 00058 }; 00059 00060 // target obt@ host AIRs[DfXgNg (readOnly s) 00061 // Getobt@C target 00062 class TargetBuffer 00063 { 00064 public: 00065 TargetBuffer(MemorySystem* memory, u64 targetAddr, size_t size, bool readOnly = false); 00066 ~TargetBuffer(); 00067 void* Get(); 00068 const void* Get() const; 00069 private: 00070 MemorySystem* m_memory; 00071 u8* m_buf; 00072 u64 m_targetAddr; 00073 size_t m_bufSize; 00074 bool m_readOnly; 00075 }; 00076 00077 // Utility 00078 00079 // targetAddr 00080 u64 TargetStrlen(MemorySystem* mem, u64 targetAddr); 00081 00082 // Get c string data from the targetAddr. 00083 std::string StrCpyToHost(MemorySystem* mem, u64 targetAddr); 00084 00085 } // namespace EmulatorUtility 00086 } // namespace Onikiri 00087 00088 #endif