Browse Source
added config_mem module for HLE of firmware configuration memory settings
pull/15/merge
added config_mem module for HLE of firmware configuration memory settings
pull/15/merge
5 changed files with 100 additions and 0 deletions
-
1src/core/CMakeLists.txt
-
2src/core/core.vcxproj
-
6src/core/core.vcxproj.filters
-
70src/core/hle/config_mem.cpp
-
21src/core/hle/config_mem.h
@ -0,0 +1,70 @@ |
|||
// Copyright 2014 Citra Emulator Project
|
|||
// Licensed under GPLv2
|
|||
// Refer to the license.txt file included.
|
|||
|
|||
#include "common/common_types.h"
|
|||
#include "common/log.h"
|
|||
|
|||
#include "core/hle/config_mem.h"
|
|||
|
|||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|||
|
|||
namespace ConfigMem { |
|||
|
|||
enum { |
|||
KERNEL_VERSIONREVISION = 0x1FF80001, |
|||
KERNEL_VERSIONMINOR = 0x1FF80002, |
|||
KERNEL_VERSIONMAJOR = 0x1FF80003, |
|||
UPDATEFLAG = 0x1FF80004, |
|||
NSTID = 0x1FF80008, |
|||
SYSCOREVER = 0x1FF80010, |
|||
UNITINFO = 0x1FF80014, |
|||
KERNEL_CTRSDKVERSION = 0x1FF80018, |
|||
APPMEMTYPE = 0x1FF80030, |
|||
APPMEMALLOC = 0x1FF80040, |
|||
FIRM_VERSIONREVISION = 0x1FF80061, |
|||
FIRM_VERSIONMINOR = 0x1FF80062, |
|||
FIRM_VERSIONMAJOR = 0x1FF80063, |
|||
FIRM_SYSCOREVER = 0x1FF80064, |
|||
FIRM_CTRSDKVERSION = 0x1FF80068, |
|||
}; |
|||
|
|||
template <typename T> |
|||
inline void Read(T &var, const u32 addr) { |
|||
switch (addr) { |
|||
|
|||
// Bit 0 set for Retail
|
|||
case UNITINFO: |
|||
var = 0x00000001; |
|||
break; |
|||
|
|||
// Set app memory size to 64MB?
|
|||
case APPMEMALLOC: |
|||
var = 0x04000000; |
|||
break; |
|||
|
|||
// Unknown - normally set to: 0x08000000 - (APPMEMALLOC + *0x1FF80048)
|
|||
// (Total FCRAM size - APPMEMALLOC - *0x1FF80048)
|
|||
case 0x1FF80044: |
|||
var = 0x08000000 - (0x04000000 + 0x1400000); |
|||
break; |
|||
|
|||
// Unknown - normally set to: 0x1400000 (20MB)
|
|||
case 0x1FF80048: |
|||
var = 0x1400000; |
|||
break; |
|||
|
|||
default: |
|||
ERROR_LOG(HLE, "unknown ConfigMem::Read%d @ 0x%08X", sizeof(var) * 8, addr); |
|||
} |
|||
} |
|||
|
|||
// Explicitly instantiate template functions because we aren't defining this in the header:
|
|||
|
|||
template void Read<u64>(u64 &var, const u32 addr); |
|||
template void Read<u32>(u32 &var, const u32 addr); |
|||
template void Read<u16>(u16 &var, const u32 addr); |
|||
template void Read<u8>(u8 &var, const u32 addr); |
|||
|
|||
|
|||
} // namespace
|
|||
@ -0,0 +1,21 @@ |
|||
// Copyright 2014 Citra Emulator Project |
|||
// Licensed under GPLv2 |
|||
// Refer to the license.txt file included. |
|||
|
|||
#pragma once |
|||
|
|||
// Configuration memory stores various hardware/kernel configuration settings. This memory page is |
|||
// read-only for ARM11 processes. I'm guessing this would normally be written to by the firmware/ |
|||
// bootrom. Because we're not emulating this, and essentially just "stubbing" the functionality, I'm |
|||
// putting this as a subset of HLE for now. |
|||
|
|||
#include "common/common_types.h" |
|||
|
|||
//////////////////////////////////////////////////////////////////////////////////////////////////// |
|||
|
|||
namespace ConfigMem { |
|||
|
|||
template <typename T> |
|||
inline void Read(T &var, const u32 addr); |
|||
|
|||
} // namespace |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue