From aa137dd450bab54123880eee6f072e7c35d969e4 Mon Sep 17 00:00:00 2001 From: Kronos2308 <36446521+Kronos2308@users.noreply.github.com> Date: Fri, 16 Jul 2021 13:43:59 +0100 Subject: [PATCH] 3.8 --- Makefile | 2 +- compile.cmd | 2 +- romfs/EmuKiller/startup.te | 135 ----------------------------------- romfs/README.md | 3 - romfs/ini/Haku33.bmp | Bin 0 -> 147528 bytes romfs/ini/Haku33.ini | 3 + romfs/startup.te | 25 ++++++- source/ams_bpc.c | 45 ++++++++++++ source/ams_bpc.h | 31 ++++++++ source/lang.hpp | 8 +-- source/main.cpp | 142 +++++++++++++++++++++++++++++++------ source/reboot.c | 78 -------------------- source/reboot.h | 10 --- source/service_guard.h | 56 +++++++++++++++ source/spl.cpp | 82 +++++++++++++++++++++ source/spl.hpp | 27 +++++++ stuff/mariko.jpg | Bin 0 -> 54129 bytes 17 files changed, 394 insertions(+), 255 deletions(-) delete mode 100644 romfs/EmuKiller/startup.te create mode 100644 romfs/ini/Haku33.bmp create mode 100644 romfs/ini/Haku33.ini create mode 100644 source/ams_bpc.c create mode 100644 source/ams_bpc.h delete mode 100644 source/reboot.c delete mode 100644 source/reboot.h create mode 100644 source/service_guard.h create mode 100644 source/spl.cpp create mode 100644 source/spl.hpp create mode 100644 stuff/mariko.jpg diff --git a/Makefile b/Makefile index 100f7a4..7378d2b 100644 --- a/Makefile +++ b/Makefile @@ -38,7 +38,7 @@ INCLUDES := include EXEFS_SRC := exefs_src APP_TITLE := Haku33 APP_AUTHOR := Kronos2308 -APP_VERSION := 3.6 +APP_VERSION := 3.8 ROMFS := romfs #--------------------------------------------------------------------------------- diff --git a/compile.cmd b/compile.cmd index 356271f..0247148 100644 --- a/compile.cmd +++ b/compile.cmd @@ -6,7 +6,7 @@ dir /b *.nro>%temp%\filete.txt set /p File=<%temp%\filete.txt del "%temp%\filete.txt" title -%IP% - %File% -make clean +::make clean make -j7 set a=%errorlevel% echo ------------------------------------------ diff --git a/romfs/EmuKiller/startup.te b/romfs/EmuKiller/startup.te deleted file mode 100644 index 39cae3d..0000000 --- a/romfs/EmuKiller/startup.te +++ /dev/null @@ -1,135 +0,0 @@ -checkIfImportantSave = { - importantSaves = ["8000000000000120", "80000000000000d1", "8000000000000047"] - j = 0 - important = 0 - while (j < len(importantSaves)){ - if (importantSaves[j] == save){ - important = 1 - } - - j = j + 1 - } -} - -ver = version() - -println("Haku33 v-.- Kronos2308 Hard Reset, Kronos2308") -println("Running on TE ", ver) -println("Running...") -println() - -BTN_X = 0x2 - -if (_EMU) { - menuOptions = ["Exit", "Sysmmc", "Emummc"] -} -else() { - menuOptions = ["Exit", "Sysmmc"] -} - -print("Wipe from: ") -res = menu(menuOptions, 1) - -clearscreen() - -if (res == 0){ - exit() -} - -if (res == 1){ - println("Mounting Sysmmc") - mount = mmcConnect("SYSMMC") -} - -if (res == 2){ - println("Mounting Emummc") - mount = mmcConnect("EMUMMC") -} - -if (mount){ - println("Error connecting mmc!") - pause() - exit() -} - -if (mmcMount("SYSTEM")) { - println("Failed to mount SYSTEM") - pause() - exit() -} - -color("RED") -println("Are you sure you want to wipe everything?\nThis includes:\n- Saves\n- Game Data\n- All other data on the system!") -color("YELLOW") -wait(2000) - -println("Press X to continue\nPress any other button to exit") - -start = pause() & BTN_X -if (!start){ - color("WHITE") - exit() -} - -color("WHITE") -println("Deleting SYSTEM saves") -files = dirRead("bis:/save") - -i = 0 -color("RED") -while (i < len(files)) { - if (!fileProperties[i]){ # checks if it's not a file - save = files[i] - checkIfImportantSave() - if (!important){ - print("\rDeleting ", save) - res = fileDel(pathCombine("bis:/save", save)) - if (res) { - println("\nFile deletion failed!") - pause() - exit() - } - } - } - - i = i + 1 -} - -color("WHITE") -println("\n\nDeleting USER\n") -color("RED") - -if (mmcMount("USER")){ - println("Failed to mount USER") - pause() - exit() -} - -toDel = ["Album", "Contents", "save", "saveMeta", "temp"] - -i = 0 -while (i < len(toDel)){ - dirDel(pathCombine("bis:/", toDel[i])) - mkdir(pathCombine("bis:/", toDel[i])) - - i = i + 1 -} - -mkdir("bis:/Contents/placehld") -mkdir("bis:/Contents/registered") - -color("GREEN") -println("\n\nDone!") -println("\n\nCleaning!") - -fileMove("sd:/Nintendo", "sd:/Hamburgesa_Nintendo") -fileMove("sd:/Nintendo", "sd:/Hamburgesa_Nintendo_1") - -fileDel("sd:/startup.te") -fileDel("sd:/Haku33.nro") -fileDel("sd:/Switch/Haku33.nro") -fileDel("sd:/Switch/Haku33/Haku33.nro") - -println("\n\nPress Any button to full power off!") -pause() -launchPayload("sd:/poweroff.bin") \ No newline at end of file diff --git a/romfs/README.md b/romfs/README.md index f4a77f8..bfd6e20 100644 --- a/romfs/README.md +++ b/romfs/README.md @@ -1,14 +1,11 @@ ## EN * 1 Copy [startup.te](startup.te?raw=true) and Copy [poweroff.bin](poweroff.bin) to the SD Root * 2 Inject The payload [TegraExplorer.bin](https://github.com/StarDustCFW/Haku33/raw/master/romfs/TegraExplorer.bin) -* * No button input needed, Caution ### For clean emunand use [startup.te](EmuKiller/startup.te?raw=true) This one ## ES * 1 Copia [startup.te](startup.te?raw=true) y Copia [poweroff.bin](poweroff.bin) a la raiz de la SD * 2 injecta [TegraExplorer.bin](https://github.com/StarDustCFW/Haku33/raw/master/romfs/TegraExplorer.bin) via RCM -* * No pedira una combinación de botones, usar con cuidado -### Para Limpiar emunand debera usar [startup.te](EmuKiller/startup.te?raw=true) este #### [Descargar-Downloads](https://github.com/StarDustCFW/Haku33/archive/master.zip) ### [Releases](https://github.com/StarDustCFW/Haku33/releases/latest) diff --git a/romfs/ini/Haku33.bmp b/romfs/ini/Haku33.bmp new file mode 100644 index 0000000000000000000000000000000000000000..764238b21512c67b28908d1a3379965f720e6b74 GIT binary patch literal 147528 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 rH;(+nU&e8`^8. + */ +#include +#include +#include "ams_bpc.h" +#include "service_guard.h" + +static Service g_amsBpcSrv; + +NX_GENERATE_SERVICE_GUARD(amsBpc); + +Result _amsBpcInitialize(void) { + Handle h; + Result rc = svcConnectToNamedPort(&h, "bpc:ams"); /* TODO: ams:bpc */ + if (R_SUCCEEDED(rc)) serviceCreate(&g_amsBpcSrv, h); + return rc; +} + +void _amsBpcCleanup(void) { + serviceClose(&g_amsBpcSrv); +} + +Service *amsBpcGetServiceSession(void) { + return &g_amsBpcSrv; +} + +Result amsBpcSetRebootPayload(const void *src, size_t src_size) { + return serviceDispatch(&g_amsBpcSrv, 65001, + .buffer_attrs = { SfBufferAttr_In | SfBufferAttr_HipcMapAlias }, + .buffers = { { src, src_size } }, + ); +} diff --git a/source/ams_bpc.h b/source/ams_bpc.h new file mode 100644 index 0000000..945b929 --- /dev/null +++ b/source/ams_bpc.h @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once +#include + +#ifdef __cplusplus +extern "C" { +#endif + +Result amsBpcInitialize(); +void amsBpcExit(); +Service *amsBpcGetServiceSession(void); + +Result amsBpcSetRebootPayload(const void *src, size_t src_size); + +#ifdef __cplusplus +} +#endif \ No newline at end of file diff --git a/source/lang.hpp b/source/lang.hpp index 3d67e22..5506ef1 100644 --- a/source/lang.hpp +++ b/source/lang.hpp @@ -68,8 +68,8 @@ language LG; LG.text4 = "\n\n\x1b[30;1m-------- LO DEVORARE TODO --------\x1b[0m\n\n"; LG.text5 = "\n\nPULSA \x1b[3%u;1m ZL\x1b[3%u;1m -\x1b[3%u;1m +\x1b[3%u;1m ZR \x1b[0m JUNTOS PARA LIMPIAR\n\n"; LG.text6 = "\x1b[33;1m*\x1b[0m Recuerda Desinstalar Incognito Desde Incognito-RCM\n\n"; - LG.text7 = "\x1b[33;1m*\x1b[0m Recuerda Desactivar el Modo Avion "; - LG.text8 = "y borrar todas las redes de Internet\n\n"; + LG.text7 = "\x1b[33;1m*\x1b[0m Luego del Reinicio ve a Hekate -> More configs -> Haku33\n\n"; + LG.text8 = " No se puede Reiniciar al Payload en una consola Mariko\n"; LG.text9 = "\n\x1b[33;1m*\x1b[0m Si se congela mucho tiempo, Es que ha fallado. Pulsa POWER 15s \n\ny haslo de nuevo\n\n"; LG.text0 = "\x1b[32;1m*\x1b[0m Desabilitando FTP de SXOS\n"; LG.text11 = "\x1b[32;1m*\x1b[0m Esto no esta pensado para uasrse en EMU\n"; @@ -81,8 +81,8 @@ language LG; LG.text4 = "\n\n\x1b[30;1m-------- I WILL CONSUME EVERYTHING --------\x1b[0m\n\n"; LG.text5 = "\n\nPRESS \x1b[3%u;1m ZL\x1b[3%u;1m -\x1b[3%u;1m +\x1b[3%u;1m ZR \x1b[0m TOGETHER TO CLEAN\n\n"; LG.text6 = "\x1b[33;1m*\x1b[0m Remember Uninstall Incognito from Incognito-RCM\n\n"; - LG.text7 = "\x1b[33;1m*\x1b[0m Rememmber to Disable the Airplane mode "; - LG.text8 = "and delete all net configs\n\n"; + LG.text7 = "\x1b[33;1m*\x1b[0m After the Reboot go to Hekate -> More configs -> Haku33\n\n"; + LG.text8 = " Reboot to payload cannot be used on a Mariko system\n"; LG.text9 = "\n\x1b[33;1m*\x1b[0m If it freezes for a long time, It has failed. Press POWER 15s \n\nand try again \n\n"; LG.text0 = "\x1b[32;1m*\x1b[0m Disabling SXOS FTP\n"; LG.text11 = "\x1b[32;1m*\x1b[0m This is not intended to be used at EMU\n"; diff --git a/source/main.cpp b/source/main.cpp index 8566ba8..777c2c8 100644 --- a/source/main.cpp +++ b/source/main.cpp @@ -23,12 +23,39 @@ #include #include "led.hpp" #include "lang.hpp" -extern "C" { -#include "reboot.h" +#include "spl.hpp" +#include +#include +#include +#include "spl.hpp" + +#define IRAM_PAYLOAD_MAX_SIZE 0x24000 +static u8 g_reboot_payload[IRAM_PAYLOAD_MAX_SIZE]; +char Logs[2024]; +extern "C" { +#include "ams_bpc.h" } using namespace std; +Result Init_Services(void) +{ + Result ret = 0; + if (R_FAILED(ret = splInitialize())) {return 1;} + if (R_FAILED(ret = hiddbgInitialize())) {return 1;} + if (R_FAILED(ret = psmInitialize())) {return 1;} + return ret; +} + +void close_Services() +{ + setsysExit(); + splExit(); + smExit(); + hiddbgExit(); + psmExit(); +} + void copy_me(string origen, string destino) { ifstream source(origen, ios::binary); ofstream dest(destino, ios::binary); @@ -37,14 +64,95 @@ void copy_me(string origen, string destino) { dest.close(); } +static void reboot_to_payload(void) { + Result rc = amsBpcSetRebootPayload(g_reboot_payload, IRAM_PAYLOAD_MAX_SIZE); + if (R_FAILED(rc)) { + sprintf(Logs," Failed to set reboot payload: 0x%x\n", rc); + } + else { + spsmShutdown(true); + } +} + +bool is_patched = false; +void CheckHardware() +{ + /*Check if is Ipatched/Mariko */ + if (spl::GetHardwareType() == "Iowa" || spl::GetHardwareType() == "Hoag" || spl::GetHardwareType() == "Calcio" || spl::HasRCMbugPatched()) + { + is_patched = true; + } +} + +bool can_reboot = true; +void SetupClean (){ + if (is_patched){ + led_on(1); + copy_me("romfs:/EmuKiller/startup.te", "/startup.te"); + copy_me("romfs:/poweroff.bin", "/poweroff.bin"); + copy_me("romfs:/TegraExplorer.bin", "/Haku33.bin"); + mkdir("sdmc:/bootloader",0777); + mkdir("sdmc:/bootloader/res",0777); + mkdir("sdmc:/bootloader/ini",0777); + copy_me("romfs:/ini/Haku33.bmp", "/bootloader/res/Haku33.bmp"); + copy_me("romfs:/ini/Haku33.ini", "/bootloader/ini/Haku33.ini"); + spsmShutdown(true); + }else{ + led_on(1); + copy_me("romfs:/startup.te", "/startup.te"); + copy_me("romfs:/poweroff.bin", "/poweroff.bin"); + copy_me("romfs:/TegraExplorer.bin", "/Haku33.bin"); + if (can_reboot) { reboot_to_payload();} + } +} + int main(int argc, char **argv) { set_LANG(); romfsInit(); consoleInit(NULL); + Init_Services(); + CheckHardware(); PadState pad; padConfigureInput(8, HidNpadStyleSet_NpadStandard); padInitializeDefault(&pad); + + Result rc = 0; + + if (R_FAILED(rc = setsysInitialize())) { + sprintf(Logs," Failed to initialize set:sys: 0x%x\n", rc); + can_reboot = false; + } + else { + if (is_patched) { + sprintf(Logs,LG.text8 ); + can_reboot = false; + } + } + + if (can_reboot && R_FAILED(rc = spsmInitialize())) { + sprintf(Logs," Failed to initialize spsm: 0x%x\n", rc); + can_reboot = false; + } + + if (can_reboot) { + smExit(); //Required to connect to ams:bpc + if R_FAILED(rc = amsBpcInitialize()) { + sprintf(Logs," Failed to initialize ams:bpc: 0x%x\n", rc); + can_reboot = false; + } + } + + if (can_reboot) { + FILE *f = fopen("romfs:/TegraExplorer.bin", "rb"); + if (f == NULL) { + sprintf(Logs," Failed to open atmosphere/romfs:/TegraExplorer.bin!\n"); + can_reboot = false; + } else { + fread(g_reboot_payload, 1, sizeof(g_reboot_payload), f); + fclose(f); + } + } //keys while (appletMainLoop()) @@ -80,12 +188,15 @@ int main(int argc, char **argv) //main menu consoleClear(); printf("\x1b[32;1m*\x1b[0m %s v%s Kronos2308, Hard Reset \n\n",TITLE, VERSION); - - printf(LG.text1); - printf(LG.text2); - printf(LG.text3); - printf(LG.text4); - printf(LG.text5,LT,minus,more,RT); + printf(LG.text1); + printf(LG.text2); + printf(LG.text3); + printf(LG.text4); + if (is_patched){ + printf("\n\n %s",LG.text7); + } + printf("\n\x1b[31;1m%s \x1b[0m ",Logs); + printf(LG.text5,LT,minus,more,RT); consoleUpdate(NULL); @@ -93,14 +204,8 @@ int main(int argc, char **argv) //call clean after combo if (kHeld & KEY_ZL && kHeld & KEY_ZR && kHeld & KEY_MINUS && kHeld & KEY_PLUS) { - copy_me("romfs:/startup.te", "/startup.te"); - copy_me("romfs:/poweroff.bin", "/poweroff.bin"); - led_on(1); - bpcInitialize(); - if(init_slp()) - {reboot_to_payload();}else{break;} - bpcExit(); - break; + SetupClean(); + //break; } //exit @@ -111,10 +216,7 @@ int main(int argc, char **argv) } //cansel - fsExit(); - socketExit(); - fsdevUnmountAll(); - pmshellExit(); + close_Services(); consoleExit(NULL); return 0; } \ No newline at end of file diff --git a/source/reboot.c b/source/reboot.c deleted file mode 100644 index ed5df64..0000000 --- a/source/reboot.c +++ /dev/null @@ -1,78 +0,0 @@ -#include -#include -#include - -#include -#include "reboot.h" - -#define IRAM_PAYLOAD_MAX_SIZE 0x2F000 -#define IRAM_PAYLOAD_BASE 0x40010000 - -static alignas(0x1000) u8 g_reboot_payload[IRAM_PAYLOAD_MAX_SIZE]; -static alignas(0x1000) u8 g_ff_page[0x1000]; -static alignas(0x1000) u8 g_work_page[0x1000]; - -void do_iram_dram_copy(void *buf, uintptr_t iram_addr, size_t size, int option) { - memcpy(g_work_page, buf, size); - - SecmonArgs args = {0}; - args.X[0] = 0xF0000201; /* smcAmsIramCopy */ - args.X[1] = (uintptr_t)g_work_page; /* DRAM Address */ - args.X[2] = iram_addr; /* IRAM Address */ - args.X[3] = size; /* Copy size */ - args.X[4] = option; /* 0 = Read, 1 = Write */ - svcCallSecureMonitor(&args); - - memcpy(buf, g_work_page, size); -} - -void copy_to_iram(uintptr_t iram_addr, void *buf, size_t size) { - do_iram_dram_copy(buf, iram_addr, size, 1); -} - -void copy_from_iram(void *buf, uintptr_t iram_addr, size_t size) { - do_iram_dram_copy(buf, iram_addr, size, 0); -} - -static void clear_iram(void) { - memset(g_ff_page, 0xFF, sizeof(g_ff_page)); - for (size_t i = 0; i < IRAM_PAYLOAD_MAX_SIZE; i += sizeof(g_ff_page)) { - copy_to_iram(IRAM_PAYLOAD_BASE + i, g_ff_page, sizeof(g_ff_page)); - } -} - -void reboot_to_payload(void) { - clear_iram(); - - for (size_t i = 0; i < IRAM_PAYLOAD_MAX_SIZE; i += 0x1000) { - copy_to_iram(IRAM_PAYLOAD_BASE + i, &g_reboot_payload[i], 0x1000); - } - - splSetConfig((SplConfigItem)65001, 2); -} - -bool init_slp() -{ - bool can_reboot = true; - Result rc = splInitialize(); - if (R_FAILED(rc)) { - can_reboot = false; - } else { - FILE *f = fopen("romfs:/TegraExplorer.bin", "rb"); - if (f == NULL) { - can_reboot = false; - } else { - fread(g_reboot_payload, 1, sizeof(g_reboot_payload), f); - fclose(f); - } - } - return can_reboot; -} - -void exit_spl(bool can_reboot) -{ - if (can_reboot) { - splExit(); - } - return; -} diff --git a/source/reboot.h b/source/reboot.h deleted file mode 100644 index 93c8f77..0000000 --- a/source/reboot.h +++ /dev/null @@ -1,10 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -void reboot_to_payload(void); -bool init_slp(void); -void exit_spl(bool can_reboot); diff --git a/source/service_guard.h b/source/service_guard.h new file mode 100644 index 0000000..5fbc5fc --- /dev/null +++ b/source/service_guard.h @@ -0,0 +1,56 @@ +#pragma once +#include +#include +#include +#include +#include + +typedef struct ServiceGuard { + Mutex mutex; + u32 refCount; +} ServiceGuard; + +NX_INLINE bool serviceGuardBeginInit(ServiceGuard* g) +{ + mutexLock(&g->mutex); + return (g->refCount++) == 0; +} + +NX_INLINE Result serviceGuardEndInit(ServiceGuard* g, Result rc, void (*cleanupFunc)(void)) +{ + if (R_FAILED(rc)) { + cleanupFunc(); + --g->refCount; + } + mutexUnlock(&g->mutex); + return rc; +} + +NX_INLINE void serviceGuardExit(ServiceGuard* g, void (*cleanupFunc)(void)) +{ + mutexLock(&g->mutex); + if (g->refCount && (--g->refCount) == 0) + cleanupFunc(); + mutexUnlock(&g->mutex); +} + +#define NX_GENERATE_SERVICE_GUARD_PARAMS(name, _paramdecl, _parampass) \ +\ +static ServiceGuard g_##name##Guard; \ +NX_INLINE Result _##name##Initialize _paramdecl; \ +static void _##name##Cleanup(void); \ +\ +Result name##Initialize _paramdecl \ +{ \ + Result rc = 0; \ + if (serviceGuardBeginInit(&g_##name##Guard)) \ + rc = _##name##Initialize _parampass; \ + return serviceGuardEndInit(&g_##name##Guard, rc, _##name##Cleanup); \ +} \ +\ +void name##Exit(void) \ +{ \ + serviceGuardExit(&g_##name##Guard, _##name##Cleanup); \ +} + +#define NX_GENERATE_SERVICE_GUARD(name) NX_GENERATE_SERVICE_GUARD_PARAMS(name, (void), ()) \ No newline at end of file diff --git a/source/spl.cpp b/source/spl.cpp new file mode 100644 index 0000000..8f240be --- /dev/null +++ b/source/spl.cpp @@ -0,0 +1,82 @@ +/*Copyright (c) 2020 D3fau4 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.*/ + +#include +#include + +#include "spl.hpp" + +namespace spl +{ + + static constexpr u32 ExosphereHasRcmBugPatch = 65004; + static constexpr u32 ExosphereEmummcType = 65007; + + char *GetHardwareType(void) + { + Result ret = 0; + u64 hardware_type = 4; + char *hardware[] = { + "Icosa", // Erista normal + "Copper", // Erista prototype + "Hoag", // Mariko lite + "Iowa", // Mariko retail + "Calcio", // Mariko prototype + "Aula", // nx-abcd board + "Unknown"}; + + if (R_FAILED(ret = splGetConfig(SplConfigItem_HardwareType, &hardware_type))) + { + return hardware[4]; + } + else + return hardware[hardware_type]; + } + + bool HasRCMbugPatched(void) + { + Result ret = 0; + u64 has_rcm_bug_patch; + if (R_SUCCEEDED(ret = splGetConfig(static_cast(ExosphereHasRcmBugPatch), &has_rcm_bug_patch))) + { + return has_rcm_bug_patch; + } + else + { + return has_rcm_bug_patch; + } + } + + bool HasEmummc(void) + { + Result ret = 0; + u64 IsEmummc; + + if (R_SUCCEEDED(ret = splGetConfig(static_cast(ExosphereEmummcType), &IsEmummc))) + { + return IsEmummc; + } + else + { + return IsEmummc; + } + } + +} // namespace spl \ No newline at end of file diff --git a/source/spl.hpp b/source/spl.hpp new file mode 100644 index 0000000..54dc58f --- /dev/null +++ b/source/spl.hpp @@ -0,0 +1,27 @@ +/*Copyright (c) 2020 D3fau4 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE.*/ + +#pragma once + +namespace spl { + char *GetHardwareType(void); + bool HasRCMbugPatched(void); + bool HasEmummc(void); +} \ No newline at end of file diff --git a/stuff/mariko.jpg b/stuff/mariko.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3d0aa34738c0a75a3d208fafb4210f0998fcda2c GIT binary patch literal 54129 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 MRRp_T^8arF0O8I(@&Et; literal 0 HcmV?d00001