MemoryMappingModule/source/main.cpp
2022-05-09 19:34:19 +02:00

84 lines
2.6 KiB
C++

#include "function_replacements.h"
#include "memory_mapping.h"
#include <coreinit/debug.h>
#include <function_patcher/function_patching.h>
#include <wums.h>
#ifdef DEBUG
#include "logger.h"
#endif
WUMS_MODULE_EXPORT_NAME("homebrew_memorymapping");
WUMS_MODULE_SKIP_INIT_FINI();
WUMS_MODULE_INIT_BEFORE_RELOCATION_DONE_HOOK();
WUMS_INITIALIZE(args) {
static uint8_t ucSetupRequired = 1;
if (!ucSetupRequired) {
return;
}
ucSetupRequired = 0;
MemoryMapping_setupMemoryMapping();
MemoryMapping_CreateHeaps();
for (uint32_t i = 0; i < function_replacements_size; i++) {
if (!FunctionPatcherPatchFunction(&function_replacements[i], nullptr)) {
OSFatal("homebrew_memorymapping: Failed to patch function");
}
}
}
#ifdef DEBUG
WUMS_APPLICATION_STARTS() {
initLogging();
}
WUMS_APPLICATION_REQUESTS_EXIT() {
deinitLogging();
}
#endif
void MemoryMappingFree(void *ptr) {
//DEBUG_FUNCTION_LINE("[%08X] free", ptr);
MemoryMapping_free(ptr);
}
uint32_t MemoryMappingEffectiveToPhysical(uint32_t address) {
return MemoryMapping_EffectiveToPhysical(address);
}
uint32_t MemoryMappingPhysicalToEffective(uint32_t address) {
return MemoryMapping_PhysicalToEffective(address);
}
void *MemoryMappingAlloc(uint32_t size) {
void *res = MemoryMapping_alloc(size, 0x04);
//DEBUG_FUNCTION_LINE("[res: %08X] alloc %d ", res, size);
return res;
}
void *MemoryMappingAllocEx(uint32_t size, int32_t align) {
void *res = MemoryMapping_alloc(size, align);
//DEBUG_FUNCTION_LINE("[res %08X] allocEX %d %d ", res, size, align);
return res;
}
void *MemoryMappingAllocForGX2Ex(uint32_t size, int32_t align) {
void *res = MemoryMapping_allocVideoMemory(size, align);
//DEBUG_FUNCTION_LINE("[res %08X] allocEX %d %d ", res, size, align);
return res;
}
uint32_t MEMAllocFromMappedMemory __attribute__((__section__(".data"))) = (uint32_t) MemoryMappingAlloc;
uint32_t MEMAllocFromMappedMemoryEx __attribute__((__section__(".data"))) = (uint32_t) MemoryMappingAllocEx;
uint32_t MEMAllocFromMappedMemoryForGX2Ex __attribute__((__section__(".data"))) = (uint32_t) MemoryMappingAllocForGX2Ex;
uint32_t MEMFreeToMappedMemory __attribute__((__section__(".data"))) = (uint32_t) MemoryMappingFree;
WUMS_EXPORT_FUNCTION(MemoryMappingEffectiveToPhysical);
WUMS_EXPORT_FUNCTION(MemoryMappingPhysicalToEffective);
WUMS_EXPORT_DATA(MEMAllocFromMappedMemory);
WUMS_EXPORT_DATA(MEMAllocFromMappedMemoryEx);
WUMS_EXPORT_DATA(MEMAllocFromMappedMemoryForGX2Ex);
WUMS_EXPORT_DATA(MEMFreeToMappedMemory);