diff --git a/UnleashedRecomp/kernel/memory.cpp b/UnleashedRecomp/kernel/memory.cpp index c2aa18a2..a52b7e7a 100644 --- a/UnleashedRecomp/kernel/memory.cpp +++ b/UnleashedRecomp/kernel/memory.cpp @@ -9,6 +9,9 @@ Memory::Memory() if (base == nullptr) base = (uint8_t*)VirtualAlloc(nullptr, PPC_MEMORY_SIZE, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE); + if (base == nullptr) + return; + DWORD oldProtect; VirtualProtect(base, 4096, PAGE_NOACCESS, &oldProtect); #else @@ -17,6 +20,9 @@ Memory::Memory() if (base == (uint8_t*)MAP_FAILED) base = (uint8_t*)mmap(NULL, PPC_MEMORY_SIZE, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); + if (base == nullptr) + return; + mprotect(base, 4096, PROT_NONE); #endif diff --git a/UnleashedRecomp/locale/locale.cpp b/UnleashedRecomp/locale/locale.cpp index 138dc417..8188e1da 100644 --- a/UnleashedRecomp/locale/locale.cpp +++ b/UnleashedRecomp/locale/locale.cpp @@ -703,6 +703,17 @@ std::unordered_map> { ELanguage::Italian, "Impossibile trovare il modulo \"%s\".\n\nAssicurati che:\n\n- Hai estratto questa copia di Unleashed Recompiled correttamente e non solo il file *.exe.\n- Non stai eseguendo Unleashed Recompiled da un file *.zip." } } }, + { + "System_MemoryAllocationFailed", + { + { ELanguage::English, "Memory allocation failed blablabla enable your pagefile, ensure it's minimum 4 or 8 GB blablablabla" }, + { ELanguage::Japanese, "" }, + { ELanguage::German, "" }, + { ELanguage::French, "" }, + { ELanguage::Spanish, "" }, + { ELanguage::Italian, "" } + } + }, { "Common_On", { diff --git a/UnleashedRecomp/main.cpp b/UnleashedRecomp/main.cpp index a55c0181..16f59397 100644 --- a/UnleashedRecomp/main.cpp +++ b/UnleashedRecomp/main.cpp @@ -51,14 +51,20 @@ void HostStartup() CoInitializeEx(nullptr, COINIT_MULTITHREADED); #endif - g_userHeap.Init(); - hid::Init(); } // Name inspired from nt's entry point void KiSystemStartup() { + if (g_memory.base == nullptr) + { + SDL_ShowSimpleMessageBox(SDL_MESSAGEBOX_ERROR, GameWindow::GetTitle(), Localise("System_MemoryAllocationFailed").c_str(), GameWindow::s_pWindow); + std::_Exit(1); + } + + g_userHeap.Init(); + const auto gameContent = XamMakeContent(XCONTENTTYPE_RESERVED, "Game"); const auto updateContent = XamMakeContent(XCONTENTTYPE_RESERVED, "Update"); XamRegisterContent(gameContent, GAME_INSTALL_DIRECTORY "/game");