diff options
author | Lioncash <mathew1800@gmail.com> | 2015-03-11 21:10:14 +0100 |
---|---|---|
committer | Lioncash <mathew1800@gmail.com> | 2015-03-17 20:13:32 +0100 |
commit | 9fdb311d6e2d636c4599ddc3d4cb9adad6cec540 (patch) | |
tree | 358501f8f2e31c7c27ee17c62996ef01e21354c7 /src/core/arm/skyeye_common/armmmu.h | |
parent | dyncom: Implement SETEND (diff) | |
download | yuzu-9fdb311d6e2d636c4599ddc3d4cb9adad6cec540.tar yuzu-9fdb311d6e2d636c4599ddc3d4cb9adad6cec540.tar.gz yuzu-9fdb311d6e2d636c4599ddc3d4cb9adad6cec540.tar.bz2 yuzu-9fdb311d6e2d636c4599ddc3d4cb9adad6cec540.tar.lz yuzu-9fdb311d6e2d636c4599ddc3d4cb9adad6cec540.tar.xz yuzu-9fdb311d6e2d636c4599ddc3d4cb9adad6cec540.tar.zst yuzu-9fdb311d6e2d636c4599ddc3d4cb9adad6cec540.zip |
Diffstat (limited to 'src/core/arm/skyeye_common/armmmu.h')
-rw-r--r-- | src/core/arm/skyeye_common/armmmu.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/src/core/arm/skyeye_common/armmmu.h b/src/core/arm/skyeye_common/armmmu.h index 6e54142ee..0f9eadafa 100644 --- a/src/core/arm/skyeye_common/armmmu.h +++ b/src/core/arm/skyeye_common/armmmu.h @@ -20,6 +20,9 @@ #pragma once +#include "core/mem_map.h" +#include "core/arm/skyeye_common/armdefs.h" + // Register numbers in the MMU enum { @@ -54,3 +57,55 @@ enum XSCALE_CP15_AUX_CONTROL = 1, XSCALE_CP15_COPRO_ACCESS = 15, }; + +// Reads data in big/little endian format based on the +// state of the E (endian) bit in the emulated CPU's APSR. +inline u16 ReadMemory16(ARMul_State* cpu, u32 address) { + u16 data = Memory::Read16(address); + + if (InBigEndianMode(cpu)) + data = Common::swap16(data); + + return data; +} + +inline u32 ReadMemory32(ARMul_State* cpu, u32 address) { + u32 data = Memory::Read32(address); + + if (InBigEndianMode(cpu)) + data = Common::swap32(data); + + return data; +} + +inline u64 ReadMemory64(ARMul_State* cpu, u32 address) { + u64 data = Memory::Read64(address); + + if (InBigEndianMode(cpu)) + data = Common::swap64(data); + + return data; +} + +// Writes data in big/little endian format based on the +// state of the E (endian) bit in the emulated CPU's APSR. +inline void WriteMemory16(ARMul_State* cpu, u32 address, u16 data) { + if (InBigEndianMode(cpu)) + data = Common::swap16(data); + + Memory::Write16(address, data); +} + +inline void WriteMemory32(ARMul_State* cpu, u32 address, u32 data) { + if (InBigEndianMode(cpu)) + data = Common::swap32(data); + + Memory::Write32(address, data); +} + +inline void WriteMemory64(ARMul_State* cpu, u32 address, u64 data) { + if (InBigEndianMode(cpu)) + data = Common::swap64(data); + + Memory::Write64(address, data); +} |