diff options
| author | bunnei <bunneidev@gmail.com> | 2014-05-08 17:16:35 -0400 |
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2014-05-08 17:16:35 -0400 |
| commit | bdc54d0d4897841a4d24aee80311bfb1f0eba884 (patch) | |
| tree | 558d87c83fe8f7e8e3e57644407c872244ee5a3a /src/core/hle/coprocessor.cpp | |
| parent | d4bf68b6503129fc32639c2fdbe98df8d5855d66 (diff) | |
| parent | b39cd3a64c69792ffd720ffa6e0f5fe35740a087 (diff) | |
Merge pull request #15 from bunnei/hle-services
Various fixes/improvements to HLE of 3DS services, mostly cleans up GSP call decoding
Diffstat (limited to 'src/core/hle/coprocessor.cpp')
| -rw-r--r-- | src/core/hle/coprocessor.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/core/hle/coprocessor.cpp b/src/core/hle/coprocessor.cpp new file mode 100644 index 000000000..74305331c --- /dev/null +++ b/src/core/hle/coprocessor.cpp @@ -0,0 +1,50 @@ +// Copyright 2014 Citra Emulator Project +// Licensed under GPLv2 +// Refer to the license.txt file included. + +#include "core/hle/coprocessor.h" +#include "core/hle/hle.h" +#include "core/mem_map.h" +#include "core/core.h" + +namespace HLE { + +/// Data synchronization barrier +u32 DataSynchronizationBarrier() { + return 0; +} + +/// Returns the coprocessor (in this case, syscore) command buffer pointer +Addr GetThreadCommandBuffer() { + // Called on insruction: mrc p15, 0, r0, c13, c0, 3 + return Memory::KERNEL_MEMORY_VADDR; +} + +/// Call an MCR (move to coprocessor from ARM register) instruction in HLE +s32 CallMCR(u32 instruction, u32 value) { + CoprocessorOperation operation = (CoprocessorOperation)((instruction >> 20) & 0xFF); + ERROR_LOG(OSHLE, "unimplemented MCR instruction=0x%08X, operation=%02X, value=%08X", + instruction, operation, value); + return 0; +} + +/// Call an MRC (move to ARM register from coprocessor) instruction in HLE +s32 CallMRC(u32 instruction) { + CoprocessorOperation operation = (CoprocessorOperation)((instruction >> 20) & 0xFF); + + switch (operation) { + + case DATA_SYNCHRONIZATION_BARRIER: + return DataSynchronizationBarrier(); + + case CALL_GET_THREAD_COMMAND_BUFFER: + return GetThreadCommandBuffer(); + + default: + ERROR_LOG(OSHLE, "unimplemented MRC instruction 0x%08X", instruction); + break; + } + return 0; +} + +} // namespace |
