エラー発生時に表示できるように

git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-05-23%20-%20ctr.7z%20+%20svn_v1.068.zip/ctr/svn/ctr_Repair@456 385bec56-5757-e545-9c3a-d8741f4650f1
This commit is contained in:
N2614 2011-10-20 01:28:23 +00:00
parent 16ddfa7c48
commit 52a69bc436
2 changed files with 84 additions and 10 deletions

View File

@ -21,9 +21,15 @@ TARGET_PROGRAM = Initializer2ndNUP
ROMFS_ROOT = romfiles
CTR_BANNER_SPEC = AutoBoot.bsf
SAMPLED_DEMOS_COMMON_INCLUDE_DIR = $(dir $(HORIZON_ROOT)/../CTR/SampleDemos/common/include)
INCLUDES += $(SAMPLED_DEMOS_COMMON_INCLUDE_DIR) \
../../common
SOURCES[] =
main.cpp
LIBS += lib_demo
include $(ROOT_OMAKE)/modulerules
build: $(DEFAULT_TARGETS)

View File

@ -18,6 +18,24 @@
#include <nn/CTR/CTR_ProgramId.h>
#include <nn/applet.h>
#include <nn/applet/CTR/applet_Private.h>
#include <vector>
#include <string>
#include "demo.h"
namespace
{
demo::RenderSystemDrawing s_RenderSystem;
nn::os::StackBuffer<1024> s_StackBuffer;
std::vector<std::string> s_DispMessage;
}
#define HANDLE_RESULT(result) \
if(result.IsFailure()) \
{ \
DrawResult(result); \
} \
//==========================================================================
// MSET ProgramId取得
@ -59,25 +77,75 @@ nn::ProgramId GetProgramIdMsetWithRegion_()
return nn::CTR::MakeProgramId(nn::CTR::PROGRAM_ID_CATEGORY_SYSTEM_APPLICATION, pid, nn::CTR::PROGRAM_ID_VERSION_APP);
}
extern "C" void nnMain()
void DrawResult(nn::Result result)
{
char buf[16];
nn::nstd::TSNPrintf(buf, sizeof(buf), "%08X", result.GetPrintableBits());
s_DispMessage.push_back(std::string(buf));
}
void JumpThreadFunc()
{
nn::Result result;
// os の初期化
nn::os::Initialize();
nn::applet::Enable();
nn::cfg::Initialize();
// 規定サイズの配列としてパラメータバッファを確保
u8 jumpParam[NN_APPLET_PARAM_BUF_SIZE];
*reinterpret_cast<u32*>(jumpParam) = 124; // 本体初期化画面
s_DispMessage.push_back(std::string("Prepare jump to mset"));
// MSETにジャンプすることを宣言
nn::applet::PrepareToJumpToOtherApplication(GetProgramIdMsetWithRegion_(), nn::fs::MEDIA_TYPE_NAND);
nn::Result rseult;
result = nn::applet::PrepareToJumpToOtherApplication(GetProgramIdMsetWithRegion_(), nn::fs::MEDIA_TYPE_NAND);
HANDLE_RESULT(result);
s_DispMessage.push_back(std::string("Jump to mset"));
// MSETにジャンプするためのパラメータを渡してジャンプ
// この関数からは返ってこない
nn::applet::JumpToOtherApplication(jumpParam);
result = nn::applet::JumpToOtherApplication(jumpParam);
HANDLE_RESULT(result);
}
extern "C" void nnMain()
{
nn::applet::Enable();
nn::cfg::Initialize();
s_DispMessage.clear();
// ジャンプ用スレッドの生成
nn::os::Thread drawThread;
drawThread.Start(JumpThreadFunc, s_StackBuffer, nn::os::DEFAULT_THREAD_PRIORITY + 1);
// RenderSystem の準備
nn::fnd::ExpHeap appHeap;
appHeap.Initialize(nn::os::GetDeviceMemoryAddress(), nn::os::GetDeviceMemorySize());
const size_t s_GxHeapSize = 8 * 1024 * 1024;
uptr heapForGx = reinterpret_cast<uptr>(appHeap.Allocate(s_GxHeapSize));
s_RenderSystem.Initialize(heapForGx, s_GxHeapSize);
s_RenderSystem.SetClearColor(NN_GX_DISPLAY_BOTH, 0, 0, 0, 1);
s_RenderSystem.SetColor(1, 1, 1);
u32 counter = 0;
for (;;)
{
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY0);
s_RenderSystem.Clear();
s_RenderSystem.DrawText(0, 0, "count = %d", counter++);
s32 i = 0;
for(std::vector<std::string>::iterator it = s_DispMessage.begin(); it != s_DispMessage.end(); it++)
{
s_RenderSystem.DrawText(0, (i + 1) * 10, "%s", it->c_str());
}
s_RenderSystem.SwapBuffers();
s_RenderSystem.SetRenderTarget(NN_GX_DISPLAY1);
s_RenderSystem.Clear();
s_RenderSystem.SwapBuffers();
s_RenderSystem.WaitVsync(NN_GX_DISPLAY_BOTH);
}
}