mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
DataOnlyのファイルはDisableDebugCheckを行わないように修正。
その他微調整。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@2899 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
3cf05463ec
commit
7c0e014f27
@ -28,7 +28,7 @@ TWL_ARCHGEN = LIMITED
|
|||||||
TITLEID_LO = 0NRA
|
TITLEID_LO = 0NRA
|
||||||
#TARGET_TAD =
|
#TARGET_TAD =
|
||||||
|
|
||||||
TARGET_BIN = NandFirmWriter.srl
|
TARGET_BIN = TitleHashChecker.srl
|
||||||
LCFILE_SPEC = ARM9-TS.lsf
|
LCFILE_SPEC = ARM9-TS.lsf
|
||||||
ROM_SPEC = main.rsf
|
ROM_SPEC = main.rsf
|
||||||
|
|
||||||
|
|||||||
@ -45,6 +45,30 @@ typedef struct KeyInfo
|
|||||||
u16 rep; // 押し維持リピート入力
|
u16 rep; // 押し維持リピート入力
|
||||||
} KeyInfo;
|
} KeyInfo;
|
||||||
|
|
||||||
|
|
||||||
|
// DS-IPL2ƒwƒbƒ_
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
u16 reserved_0h[4];
|
||||||
|
u32 ds_key;
|
||||||
|
u16 ds_arm9_romAdr;
|
||||||
|
u16 ds_arm9_ramAdr;
|
||||||
|
u16 ds_arm7_romAdr;
|
||||||
|
u16 ds_arm7_ramAdr;
|
||||||
|
u16 ds_arm9_romOffsetUnit:3;
|
||||||
|
u16 ds_arm9_ramOffsetUnit:3;
|
||||||
|
u16 ds_arm7_romOffsetUnit:3;
|
||||||
|
u16 ds_arm7_ramOffsetUnit:3;
|
||||||
|
u16 :2;
|
||||||
|
u16 ds_header_ver:2;
|
||||||
|
u16 ds_data_romAdr;
|
||||||
|
u64 card_key;
|
||||||
|
u16 ncd_romAdr;
|
||||||
|
u16 reserved_24h[2];
|
||||||
|
u16 ds_data_crc16;
|
||||||
|
}
|
||||||
|
NORHeaderDS;
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Prototype
|
Prototype
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
@ -20,6 +20,8 @@
|
|||||||
#include <twl/nam.h>
|
#include <twl/nam.h>
|
||||||
#include <twl/os/common/banner.h>
|
#include <twl/os/common/banner.h>
|
||||||
#include <nitro/math/rand.h>
|
#include <nitro/math/rand.h>
|
||||||
|
#include <nitro/nvram.h>
|
||||||
|
#include <twl/lcfg.h>
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "screen.h"
|
#include "screen.h"
|
||||||
@ -48,6 +50,8 @@
|
|||||||
#define NAND_FIRM_START_OFFSET 0x200
|
#define NAND_FIRM_START_OFFSET 0x200
|
||||||
#define NAND_FIRM_START_OFFSET_IN_FILE 0x200
|
#define NAND_FIRM_START_OFFSET_IN_FILE 0x200
|
||||||
|
|
||||||
|
#define TITLE_ID_DATA_ONLY_MASK 0x00000008
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
変数 定義
|
変数 定義
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
@ -120,6 +124,7 @@ static void inittable(unsigned short *table);
|
|||||||
|
|
||||||
void* MyNAMUT_Alloc(u32 size);
|
void* MyNAMUT_Alloc(u32 size);
|
||||||
void MyNAMUT_Free(void* buffer);
|
void MyNAMUT_Free(void* buffer);
|
||||||
|
static BOOL ReadTWLSettings( void );
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*/
|
/*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
@ -157,6 +162,8 @@ void TwlMain(void)
|
|||||||
|
|
||||||
ClearScreen();
|
ClearScreen();
|
||||||
|
|
||||||
|
ReadTWLSettings();
|
||||||
|
|
||||||
// hash Check
|
// hash Check
|
||||||
ProcessTitleHashCheck();
|
ProcessTitleHashCheck();
|
||||||
|
|
||||||
@ -341,7 +348,7 @@ static void DrawScene(DataStruct* list)
|
|||||||
{
|
{
|
||||||
ConvertInitialCode(init_code, NAM_GetTitleIdLo(p->id));
|
ConvertInitialCode(init_code, NAM_GetTitleIdLo(p->id));
|
||||||
|
|
||||||
color = (list[i].DisableDebugFlg == '1') ? OK_COLOR : NG_COLOR;
|
color = (list[i].DisableDebugFlg == '1' || list[i].DisableDebugFlg == '-') ? OK_COLOR : NG_COLOR;
|
||||||
|
|
||||||
// ゲームコード表示
|
// ゲームコード表示
|
||||||
PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, color, "%2d:%s %d.%d (%c)",
|
PutMainScreen( GAME_CODE_BASE_X, TITLE_SHOW_BASE_Y+tmp_i, color, "%2d:%s %d.%d (%c)",
|
||||||
@ -414,13 +421,6 @@ BOOL ProcessTitleHashCheck( void )
|
|||||||
// srlのHash値とcrc16を求める
|
// srlのHash値とcrc16を求める
|
||||||
for ( i=0; i < gNandAppNum; i++, list++ )
|
for ( i=0; i < gNandAppNum; i++, list++ )
|
||||||
{
|
{
|
||||||
|
|
||||||
PutMainScreen( 7, 10, 0xf6, "--- Now Loading ---");
|
|
||||||
PutMainScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum);
|
|
||||||
|
|
||||||
PutSubScreen( 7, 10, 0xf6, "--- Now Loading ---");
|
|
||||||
PutSubScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum);
|
|
||||||
|
|
||||||
// バッファのクリア
|
// バッファのクリア
|
||||||
MI_CpuClear8(full_path, sizeof(full_path));
|
MI_CpuClear8(full_path, sizeof(full_path));
|
||||||
|
|
||||||
@ -435,6 +435,12 @@ BOOL ProcessTitleHashCheck( void )
|
|||||||
{
|
{
|
||||||
gErrorFlg = TRUE;
|
gErrorFlg = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PutMainScreen( 7, 10, 0xf6, "--- Now Loading ---");
|
||||||
|
PutMainScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum);
|
||||||
|
|
||||||
|
PutSubScreen( 7, 10, 0xf6, "--- Now Loading ---");
|
||||||
|
PutSubScreen( 7, 14, 0xf6, " %2d / %2d compleate", i+1, gNandAppNum);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SharedフォントとNandファームの値用の2つ
|
// SharedフォントとNandファームの値用の2つ
|
||||||
@ -652,13 +658,20 @@ BOOL CulcuNandAppHash(DataStruct* list, char* full_path)
|
|||||||
// ついでにDisableDebugFlgの状態を見ておく
|
// ついでにDisableDebugFlgの状態を見ておく
|
||||||
if(i == 1)
|
if(i == 1)
|
||||||
{
|
{
|
||||||
if(((ROM_Header *)pTempBuf)->s.disable_debug)
|
if( (u32)( list->id >> 32 ) & TITLE_ID_DATA_ONLY_MASK )
|
||||||
{
|
{
|
||||||
list->DisableDebugFlg = '1';
|
list->DisableDebugFlg = '-';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
list->DisableDebugFlg = '0';
|
if(((ROM_Header *)pTempBuf)->s.disable_debug)
|
||||||
|
{
|
||||||
|
list->DisableDebugFlg = '1';
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
list->DisableDebugFlg = '0';
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -795,15 +808,19 @@ BOOL CulcuFontDataHash(DataStruct* list)
|
|||||||
Returns:
|
Returns:
|
||||||
|
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
#define NAND_HEADER_SIZE 0x800
|
#define NAND_BLOCK_BYTE 0x200
|
||||||
#define NAND_FIRM_REV_SIZE 0x9
|
#define NAND_HEADER_SIZE 0x800
|
||||||
#define READ_NAND_FIRM_SIZE 0x100000
|
#define NAND_FIRM_REV_SIZE 0x9
|
||||||
|
#define NAND_FIRM_START_OFFSET 0x200
|
||||||
|
#define TEMP_BUFFER_SIZE 0x100000
|
||||||
|
#define READ_NAND_FIRM_SIZE (TEMP_BUFFER_SIZE - NAND_FIRM_START_OFFSET)
|
||||||
|
|
||||||
BOOL CulcuNandFirmHash(DataStruct* list)
|
BOOL CulcuNandFirmHash(DataStruct* list)
|
||||||
{
|
{
|
||||||
u8* pTempBuf;
|
u8* pTempBuf;
|
||||||
u32 write_block;
|
u32 read_block;
|
||||||
u32 culcu_size;
|
u32 culcu_size;
|
||||||
|
u32 alloc_size;
|
||||||
BOOL ret = TRUE;
|
BOOL ret = TRUE;
|
||||||
|
|
||||||
u8* p;
|
u8* p;
|
||||||
@ -813,23 +830,37 @@ BOOL CulcuNandFirmHash(DataStruct* list)
|
|||||||
|
|
||||||
// バッファ確保
|
// バッファ確保
|
||||||
// 書き込みがブロック単位(512byte)であることを考慮し512アライメントを確保
|
// 書き込みがブロック単位(512byte)であることを考慮し512アライメントを確保
|
||||||
pTempBuf = spAllocFunc( READ_NAND_FIRM_SIZE );
|
alloc_size = MATH_ROUNDUP(TEMP_BUFFER_SIZE, 512);
|
||||||
|
pTempBuf = spAllocFunc( alloc_size ); //pTempBuf = spAllocFunc( READ_NAND_FIRM_SIZE );
|
||||||
if (pTempBuf == NULL)
|
if (pTempBuf == NULL)
|
||||||
{
|
{
|
||||||
OS_Warning("Failure! Alloc Buffer");
|
OS_Warning("Failure! Alloc Buffer");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
MI_CpuClear8( pTempBuf, TEMP_BUFFER_SIZE ); //MI_CpuClear8( pTempBuf, READ_NAND_FIRM_SIZE );
|
||||||
|
|
||||||
MI_CpuClear8( pTempBuf, READ_NAND_FIRM_SIZE );
|
// ------ Nvramからリード ------
|
||||||
|
DC_FlushRange(pTempBuf, sizeof(NORHeaderDS));
|
||||||
|
|
||||||
|
if (NVRAMi_Read(0, sizeof(NORHeaderDS), pTempBuf) != NVRAM_RESULT_SUCCESS)
|
||||||
|
{
|
||||||
|
OS_PutString("Fail NVRAMi_Read()!\n");
|
||||||
|
}
|
||||||
|
DC_FlushRange(pTempBuf, sizeof(NORHeaderDS));
|
||||||
|
|
||||||
// Nand‚©‚烊<C692>[ƒh
|
|
||||||
write_block = READ_NAND_FIRM_SIZE / NAND_BLOCK_BYTE + (READ_NAND_FIRM_SIZE % NAND_BLOCK_BYTE != 0);
|
// ------ NANDからリード ------
|
||||||
if (kamiNandRead(0, pTempBuf, write_block ) == KAMI_RESULT_SEND_ERROR)
|
DC_FlushRange( pTempBuf, TEMP_BUFFER_SIZE );
|
||||||
|
|
||||||
|
read_block = READ_NAND_FIRM_SIZE / NAND_BLOCK_BYTE + (READ_NAND_FIRM_SIZE % NAND_BLOCK_BYTE != 0);
|
||||||
|
if (kamiNandRead(NAND_FIRM_START_OFFSET/NAND_BLOCK_BYTE, pTempBuf+NAND_FIRM_START_OFFSET, read_block ) == KAMI_RESULT_SEND_ERROR)
|
||||||
{
|
{
|
||||||
OS_Warning("Failure! Read NandFirm");
|
OS_Warning("Failure! Read NandFirm");
|
||||||
}
|
}
|
||||||
DC_FlushRange(pTempBuf, READ_NAND_FIRM_SIZE);
|
DC_FlushRange( pTempBuf, TEMP_BUFFER_SIZE );
|
||||||
|
|
||||||
|
|
||||||
|
// ------ Hashの計算 ------
|
||||||
// Hash計算するサイズを求める
|
// Hash計算するサイズを求める
|
||||||
culcu_size = MATH_ROUNDUP((*(u32 *)(pTempBuf+0x22c)) + (*(u32 *)(pTempBuf+0x23c)) , 256) + NAND_HEADER_SIZE + NAND_FIRM_REV_SIZE;
|
culcu_size = MATH_ROUNDUP((*(u32 *)(pTempBuf+0x22c)) + (*(u32 *)(pTempBuf+0x23c)) , 256) + NAND_HEADER_SIZE + NAND_FIRM_REV_SIZE;
|
||||||
OS_TPrintf("NandFirm main Size : 0x%08x\n", (*(u32 *)(pTempBuf+0x22c)));
|
OS_TPrintf("NandFirm main Size : 0x%08x\n", (*(u32 *)(pTempBuf+0x22c)));
|
||||||
@ -1018,6 +1049,31 @@ void VBlankIntr(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// TWL設定データのリード
|
||||||
|
static BOOL ReadTWLSettings( void )
|
||||||
|
{
|
||||||
|
u8 *pBuffer = OS_AllocFromMain( LCFG_READ_TEMP );
|
||||||
|
BOOL result;
|
||||||
|
if( pBuffer ) {
|
||||||
|
result = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )pBuffer );
|
||||||
|
// Readに失敗した場合ファイルのリカバリ生成を試みる
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
OS_TPrintf( "TSD read failed. Retry onece more.\n" );
|
||||||
|
result = LCFG_RecoveryTWLSettings();
|
||||||
|
}
|
||||||
|
OS_FreeToMain( pBuffer );
|
||||||
|
}
|
||||||
|
if( result ) {
|
||||||
|
OS_TPrintf( "TSD read succeeded.\n" );
|
||||||
|
}else {
|
||||||
|
OS_TPrintf( "TSD read failed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
End of file
|
End of file
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user