diff --git a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/Makefile b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/Makefile index 77e4fa4c..9bc51d97 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/Makefile +++ b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/Makefile @@ -28,7 +28,6 @@ ifndef TWLSDK_NOCRYPTO SRCS = main.c \ kami_pxi.c \ - nvram_misc.c \ formatter.c TARGET_NAME = armadillo diff --git a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/armadillo.lsf b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/armadillo.lsf index 87247472..177f5206 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/armadillo.lsf +++ b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/armadillo.lsf @@ -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 diff --git a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/include/nvram.h b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/include/nvram.h deleted file mode 100644 index 22b3ec4a..00000000 --- a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/include/nvram.h +++ /dev/null @@ -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 - -#ifdef __cplusplus -extern "C" { -#endif - -#ifdef SDK_ARM9 -#else // SDK_ARM7 - -/*---------------------------------------------------------------------------* - 関数定義 - *---------------------------------------------------------------------------*/ -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 diff --git a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/src/kami_pxi.c b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/src/kami_pxi.c index 07fe924a..c3caa3f1 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/src/kami_pxi.c +++ b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/src/kami_pxi.c @@ -21,7 +21,6 @@ #include "fifo.h" #include "twl/cdc.h" #include "formatter.h" -#include "nvram.h" #include #include #include @@ -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); } diff --git a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/src/nvram_misc.c b/build/systemMenu_tools/SystemUpdater/ARM7.TWL/src/nvram_misc.c deleted file mode 100644 index b5441832..00000000 --- a/build/systemMenu_tools/SystemUpdater/ARM7.TWL/src/nvram_misc.c +++ /dev/null @@ -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; - } -} diff --git a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/include/kami_pxi.h b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/include/kami_pxi.h index 0c7abe43..c05de9d4 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/include/kami_pxi.h +++ b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/include/kami_pxi.h @@ -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); -} /*===========================================================================*/ diff --git a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_pxi.c b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_pxi.c index 24276cef..f3ce7f2a 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_pxi.c +++ b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_pxi.c @@ -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関連 *---------------------------------------------------------------------------*/ diff --git a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c index 78d29ca0..488313c7 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c +++ b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/kami_write_nandfirm.c @@ -19,6 +19,8 @@ #include #include #include +#include + #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 diff --git a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/main.c b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/main.c index 06dbd365..f898500a 100644 --- a/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/main.c +++ b/build/systemMenu_tools/SystemUpdater/ARM9.TWL/src/main.c @@ -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 diff --git a/build/systemMenu_tools/SystemUpdater/common/include/fifo.h b/build/systemMenu_tools/SystemUpdater/common/include/fifo.h index 3a3992ec..892475dd 100644 --- a/build/systemMenu_tools/SystemUpdater/common/include/fifo.h +++ b/build/systemMenu_tools/SystemUpdater/common/include/fifo.h @@ -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; + /*===========================================================================*/