(SystemUpdater)commondefsのSYSMENU_DEBUGGER_BUILD指定リに従いデバッガ用と実機用のSystemUpdaterが作成されるように変更。

nvram関係のライブラリをSDKのものに変更

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1985 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
kamikawa 2008-07-24 09:19:43 +00:00
parent 401f26efa3
commit 3c52c231e1
10 changed files with 208 additions and 328 deletions

View File

@ -28,7 +28,6 @@ ifndef TWLSDK_NOCRYPTO
SRCS = main.c \
kami_pxi.c \
nvram_misc.c \
formatter.c
TARGET_NAME = armadillo

View File

@ -40,7 +40,6 @@ Ltdautoload SCRWRAM
Object * (.etable)
Object $(OBJDIR)/main.o
Object $(OBJDIR)/kami_pxi.o
Object $(OBJDIR)/nvram_misc.o
Object $(OBJDIR)/formatter.o
Library libsea_sp$(LIBSUFFIX).a

View File

@ -1,43 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - NandInitializer
File: nvram.h
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_NVRAM_H_
#define FIRM_NVRAM_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
#else // SDK_ARM7
/*---------------------------------------------------------------------------*
ŠÖ<EFBFBD>è`
*---------------------------------------------------------------------------*/
void NVRAMi_Read(u32 address, void *buf, u32 size);
void NVRAMi_Write(u32 address, void *buf, u32 size);
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_NVRAM_H_ */
#endif

View File

@ -21,7 +21,6 @@
#include "fifo.h"
#include "twl/cdc.h"
#include "formatter.h"
#include "nvram.h"
#include <twl/ltdmain_begin.h>
#include <twl/mcu.h>
#include <twl/camera.h>
@ -128,8 +127,8 @@ static void KamiPxiCallback(PXIFifoTag tag, u32 data, BOOL err)
{
case KAMI_EXE_FORMAT:
case KAMI_NAND_IO:
case KAMI_NVRAM_IO:
case KAMI_CLEAR_NAND_ERRORLOG:
case KAMI_GET_IS_TOOL_TYPE:
if (!OS_SendMessage(&kamiWork.msgQ, NULL, OS_MESSAGE_NOBLOCK))
{
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_FATAL_ERROR);
@ -221,30 +220,6 @@ static void KamiThread(void *arg)
}
break;
case KAMI_NVRAM_IO:
{
BOOL is_read;
u32 adress;
void* buffer;
u32 size;
is_read = (BOOL)kamiWork.data[0];
KAMI_UNPACK_U32(&adress, &kamiWork.data[1]);
KAMI_UNPACK_U32((u32 *)(&buffer), &kamiWork.data[5]);
KAMI_UNPACK_U32(&size, &kamiWork.data[9]);
if (is_read)
{
NVRAMi_Read( adress, buffer, size );
}
else
{
NVRAMi_Write( adress, buffer, size );
}
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_SUCCESS);
}
break;
case KAMI_CLEAR_NAND_ERRORLOG:
{
if (sdmcFormatNandLog(TRUE))
@ -258,6 +233,26 @@ static void KamiThread(void *arg)
}
break;
case KAMI_GET_IS_TOOL_TYPE:
{
IsToolType type = IS_TOOL_TYPE_ERROR;
u8 temp = I2C_ReadRegister( I2C_SLAVE_DEBUGGER, 0);
if (temp != (u8)(-1)) // 赤箱、キャプチャ以外は通信エラー
{
if (temp == 0x44)
{
type = IS_TOOL_TYPE_DEBUGGER;
}
else if (temp == 0x43)
{
type = IS_TOOL_TYPE_CAPTURE;
}
}
KamiReturnResultEx(kamiWork.command, KAMI_PXI_RESULT_SUCCESS, sizeof(IsToolType), (u8*)&type);
}
break;
default:
KamiReturnResult(kamiWork.command, KAMI_PXI_RESULT_INVALID_COMMAND);
}

View File

