mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(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:
parent
401f26efa3
commit
3c52c231e1
@ -28,7 +28,6 @@ ifndef TWLSDK_NOCRYPTO
|
||||
|
||||
SRCS = main.c \
|
||||
kami_pxi.c \
|
||||
nvram_misc.c \
|
||||
formatter.c
|
||||
|
||||
TARGET_NAME = armadillo
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
@ -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
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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;
|
||||
|
||||
/*===========================================================================*/
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user