2023-12-13 00:40:16 -05:00
|
|
|
#include "Game/Util.hpp"
|
|
|
|
|
#include "Game/System/HeapMemoryWatcher.hpp"
|
|
|
|
|
#include "Game/SingletonHolder.hpp"
|
2022-09-15 21:19:51 -04:00
|
|
|
#include <cstdio>
|
2023-02-22 21:17:07 -05:00
|
|
|
#include <cstring>
|
2023-07-04 20:37:29 -04:00
|
|
|
#include <mem.h>
|
2023-02-22 21:17:07 -05:00
|
|
|
#include <size_t.h>
|
2021-10-18 20:38:45 -04:00
|
|
|
|
|
|
|
|
namespace MR {
|
2022-11-02 01:14:13 -04:00
|
|
|
MEMAllocatorFunc NewDeleteAllocator::sAllocatorFunc = {
|
|
|
|
|
NewDeleteAllocator::alloc,
|
|
|
|
|
NewDeleteAllocator::free,
|
|
|
|
|
};
|
2023-07-14 08:43:12 -04:00
|
|
|
MEMAllocator NewDeleteAllocator::sAllocator = { &sAllocatorFunc };
|
2022-11-02 01:14:13 -04:00
|
|
|
|
2021-10-18 20:38:45 -04:00
|
|
|
#ifdef NON_MATCHING
|
|
|
|
|
// shrug
|
|
|
|
|
s32 calcCheckSum(const void *pData, u32 a2) {
|
|
|
|
|
u32 v2 = 0;
|
|
|
|
|
u32 v3 = 0;
|
|
|
|
|
|
|
|
|
|
for (int i = a2 >> 1; i; i--) {
|
|
|
|
|
u16 curData = *(u16*)pData;
|
|
|
|
|
pData = (s8*)pData + 2;
|
|
|
|
|
v3 += curData;
|
|
|
|
|
v2 += ~curData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return (v3 << 16) | v2;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2021-10-18 23:37:08 -04:00
|
|
|
|
|
|
|
|
CurrentHeapRestorer::CurrentHeapRestorer(JKRHeap *pHeap) {
|
|
|
|
|
_0 = JKRHeap::sCurrentHeap;
|
|
|
|
|
OSLockMutex(&MR::MutexHolder<1>::sMutex);
|
|
|
|
|
MR::becomeCurrentHeap(pHeap);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
CurrentHeapRestorer::~CurrentHeapRestorer() {
|
|
|
|
|
MR::becomeCurrentHeap(_0);
|
|
|
|
|
OSUnlockMutex(&MR::MutexHolder<1>::sMutex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void* NewDeleteAllocator::alloc(MEMAllocator *pAllocator, u32 size) {
|
|
|
|
|
return new u8[size];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void NewDeleteAllocator::free(MEMAllocator *pAllocator, void *pData) {
|
|
|
|
|
delete[] (u8*)pData;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MR::getHomeButtonLayoutAllocator
|
|
|
|
|
|
|
|
|
|
JKRHeap* getCurrentHeap() {
|
|
|
|
|
return JKRHeap::sCurrentHeap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MR::getAproposHeapForSceneArchive
|
2022-08-14 03:51:14 -04:00
|
|
|
|
|
|
|
|
JKRExpHeap* MR::getStationedHeapNapa() {
|
|
|
|
|
return SingletonHolder<HeapMemoryWatcher>::sInstance->mStationedHeapNapa;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
JKRExpHeap* getStationedHeapGDDR3() {
|
|
|
|
|
return SingletonHolder<HeapMemoryWatcher>::sInstance->mStationedHeapGDDR;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
JKRSolidHeap* getSceneHeapNapa() {
|
|
|
|
|
return SingletonHolder<HeapMemoryWatcher>::sInstance->mSceneHeapNapa;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
JKRSolidHeap* getSceneHeapGDDR3() {
|
|
|
|
|
return SingletonHolder<HeapMemoryWatcher>::sInstance->mSceneHeapGDDR;
|
|
|
|
|
}
|
|
|
|
|
|
2021-10-18 23:37:08 -04:00
|
|
|
// MR::getHeapNapa
|
|
|
|
|
// MR::getHeapGDDR3
|
|
|
|
|
|
|
|
|
|
void becomeCurrentHeap(JKRHeap *pHeap) {
|
|
|
|
|
OSLockMutex(&MR::MutexHolder<1>::sMutex);
|
|
|
|
|
pHeap->becomeCurrentHeap();
|
|
|
|
|
OSUnlockMutex(&MR::MutexHolder<1>::sMutex);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
bool isEqualCurrentHeap(JKRHeap *pHeap) {
|
|
|
|
|
return pHeap == JKRHeap::sCurrentHeap;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MR::adjustHeapSize
|
|
|
|
|
// MR::copyMemory
|
|
|
|
|
|
2023-02-22 21:17:07 -05:00
|
|
|
void fillMemory(void *pDest, u8 a2, size_t size) {
|
2021-10-18 23:37:08 -04:00
|
|
|
if (a2 == 0) {
|
|
|
|
|
MR::zeroMemory(pDest, size);
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
memset(pDest, a2, size);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// MR::zeroMemory
|
|
|
|
|
// MR::calcCheckSum
|
|
|
|
|
// MR::allocFromWPadHeap
|
|
|
|
|
// MR::freeFromWPadHeap
|
2021-10-18 20:38:45 -04:00
|
|
|
};
|