mirror of
https://github.com/rvtr/ctr_Repair.git
synced 2025-10-31 13:51:08 -04:00
強制的にCUPさせる部分を削除
CUP実行後にバージョンを表示するように git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@394 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
parent
0cf3e8772c
commit
80dfa3e041
@ -20,6 +20,47 @@
|
|||||||
#include "VersionDetect.h"
|
#include "VersionDetect.h"
|
||||||
#include "HeapManager.h"
|
#include "HeapManager.h"
|
||||||
|
|
||||||
|
|
||||||
|
void GetCupVersion(nn::pl::CTR::CardUpdateVersion* cup, nn::cfg::CTR::CfgRegionCode region)
|
||||||
|
{
|
||||||
|
nn::Result result;
|
||||||
|
const size_t BUF_SIZE = 1024;
|
||||||
|
u8 buf[BUF_SIZE];
|
||||||
|
// CUPバージョン
|
||||||
|
{
|
||||||
|
result = nn::fs::MountContent("cver:", nn::fs::MEDIA_TYPE_NAND, cCupVerId[region], 0, 1, 1, buf,
|
||||||
|
BUF_SIZE);
|
||||||
|
|
||||||
|
nn::fs::FileInputStream fis;
|
||||||
|
|
||||||
|
result = fis.TryInitialize(L"cver:/version.bin");
|
||||||
|
if (result.IsSuccess())
|
||||||
|
{
|
||||||
|
s64 fileSize = fis.GetSize();
|
||||||
|
NN_LOG("version.bin size = %lld\n", fileSize);
|
||||||
|
s32 ret;
|
||||||
|
void* addr = NULL;
|
||||||
|
HeapManager heap(fileSize);
|
||||||
|
addr = heap.GetAddr();
|
||||||
|
if (addr != NULL)
|
||||||
|
{
|
||||||
|
result = fis.TryRead(&ret, addr, fileSize);
|
||||||
|
if (result.IsSuccess())
|
||||||
|
{
|
||||||
|
nn::pl::CTR::CardUpdateVersion* ver_buf = reinterpret_cast<nn::pl::CTR::CardUpdateVersion*> (addr);
|
||||||
|
|
||||||
|
std::memcpy(cup, ver_buf, sizeof(nn::pl::CTR::CardUpdateVersion));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fis.Finalize();
|
||||||
|
|
||||||
|
nn::fs::Unmount("cver:");
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void GetNupVersion(nn::pl::CTR::NetworkUpdateVersion* nup, nn::cfg::CTR::CfgRegionCode region)
|
void GetNupVersion(nn::pl::CTR::NetworkUpdateVersion* nup, nn::cfg::CTR::CfgRegionCode region)
|
||||||
{
|
{
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
@ -63,5 +104,6 @@ void GetNupVersion(nn::pl::CTR::NetworkUpdateVersion* nup, nn::cfg::CTR::CfgRegi
|
|||||||
|
|
||||||
void GetSystemVersion(VerDef* mVerData, nn::cfg::CTR::CfgRegionCode region)
|
void GetSystemVersion(VerDef* mVerData, nn::cfg::CTR::CfgRegionCode region)
|
||||||
{
|
{
|
||||||
|
GetCupVersion(&mVerData->cup, region);
|
||||||
GetNupVersion(&mVerData->nup, region);
|
GetNupVersion(&mVerData->nup, region);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -248,7 +248,7 @@ nn::Result ExecuteCup(ScrollBuffer* scrollBuf)
|
|||||||
|
|
||||||
extern "C" void nnMain()
|
extern "C" void nnMain()
|
||||||
{
|
{
|
||||||
NN_LOG("Start cup demo\n");
|
NN_LOG("Start Self Cup\n");
|
||||||
nn::Result result;
|
nn::Result result;
|
||||||
Initialize();
|
Initialize();
|
||||||
|
|
||||||
@ -282,40 +282,6 @@ extern "C" void nnMain()
|
|||||||
if (result.IsSuccess())
|
if (result.IsSuccess())
|
||||||
{
|
{
|
||||||
result = ExecuteCup(s_scrollBuffer);
|
result = ExecuteCup(s_scrollBuffer);
|
||||||
// CUP不要だがNUPバージョンのほうが新しかったら強制的に実行
|
|
||||||
if (result == nn::cup::CTR::ResultUpdateNotRequired())
|
|
||||||
{
|
|
||||||
// バージョンの取得
|
|
||||||
VerDef versionData;
|
|
||||||
GetSystemVersion(&versionData, region);
|
|
||||||
|
|
||||||
const size_t ROMFS_BUFFER_SIZE = 1024 * 32;
|
|
||||||
u8 buffer[ROMFS_BUFFER_SIZE];
|
|
||||||
result = nn::fs::MountRom(16, 16, buffer, ROMFS_BUFFER_SIZE);
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
nn::fs::FileReader fileReader;
|
|
||||||
result = fileReader.TryInitialize("rom:/nup_version.bin");
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
u8 buf[1024];
|
|
||||||
s32 readSize;
|
|
||||||
result = fileReader.TryRead(&readSize, buf, sizeof(buf));
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
if (versionData.nup.majorVersion < *reinterpret_cast<u8*>(buf))
|
|
||||||
{
|
|
||||||
// CUPバージョンを削除
|
|
||||||
result = nn::am::DeleteProgram(nn::fs::MEDIA_TYPE_NAND, cCupVerId[region]);
|
|
||||||
if (result.IsSuccess())
|
|
||||||
{
|
|
||||||
result = ExecuteCup(s_scrollBuffer);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (result == nn::am::ResultNotFound())
|
else if (result == nn::am::ResultNotFound())
|
||||||
{
|
{
|
||||||
@ -323,6 +289,11 @@ extern "C" void nnMain()
|
|||||||
}
|
}
|
||||||
|
|
||||||
s_scrollBuffer->AppendText("")->Render();
|
s_scrollBuffer->AppendText("")->Render();
|
||||||
|
VerDef versionData;
|
||||||
|
GetSystemVersion(&versionData, region);
|
||||||
|
|
||||||
|
s_scrollBuffer->AppendText("Version: %d.%d.%d-%d%c", versionData.cup.majorVersion, versionData.cup.minorVersion,
|
||||||
|
versionData.cup.microVersion, versionData.nup.majorVersion, nn::cfg::GetRegionCodeA3(region));
|
||||||
|
|
||||||
for (;;)
|
for (;;)
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user