@ -1,181 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - NandInitializer
File: nvram_misc.c
Copyright 2008 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include "nvram.h"
#include "spi_sp.h"
#include "nvram_sp.h"
/*---------------------------------------------------------------------------*
Name: NvramCheckReadyToRead
Description: NVRAMを読み出し可能な状態かどうか確認する
Arguments: None.
Returns: BOOL - TRUEを返す
FALSEの場合は読み出し禁止の状態
*---------------------------------------------------------------------------*/
static BOOL NvramCheckReadyToRead(void)
{
u16 tempStatus;
// ステータスレジスタ読み出し
NVRAM_ReadStatusRegister((u8 *)(&tempStatus));
// 書き込みもしくは消去操作中かを確認
if (tempStatus & NVRAM_STATUS_REGISTER_WIP)
{
return FALSE;
}
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: NvramCheckReadyToWrite
Description: NVRAMを書き込み可能な状態かどうか確認する
Arguments: None.
Returns: BOOL - TRUEを返す
FALSEの場合は書き込み禁止の状態
*---------------------------------------------------------------------------*/
static BOOL NvramCheckReadyToWrite(void)
{
u16 tempStatus;
// ステータスレジスタ読み出し
NVRAM_ReadStatusRegister((u8 *)(&tempStatus));
// 書き込みもしくは消去操作中かを確認
if (tempStatus & NVRAM_STATUS_REGISTER_WIP)
{
return FALSE;
}
// 書き込み許可されているかを確認
if (!(tempStatus & NVRAM_STATUS_REGISTER_WEL))
{
return FALSE;
}
return TRUE;
}
/*---------------------------------------------------------------------------*
Name: NVRAM_WaitOperation
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void NVRAM_WaitOperation(void)
{
while( NvramCheckReadyToRead() == FALSE ) {
}
}
/*---------------------------------------------------------------------------*
Name: NVRAM_WaitWriteEnable
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
static void NVRAM_WaitWriteEnable(void)
{
while( NvramCheckReadyToWrite() == FALSE ) {
}
}
/*---------------------------------------------------------------------------*
Name: NVRAMi_Read
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void NVRAMi_Read(u32 address, void *buf, u32 size)
{
NVRAM_WaitOperation();
NVRAM_ReadDataBytes(address, size, buf);
return;
}
/*---------------------------------------------------------------------------*
Name: NVRAMi_Write
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void NVRAMi_Write(u32 address, void *buf, u32 size)
{
u32 i;
u32 page_start;
u32 page_end;
u32 offset_start;
u32 offset_end;
u8 *src_ptr;
u8 temp_buffer[SPI_NVRAM_PAGE_SIZE];
src_ptr = (u8 *)buf;
page_start = (address / SPI_NVRAM_PAGE_SIZE) * SPI_NVRAM_PAGE_SIZE;
page_end = ((address+size-1) / SPI_NVRAM_PAGE_SIZE ) * SPI_NVRAM_PAGE_SIZE;
offset_start = address % SPI_NVRAM_PAGE_SIZE;
offset_end = (address+size-1) % SPI_NVRAM_PAGE_SIZE;
while( page_start <= page_end ) {
if( offset_start != 0 ) {
NVRAMi_Read(page_start, temp_buffer, offset_start);
}
if( page_start != page_end ) {
for( i = offset_start ; i < SPI_NVRAM_PAGE_SIZE ; i++ ) {
temp_buffer[i] = *src_ptr++;
}
}
else {
for( i = offset_start ; i <= offset_end ; i++ ) {
temp_buffer[i] = *src_ptr++;
}
if( offset_end != (SPI_NVRAM_PAGE_SIZE-1) ) {
NVRAMi_Read(page_start+offset_end+1, &(temp_buffer[offset_end+1]), SPI_NVRAM_PAGE_SIZE - (offset_end+1) );
}
}
NVRAM_WriteEnable();
NVRAM_WaitWriteEnable();
NVRAM_PageErase((u32)page_start);
NVRAM_WaitOperation();
NVRAM_WriteEnable();
NVRAM_PageWrite((u32)page_start, (u16)SPI_NVRAM_PAGE_SIZE, temp_buffer);
NVRAM_WaitOperation();
page_start += SPI_NVRAM_PAGE_SIZE;
offset_start = 0;
}
}

View File

@ -60,8 +60,8 @@ void KamiPxiInit( void );
KAMIResult ExeFormatAsync(FormatMode format_mode, KAMICallback callback);
KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read);
KAMIResult kamiNvramIo(u32 address, void* buffer, u32 size, BOOL is_read);
KAMIResult kamiClearNandErrorLog( void );
KAMIResult kamiGetIsToolType( IsToolType *pType );
// (重要)
// ARM7が読み書きするためリード前はInvalidate、ライト前はフラッシュしてください。
@ -74,14 +74,6 @@ static KAMIResult kamiNandWrite(u32 block, void* buffer, u32 count)
{
return kamiNandIo(block, buffer, count, FALSE);
}
static KAMIResult kamiNvramRead(u32 adress, void* buffer, u32 size)
{
return kamiNvramIo(adress, buffer, size, TRUE);
}
static KAMIResult kamiNvramWrite(u32 adress, void* buffer, u32 size)
{
return kamiNvramIo(adress, buffer, size, FALSE);
}
/*===========================================================================*/

View File

@ -165,53 +165,6 @@ KAMIResult kamiNandIo(u32 block, void* buffer, u32 count, BOOL is_read)
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
Name: Nvramアクセス関数
Description:
Arguments: None.
Returns:
*---------------------------------------------------------------------------*/
KAMIResult kamiNvramIo(u32 address, void* buffer, u32 size, BOOL is_read)
{
OSIntrMode enabled;
u8 data[12];
int i;
// ロック
enabled = OS_DisableInterrupts();
if (kamiWork.lock)
{
(void)OS_RestoreInterrupts(enabled);
return KAMI_RESULT_BUSY;
}
kamiWork.lock = TRUE;
(void)OS_RestoreInterrupts(enabled);
kamiWork.callback = NULL;
kamiWork.arg = 0;
kamiWork.data = 0;
// データ作成
KAMI_PACK_U32(&data[0], &address);
KAMI_PACK_U32(&data[4], &buffer);
KAMI_PACK_U32(&data[8], &size);
if (KamiSendPxiCommand(KAMI_NVRAM_IO, 12, (u8)is_read))
{
for (i = 0; i < 12; i+=3)
{
KamiSendPxiData(&data[i]);
}
KamiWaitBusy();
return (KAMIResult)kamiWork.result;
}
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
Name: kamiClearNandErrorLog
@ -248,6 +201,45 @@ KAMIResult kamiClearNandErrorLog( void )
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
Name: kamiGetIsToolType
Description: IS-TWL-DEBUGGER or CAPTURE
Arguments: None.
Returns:
*---------------------------------------------------------------------------*/
KAMIResult kamiGetIsToolType( IsToolType *pType )
{
OSIntrMode enabled;
if (pType == NULL)
{
return KAMI_RESULT_INVALID_PARAMETER;
}
enabled = OS_DisableInterrupts();
if (kamiWork.lock)
{
(void)OS_RestoreInterrupts(enabled);
return KAMI_RESULT_BUSY;
}
kamiWork.lock = TRUE;
kamiWork.callback = NULL;
kamiWork.arg = 0;
kamiWork.data = (u8*)pType;
(void)OS_RestoreInterrupts(enabled);
if (KamiSendPxiCommand(KAMI_GET_IS_TOOL_TYPE, 0, 0))
{
KamiWaitBusy();
return (KAMIResult)kamiWork.result;
}
return KAMI_RESULT_SEND_ERROR;
}
/*---------------------------------------------------------------------------*
PXIŠÖ˜A
*---------------------------------------------------------------------------*/

View File

@ -19,6 +19,8 @@
#include <twl/fatfs.h>
#include <nitro/card.h>
#include <twl/nam.h>
#include <nitro/nvram.h>
#include "kami_font.h"
#include "kami_pxi.h"
@ -131,9 +133,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
crc_w2 = SVC_GetCRC16( 0xffff, pTempBuf+512, file_size-512 );
// まずNORHeaderDS領域を書き込む40byte?
if (kamiNvramWrite(0, (void*)pTempBuf, sizeof(NORHeaderDS)) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(0, sizeof(NORHeaderDS), (void*)pTempBuf) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
@ -142,9 +144,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
DC_FlushRange(pTempBuf, sizeof(NORHeaderDS));
// CRCチェックのためNvramからリード
if (kamiNvramRead(0, pTempBuf, sizeof(NORHeaderDS) ) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()!\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()!\n");
}
DC_StoreRange(pTempBuf, sizeof(NORHeaderDS));
@ -167,9 +169,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
// NORファームリザーブ領域の書き込みデータのCRCを計算
crc_norfirm_reserved_area_w = SVC_GetCRC16( 0xffff, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramWrite(NVRAM_NORFIRM_RESERVED_ADDRESS, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
@ -179,9 +181,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
// 読み込みはARM7が直接メモリに書き出すため
DC_FlushRange(sNvramPageSizeBuffer, NVRAM_PAGE_SIZE);
if (kamiNvramRead(NVRAM_NORFIRM_RESERVED_ADDRESS, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(NVRAM_NORFIRM_RESERVED_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
result = FALSE;
}
@ -199,9 +201,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
#ifdef CLEAR_NON_ASIGNED_AREA_AND_RESERVED_AREA_ALL
DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
// 未割り当て領域+予約領域を0クリアします(開発用)
if (kamiNvramRead(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, &sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
result = FALSE;
}
sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFi設定 + NTR WiFi設定 を差し引く
@ -212,9 +214,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
for (write_offset=NVRAM_NON_ASIGNED_AREA_ADDRESS; write_offset < sReservedAreaEndAddress; write_offset += NVRAM_PAGE_SIZE)
{
if (kamiNvramWrite(write_offset, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(write_offset, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
}
@ -225,16 +227,16 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE );
DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramWrite(NVRAM_NON_ASIGNED_AREA_ADDRESS, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(NVRAM_NON_ASIGNED_AREA_ADDRESS, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
DC_InvalidateRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramRead(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, &sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Read(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_PAGE_SIZE, &sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramRead()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Read()\n");
result = FALSE;
}
sReservedAreaEndAddress = (u32)(*(u16 *)sNvramPageSizeBuffer << NVRAM_CONFIG_DATA_OFFSET_SHIFT) - 0xA00;// TWL WiFi設定 + NTR WiFi設定 を差し引く
@ -242,9 +244,9 @@ BOOL kamiWriteNandfirm(const char* pFullPath, NAMAlloc allocFunc, NAMFree freeFu
MI_CpuFill8( sNvramPageSizeBuffer, 0x00, NVRAM_PAGE_SIZE );
DC_FlushRange( sNvramPageSizeBuffer, NVRAM_PAGE_SIZE );
if (kamiNvramWrite(sReservedAreaEndAddress - 0x100, sNvramPageSizeBuffer, NVRAM_PAGE_SIZE) == KAMI_RESULT_SEND_ERROR)
if (NVRAMi_Write(sReservedAreaEndAddress - 0x100, NVRAM_PAGE_SIZE, sNvramPageSizeBuffer) != NVRAM_RESULT_SUCCESS)
{
kamiFontPrintfConsoleEx(1, "Fail kamiNvramWrite()\n");
kamiFontPrintfConsoleEx(1, "Fail NVRAMi_Write()\n");
result = FALSE;
}
#endif

View File

@ -97,6 +97,7 @@ static void VBlankIntr(void);
static void InitAllocation(void);
static BOOL IgnoreRemoval(void);
static void DrawWaitButtonA(void);
static void DrawInvalidConsole(void);
static void DrawCancel(void);
static void DrawAlready(SystemUpdaterLog* log);
static void DrawResult(BOOL result);
@ -174,6 +175,93 @@ TwlMain()
(void)FS_LoadTable(p_table, need_size);
}
// コンソールチェック
{
u32 console = OS_GetRunningConsoleType();
enum { IS_TWL_DEBUGGER=0, IS_TWL_CAPTURE, TWL, UNKNOWN };
int running = UNKNOWN;
// SystemUpdaterはデバッグ不可で作成されるためOS_CONSOLE_TWLが取得される
// 赤箱にカードを挿してSystemUpdaterを実行した場合も同様但しOS_CONSOLE_TWLTYPE_RETAILにはならない
// デバッガかどうかの判定はメモリサイズチェックにより行う
// 念のためOS_CONSOLE_TWLTYPE_RETAILでないことも確認する
if ((console & OS_CONSOLE_SIZE_MASK) == OS_CONSOLE_SIZE_32MB)
{
if ((console & OS_CONSOLE_TWLTYPE_MASK) != OS_CONSOLE_TWLTYPE_RETAIL)
{
IsToolType type;
kamiGetIsToolType(&type);
if (type == IS_TOOL_TYPE_DEBUGGER)
{
running = IS_TWL_DEBUGGER;
}
else if (type == IS_TOOL_TYPE_CAPTURE)
{
running = IS_TWL_CAPTURE;
}
}
}
else if ((console & OS_CONSOLE_MASK) == OS_CONSOLE_TWL)
{
IsToolType type;
kamiGetIsToolType(&type);
if (type == IS_TOOL_TYPE_CAPTURE)
{
running = IS_TWL_CAPTURE;
}
else
{
running = TWL;
}
}
switch (running)
{
case IS_TWL_DEBUGGER:
kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on IS_TWL_DEBUGGER.");
break;
case IS_TWL_CAPTURE:
kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on IS_TWL_CAPTURE.");
break;
case TWL:
kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on TWL CONSOLE.");
break;
case UNKNOWN:
kamiFontPrintf( 0, printLine++, FONT_COLOR_GREEN, "Running on UNKNOWN.");
break;
}
#ifdef SYSMENU_DEBUGGER_BUILD
// デバッガ向けSystemUpdaterは実機とキャプチャでは動作させない
if (running != IS_TWL_DEBUGGER)
{
kamiFontPrintfMain( 2, 9, 3, " Sorry, ");
kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not ");
kamiFontPrintfMain( 2, 11, 3, " execute on TWL-CONSOLE. ");
DrawInvalidConsole();
}
#else
// 実機向けSystemUpdaterはデバッガでは動作させない
if (running == IS_TWL_DEBUGGER)
{
kamiFontPrintfMain( 2, 9, 3, " Sorry, ");
kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not ");
kamiFontPrintfMain( 2, 11, 3, " execute on IS-TWL-DEBUGGER.");
DrawInvalidConsole();
}
#endif // SYSMENU_DEBUGGER_BUILD
// UNKNOWNはは動作させない
if (running == UNKNOWN)
{
kamiFontPrintfMain( 2, 9, 3, " Sorry, ");
kamiFontPrintfMain( 2, 10, 3, " This SystemUpdater can not ");
kamiFontPrintfMain( 2, 11, 3, " execute on UNKNOWN CONSOLE.");
DrawInvalidConsole();
}
}
// (更新可能条件)
// 1.ログが存在しない
// 2.ログが存在し、ログに記載のマジックコードが不正初版SystemUpdater実行後の状態
@ -495,6 +583,35 @@ static void DrawWaitButtonA(void)
OS_WaitVBlankIntr();
}
/*---------------------------------------------------------------------------*
Name: DrawInvalidConsole
Description:
Arguments:
Returns: None.
*---------------------------------------------------------------------------*/
static void DrawInvalidConsole(void)
{
// キャンセルされました
CARD_LockRom((u16)sLockId);
(void)CARDi_ReadRomIDCoreEx(DEBUGGER_COMMAND_CANCELED);
CARD_UnlockRom((u16)sLockId);
while(1)
{
G3X_Reset();
G3_Identity();
G3_PolygonAttr(GX_LIGHTMASK_NONE, GX_POLYGONMODE_DECAL, GX_CULL_NONE, 0, 31, 0);
DrawQuad( 10, 50, 246, 120, GX_RGB(28, 28, 28));
G3_SwapBuffers(GX_SORTMODE_AUTO, GX_BUFFERMODE_W);
OS_WaitVBlankIntr();
}
}
/*---------------------------------------------------------------------------*
Name: DrawCancel

View File

@ -63,11 +63,19 @@ typedef enum KamiCommand
KAMI_TEST_COMMAND,
KAMI_EXE_FORMAT,
KAMI_NAND_IO,
KAMI_NVRAM_IO,
KAMI_CLEAR_NAND_ERRORLOG
KAMI_CLEAR_NAND_ERRORLOG,
KAMI_GET_IS_TOOL_TYPE
}
KamiCommand;
typedef enum _IsToolType
{
IS_TOOL_TYPE_ERROR,
IS_TOOL_TYPE_DEBUGGER,
IS_TOOL_TYPE_CAPTURE
}
IsToolType;
/*===========================================================================*/