mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
・NTR設定データのAPI仕様を変更。一時バッファ用引数を必要としない形に変更。
・NTR設定データのTWLリージョンによる言語コードの取り回しの実装。 ・言語コード処理.xlsのドキュメント追加。 ・メモリマップ.vsd更新。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@355 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
09bef4a051
commit
698853c42d
@ -66,42 +66,49 @@ typedef struct IPL2HeaderPart {
|
||||
} IPL2HeaderPart; // 0x20bytes
|
||||
|
||||
|
||||
// NTR各種設定データのNVRAM保存時フォーマット
|
||||
typedef struct NSDStore{
|
||||
NTRSettingsData nsd; // NTR各種設定データ
|
||||
u16 saveCount; // 0x00-0x7fをループしてカウントし、カウント値が新しいデータが有効。
|
||||
u16 crc16; // NTR各種設定データの16bitCRC
|
||||
u8 pad[ 128 - sizeof(NTRSettingsData) - 4];
|
||||
}NSDStore; // 128byte // ※本来なら、saveCountとcrc16は256byteの最後に付加して、間にパディングを埋める方がいい。
|
||||
|
||||
|
||||
// NTR各種設定データEXのNVRAM保存時フォーマット(上記NCDStoreと互換をとるための無理やり拡張)
|
||||
typedef struct NSDStoreEx{
|
||||
NTRSettingsData nsd; // NTR各種設定データ
|
||||
u16 saveCount; // 0x00-0x7fをループしてカウントし、カウント値が新しいデータが有効。
|
||||
u16 crc16; // NTR各種設定データの16bitCRC
|
||||
NTRSettingsDataEx nsd_ex;
|
||||
u16 crc16_ex;
|
||||
}NSDStoreEx; // 256byte // ※本来なら、saveCountとcrc16は256byteの最後に付加して、間にパディングを埋める方がいい。
|
||||
|
||||
|
||||
// function's prototype-------------------------------------------------
|
||||
u32 NSD_GetNSDRomAddr( void ); // NTRSettingデータのNVRAM格納アドレスを取得
|
||||
u8 NSD_GetIPL2Type( void ); // NTR-IPL2タイプを取得
|
||||
const u8 *NSD_GetIPL2Timestamp( void ); // NTR-IPL2のタイムスタンプを取得
|
||||
|
||||
static void NSDi_ReadIPL2Header( void );
|
||||
static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u8 region );
|
||||
static BOOL NSDi_CheckDataValue( NSDStoreEx *pNSDStore, u8 region );
|
||||
static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u32 validLangBitmap );
|
||||
static BOOL NSDi_CheckDataValue( NSDStoreEx *pNSDStore, u32 validLangBitmap );
|
||||
static BOOL NVRAMm_ExecuteCommand( int nvState, u32 addr, u16 size, u8 *pSrc );
|
||||
static void Callback_NVRAM( PXIFifoTag tag, u32 data, BOOL err );
|
||||
|
||||
// static variables-----------------------------------------------------
|
||||
static NSDStoreEx s_NSDStoreEx ATTRIBUTE_ALIGN(32);
|
||||
static NSDStoreEx s_NSDStoreEx[ 2 ] ATTRIBUTE_ALIGN(32);
|
||||
static IPL2HeaderPart s_IPL2Header ATTRIBUTE_ALIGN(32);
|
||||
static BOOL s_isReadIPL2H = FALSE;
|
||||
static volatile BOOL s_nvCbOccurred;
|
||||
static volatile u16 s_nvResult;
|
||||
static int s_indexNSD = NSD_NOT_CORRECT;
|
||||
|
||||
#ifndef SDK_FINALROM
|
||||
static NSDStoreEx (*s_pNSDStoreExArray)[2];
|
||||
#endif
|
||||
// global variables-----------------------------------------------------
|
||||
NTRSettingsData *g_pNSD = &s_NSDStoreEx.nsd;
|
||||
NTRSettingsDataEx *g_pNSDEx = &s_NSDStoreEx.nsd_ex;
|
||||
NTRSettingsData *g_pNSD = &s_NSDStoreEx[ 0 ].nsd;
|
||||
NTRSettingsDataEx *g_pNSDEx = &s_NSDStoreEx[ 0 ].nsd_ex;
|
||||
|
||||
// const data-----------------------------------------------------------
|
||||
static const u16 s_validLangBitmapList[] = { // ※TWLに合わせた方が良さそう。
|
||||
NTR_LANG_BITMAP_WW, // TWL_REGION_JAPAN
|
||||
NTR_LANG_BITMAP_WW, // TWL_REGION_AMERICA
|
||||
NTR_LANG_BITMAP_WW, // TWL_REGION_EUROPE
|
||||
NTR_LANG_BITMAP_WW, // TWL_REGION_AUSTRALIA
|
||||
NTR_LANG_BITMAP_CHINA, // TWL_REGION_CHINA
|
||||
NTR_LANG_BITMAP_KOREA, // TWL_REGION_KOREA
|
||||
};
|
||||
|
||||
|
||||
// function's description-----------------------------------------------
|
||||
|
||||
@ -153,25 +160,21 @@ BOOL NSD_IsReadSettings( void )
|
||||
}
|
||||
|
||||
|
||||
BOOL NSD_ReadSettings( u8 region, NSDStoreEx (*pTempBuffer)[2] )
|
||||
BOOL NSD_ReadSettings( u32 validLangBitmap )
|
||||
{
|
||||
NSDStoreEx *pNSDStoreEx = (NSDStoreEx *)pTempBuffer;
|
||||
#ifndef SDK_FINALROM
|
||||
s_pNSDStoreExArray = pTempBuffer;
|
||||
OS_TPrintf( "NSDStoreBuff : %08x %08x\n", &(*s_pNSDStoreExArray)[ 0 ], &(*s_pNSDStoreExArray)[ 1 ] );
|
||||
#endif
|
||||
|
||||
DC_InvalidateRange( pNSDStoreEx, sizeof(NSDStoreEx) * 2 );
|
||||
DC_InvalidateRange( s_NSDStoreEx, sizeof(NSDStoreEx) * 2 );
|
||||
|
||||
// フラッシュからニ重化されているNTR設定データを読み出す。
|
||||
while( !NVRAMm_ExecuteCommand( COMM_RD, NSD_GetNSDRomAddr(), sizeof(NSDStoreEx), (u8 *)&pNSDStoreEx[ 0 ] ) ) {}
|
||||
while( !NVRAMm_ExecuteCommand( COMM_RD, NSD_GetNSDRomAddr() + SPI_NVRAM_PAGE_SIZE, sizeof(NSDStoreEx), (u8 *)&pNSDStoreEx[ 1 ] ) ) {}
|
||||
while( !NVRAMm_ExecuteCommand( COMM_RD, NSD_GetNSDRomAddr(), sizeof(NSDStoreEx), (u8 *)&s_NSDStoreEx[ 0 ] ) ) {}
|
||||
while( !NVRAMm_ExecuteCommand( COMM_RD, NSD_GetNSDRomAddr() + SPI_NVRAM_PAGE_SIZE, sizeof(NSDStoreEx), (u8 *)&s_NSDStoreEx[ 1 ] ) ) {}
|
||||
OS_TPrintf("NSD read addr=%08x\n", NSD_GetNSDRomAddr() );
|
||||
|
||||
// 読み出したデータのどちらが有効かを判定する。
|
||||
if( NSDi_CheckCorrectNSD( pTempBuffer, region ) ) {
|
||||
// 有効なNTR設定データを静的バッファに転送
|
||||
MI_CpuCopyFast( (void *)&pNSDStoreEx[ s_indexNSD ], (void *)&s_NSDStoreEx, sizeof(NSDStoreEx) );
|
||||
if( NSDi_CheckCorrectNSD( &s_NSDStoreEx, validLangBitmap ) ) {
|
||||
// 有効なNTR設定データを先頭要素にコピー
|
||||
if( s_indexNSD == 1 ) {
|
||||
MI_CpuCopyFast( (void *)&s_NSDStoreEx[ s_indexNSD ], (void *)&s_NSDStoreEx[ 0 ], sizeof(NSDStoreEx) );
|
||||
}
|
||||
}else {
|
||||
// 有効なデータがないなら、バッファをクリアする
|
||||
OS_TPrintf( "NSD clear.\n" );
|
||||
@ -179,7 +182,7 @@ BOOL NSD_ReadSettings( u8 region, NSDStoreEx (*pTempBuffer)[2] )
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
OS_TPrintf("Use NSD[%d] : saveCount = %d\n", s_indexNSD, s_NSDStoreEx.saveCount);
|
||||
OS_TPrintf("Use NSD[%d] : saveCount = %d\n", s_indexNSD, s_NSDStoreEx[ 0 ].saveCount );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
@ -188,10 +191,11 @@ BOOL NSD_ReadSettings( u8 region, NSDStoreEx (*pTempBuffer)[2] )
|
||||
//----------------------------------------------------------------------
|
||||
// NTR設定データのライト
|
||||
//----------------------------------------------------------------------
|
||||
BOOL NSD_WriteSettings( u8 region )
|
||||
BOOL NSD_WriteSettings( void )
|
||||
{
|
||||
int retry;
|
||||
u32 nvramAddr;
|
||||
NSDStoreEx *pNSDStoreEx = &s_NSDStoreEx[ 0 ];
|
||||
|
||||
// まだNTR設定データがリードされていなければ、リードを行って必要な情報を取得する。
|
||||
if( !NSD_IsReadSettings() ) {
|
||||
@ -200,24 +204,25 @@ BOOL NSD_WriteSettings( u8 region )
|
||||
}
|
||||
|
||||
// NSD のCRC、セーブカウント値、ライトアドレスの算出。
|
||||
s_NSDStoreEx.nsd.version = NTR_SETTINGS_DATA_VERSION; // バージョンを現在のものに設定。
|
||||
s_NSDStoreEx.crc16 = SVC_GetCRC16( 0xffff, (const void *)&s_NSDStoreEx.nsd, sizeof(NTRSettingsData) );
|
||||
s_NSDStoreEx.saveCount = (u8)( ( s_NSDStoreEx.saveCount + 1 ) & SAVE_COUNT_MASK );
|
||||
pNSDStoreEx->nsd.version = NTR_SETTINGS_DATA_VERSION; // バージョンを現在のものに設定。
|
||||
pNSDStoreEx->crc16 = SVC_GetCRC16( 0xffff, (const void *)&pNSDStoreEx->nsd, sizeof(NTRSettingsData) );
|
||||
pNSDStoreEx->saveCount = (u8)( ( pNSDStoreEx->saveCount + 1 ) & SAVE_COUNT_MASK );
|
||||
|
||||
// NSD_EXのCRC算出。
|
||||
s_NSDStoreEx.nsd_ex.version = NTR_SETTINGS_DATA_EX_VERSION; // バージョンを現在のものに設定。
|
||||
s_NSDStoreEx.nsd_ex.valid_language_bitmap = s_validLangBitmapList[ region ];
|
||||
s_NSDStoreEx.crc16_ex = SVC_GetCRC16( 0xffff, (const void *)&s_NSDStoreEx.nsd_ex, sizeof(NTRSettingsDataEx) );
|
||||
pNSDStoreEx->nsd_ex.version = NTR_SETTINGS_DATA_EX_VERSION; // バージョンを現在のものに設定。
|
||||
pNSDStoreEx->nsd_ex.valid_language_bitmap &= NTR_LANG_BITMAP_ALL; // NTR側は日英仏独伊西中韓のみ
|
||||
pNSDStoreEx->nsd_ex.valid_language_bitmap |= ( 0x0001 << NTR_LANG_ENGLISH ); // 英語は強制ON(旧NTRアプリ対策)
|
||||
pNSDStoreEx->crc16_ex = SVC_GetCRC16( 0xffff, (const void *)&pNSDStoreEx->nsd_ex, sizeof(NTRSettingsDataEx) );
|
||||
|
||||
// NTR設定データのライト
|
||||
DC_FlushRange( &s_NSDStoreEx, sizeof(NSDStoreEx) );
|
||||
DC_FlushRange( pNSDStoreEx, sizeof(NSDStoreEx) );
|
||||
retry = NVRAM_RETRY_NUM;
|
||||
while( retry-- ) {
|
||||
s_indexNSD ^= 0x01; // リトライの度に書き込みアドレスを切り替える。
|
||||
nvramAddr = NSD_GetNSDRomAddr() + s_indexNSD * SPI_NVRAM_PAGE_SIZE;
|
||||
OS_TPrintf("NSD write addr=%08x\n", nvramAddr );
|
||||
|
||||
if( NVRAMm_ExecuteCommand( COMM_WE, nvramAddr, sizeof(NSDStoreEx), (u8 *)&s_NSDStoreEx ) ) {
|
||||
if( NVRAMm_ExecuteCommand( COMM_WE, nvramAddr, sizeof(NSDStoreEx), (u8 *)pNSDStoreEx ) ) {
|
||||
OS_TPrintf("NVRAM Write succeeded.\n");
|
||||
break;
|
||||
}
|
||||
@ -232,7 +237,7 @@ BOOL NSD_WriteSettings( u8 region )
|
||||
// ミラーリングされているNTR設定データのどちらが有効かを判定
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u8 region )
|
||||
static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u32 validLangBitmap )
|
||||
{
|
||||
NSDStoreEx *pNSDStoreEx = (NSDStoreEx *)pNSDStoreExArray;
|
||||
u16 i;
|
||||
@ -264,7 +269,7 @@ static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u8 region )
|
||||
|
||||
// NSD, NSDExのCRCが正しいなら、データの中身をチェック。
|
||||
if( !isInvalid ) {
|
||||
if( NSDi_CheckDataValue( &pNSDStoreEx[ i ], region ) ) { // データがおかしい値でないかもチェック。
|
||||
if( NSDi_CheckDataValue( &pNSDStoreEx[ i ], validLangBitmap ) ) { // データがおかしい値でないかもチェック。
|
||||
nsd_valid |= 0x01 << i; // "有効"フラグをセット
|
||||
s_indexNSD = i; // NCDのインデックスも切り替え。
|
||||
}else {
|
||||
@ -293,29 +298,29 @@ static BOOL NSDi_CheckCorrectNSD( NSDStoreEx (*pNSDStoreExArray)[2], u8 region )
|
||||
|
||||
|
||||
// NTR設定データの値が正しい値かチェック。 // FALSE:正しくない。TRUE:正しい。
|
||||
static BOOL NSDi_CheckDataValue( NSDStoreEx *pNSDStoreEx, u8 region )
|
||||
static BOOL NSDi_CheckDataValue( NSDStoreEx *pNSDStoreEx, u32 validLangBitmap )
|
||||
{
|
||||
NTRSettingsData *pNSD = &pNSDStoreEx->nsd;
|
||||
NTRSettingsDataEx *pNSDEx = &pNSDStoreEx->nsd_ex;
|
||||
u16 validLangBitmap = s_validLangBitmapList[ region ];
|
||||
|
||||
// NTR標準6言語以外の言語に対応している場合は、対応言語に英語を追加する。(旧NTRアプリ対策)
|
||||
if( validLangBitmap & ~NTR_LANG_BITMAP_WW ) {
|
||||
validLangBitmap |= ( 0x0001 << NTR_LANG_ENGLISH );
|
||||
}
|
||||
|
||||
//pNSD->option;
|
||||
// NSDのlanguageチェック( NSD側のlanguageは、日・英・独・仏・伊・西の6言語のうちの、対応言語のみの値となる。)
|
||||
if( ~( NTR_LANG_BITMAP_WW & validLangBitmap ) & ( 0x0001 << pNSD->option.language ) ) {
|
||||
|
||||
// NSDおよびNSDExのlanguageチェック
|
||||
if( ( ~validLangBitmap & ( 0x0001 << pNSD->option.language ) ) ||
|
||||
( ~validLangBitmap & ( 0x0001 << pNSDEx->language ) )
|
||||
) {
|
||||
OS_TPrintf("NSD: invalid language : org:%02d ex:%02d bitmap:%04x\n",
|
||||
pNSD->option.language, pNSDEx->language, pNSDEx->valid_language_bitmap );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// NSDExのlanguageチェック(こちらには、中・韓も入る)
|
||||
if( ( ~validLangBitmap & ( 0x0001 << pNSDEx->language ) ) ||
|
||||
( pNSDEx->valid_language_bitmap != validLangBitmap ) ) {
|
||||
OS_TPrintf("NSDEx: invalid language : org:%02d ex:%02d bitmap:%04x\n",
|
||||
pNSD->option.language, pNSDEx->language, pNSDEx->valid_language_bitmap );
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
//pNSD->owner;
|
||||
|
||||
// favoriteColorは4bitなので範囲外はない。
|
||||
|
||||
// birthday
|
||||
@ -357,7 +362,7 @@ static BOOL NSDi_CheckDataValue( NSDStoreEx *pNSDStoreEx, u8 region )
|
||||
// NTR設定データのクリア
|
||||
void NSD_ClearSettings( void )
|
||||
{
|
||||
NSDStoreEx *pNSDStoreEx = &s_NSDStoreEx;
|
||||
NSDStoreEx *pNSDStoreEx = &s_NSDStoreEx[ 0 ];
|
||||
|
||||
s_indexNSD = 1; // ライト前に反転されるので、"0"側が選択されるように"1"にしておく
|
||||
|
||||
|
||||
@ -149,7 +149,7 @@ BOOL TSF_WriteFile( char *pPath, TSFHeader *pHeader, const void *pSrcBody, u8 *p
|
||||
pHeader->saveCount = 0;
|
||||
}
|
||||
|
||||
OS_TPrintf( "Write > %s : 0x%02x\n", pPath, pHeader->saveCount );
|
||||
OS_TPrintf( "Write > %s : %d\n", pPath, pHeader->saveCount );
|
||||
|
||||
// ファイルオープン
|
||||
if( !FS_OpenFileEx( &file, pPath, FS_FILEMODE_R | FS_FILEMODE_W ) ) { // R|Wモードで開くと、既存ファイルを残したまま更新。
|
||||
|
||||
@ -31,21 +31,6 @@ static u8 MY_StrLen( const u16 *pStr );
|
||||
// static variables-----------------------------------------------------
|
||||
|
||||
// const data-----------------------------------------------------------
|
||||
#if 0
|
||||
// TWL言語->NTR 言語への対応マップ
|
||||
const u8 s_langCodeMapFromTWLtoNTR[ TWL_LANG_CODE_MAX ] = {
|
||||
NTR_LANG_JAPANESE // TWL_LANG_JAPANESE
|
||||
NTR_LANG_ENGLISH // TWL_LANG_ENGLISH
|
||||
NTR_LANG_FRENCH // TWL_LANG_FRENCH
|
||||
NTR_LANG_GERMAN // TWL_LANG_GERMAN
|
||||
NTR_LANG_ITALIAN // TWL_LANG_ITALIAN
|
||||
NTR_LANG_SPANISH // TWL_LANG_SPANISH
|
||||
NTR_LANG_CHINESE // TWL_LANG_SIMP_CHINESE
|
||||
NTR_LANG_KOREAN // TWL_LANG_KOREAN
|
||||
// NTR_LANG_ENGLISH // TWL_LANG_DUTCH
|
||||
// NTR_LANG_CHINESE // TWL_LANG_TRAD_CHINESE
|
||||
};
|
||||
#endif
|
||||
|
||||
// function's description-----------------------------------------------
|
||||
|
||||
@ -57,18 +42,11 @@ BOOL SYSM_ReadTWLSettingsFile( void )
|
||||
retval = TSD_ReadSettings();
|
||||
// NTR設定データのリード
|
||||
if( !NSD_IsReadSettings() ) {
|
||||
NSDStoreEx (*pTempBuffer)[2] = SYSM_Alloc( NSD_TEMP_BUFFER_SIZE );
|
||||
if( pTempBuffer == NULL ) {
|
||||
OS_TPrintf( "%s : malloc failed.\n", __FUNCTION__ );
|
||||
goto RETURN;
|
||||
}
|
||||
(void)NSD_ReadSettings( THW_GetRegion(), pTempBuffer );
|
||||
SYSM_Free( pTempBuffer );
|
||||
(void)NSD_ReadSettings( THW_GetValidLanguageBitmap() );
|
||||
#ifndef SDK_FINALROM
|
||||
(void)SYSMi_VerifyNTRSettings();
|
||||
(void)SYSMi_VerifyNTRSettings(); // デバッグ用ベリファイ
|
||||
#endif
|
||||
}
|
||||
RETURN:
|
||||
SYSM_SetValidTSD( retval );
|
||||
return retval;
|
||||
}
|
||||
@ -84,9 +62,9 @@ BOOL SYSM_WriteTWLSettingsFile( void )
|
||||
if( retval ) {
|
||||
SYSM_SetValidTSD( TRUE );
|
||||
SYSMi_ConvertTWL2NTRSettings();
|
||||
NSD_WriteSettings( THW_GetRegion() );
|
||||
(void)NSD_WriteSettings();
|
||||
#ifndef SDK_FINALROM
|
||||
(void)SYSM_VerifyAndRecoveryNTRSettings(); // ※デバッグ用 ベリファイして、NGならリカバリ
|
||||
(void)SYSMi_VerifyNTRSettings(); // デバッグ用ベリファイ
|
||||
#endif
|
||||
}
|
||||
return retval;
|
||||
@ -97,20 +75,15 @@ BOOL SYSM_WriteTWLSettingsFile( void )
|
||||
void SYSM_VerifyAndRecoveryNTRSettings( void )
|
||||
{
|
||||
BOOL isRecovery = FALSE;
|
||||
NSDStoreEx (*pTempBuffer)[2] = SYSM_Alloc( NSD_TEMP_BUFFER_SIZE );
|
||||
|
||||
// NVRAMからNTR設定データをロードして、TWL設定データとベリファイ
|
||||
if( pTempBuffer == NULL ) {
|
||||
OS_Panic( "%s : malloc error.\n", __FUNCTION__ );
|
||||
}
|
||||
if( !NSD_ReadSettings( THW_GetRegion(), pTempBuffer ) ||
|
||||
if( !NSD_ReadSettings( THW_GetValidLanguageBitmap() ) ||
|
||||
!SYSMi_VerifyNTRSettings()
|
||||
) {
|
||||
// ロード or ベリファイ失敗なら、TWL設定データからNTR設定データを生成して、書き込み
|
||||
SYSMi_ConvertTWL2NTRSettings();
|
||||
NSD_WriteSettings( THW_GetRegion() );
|
||||
NSD_WriteSettings();
|
||||
}
|
||||
SYSM_Free( pTempBuffer );
|
||||
}
|
||||
|
||||
|
||||
@ -118,8 +91,7 @@ void SYSM_VerifyAndRecoveryNTRSettings( void )
|
||||
BOOL SYSMi_VerifyNTRSettings( void )
|
||||
{
|
||||
BOOL isFailed = FALSE;
|
||||
// NTRAlarm zeroAlarm; // TWLでアラームをなくす場合は、ゼロ値アラームと比較させる。
|
||||
// MI_CpuClear( &zeroAlarm, sizeof(NTRAlarm) );
|
||||
u32 twlValidLangBitmap;
|
||||
|
||||
// 値が一致する必要があるもの
|
||||
if( // NTR設定データバージョン
|
||||
@ -177,26 +149,32 @@ BOOL SYSMi_VerifyNTRSettings( void )
|
||||
}
|
||||
|
||||
// 値が一致する必要があるもの
|
||||
if( ( NSD_GetRTCOffset() != TSD_GetRTCOffset() ) ||
|
||||
( NSD_GetLanguageEx() != TSD_GetLanguage() )
|
||||
// || ( NSD_GetLanguageBitmap() != TSD_GetLanguageBitmap() )
|
||||
) {
|
||||
if( NSD_GetRTCOffset() != TSD_GetRTCOffset() ) {
|
||||
isFailed = TRUE;
|
||||
}
|
||||
|
||||
// SystemMenuのリージョンによって、ちょっと特殊な処理が必要なもの
|
||||
{
|
||||
NTRLangCode language = ( TSD_GetLanguage() < NTR_LANG_CODE_MAX_WW ) ?
|
||||
NSD_GetLanguage() : NSD_GetLanguageEx();
|
||||
// NSD側は、各リージョンの対応言語ビットマップのものしか取りえない。
|
||||
if( ( THW_GetValidLanguageBitmap() & ( 0x0001 << language ) ) == 0 ) {
|
||||
twlValidLangBitmap = ( THW_GetValidLanguageBitmap() & NTR_LANG_BITMAP_ALL ) | ( 0x0001 << NTR_LANG_ENGLISH );
|
||||
OS_TPrintf( "%08x %08x\n", twlValidLangBitmap, NSD_GetValidLanguageBitmap() );
|
||||
if( twlValidLangBitmap != NSD_GetValidLanguageBitmap() ) {
|
||||
// 対応言語ビットマップ不一致
|
||||
isFailed = TRUE;
|
||||
}else if( !( twlValidLangBitmap & ( 0x0001 << NSD_GetLanguage() ) & ( 0x0001 << NSD_GetLanguageEx() ) ) ) {
|
||||
// NSD側が対応言語ビットマップ外の値になっている
|
||||
isFailed = TRUE;
|
||||
}else if( TSD_GetLanguage() < NTR_LANG_CODE_MAX_WW ) {
|
||||
if( ( NSD_GetLanguage() >= NTR_LANG_CODE_MAX_WW ) ||
|
||||
( NSD_GetLanguageEx() >= NTR_LANG_CODE_MAX_WW ) ) {
|
||||
isFailed = TRUE;
|
||||
}
|
||||
if( TSD_GetLanguage() >= NTR_LANG_CODE_MAX_WW ) {
|
||||
// TSD側がNTR標準6言語以外の時、NSD側のlanguageは強制ENGLISH(NCDEx側にちゃんとした値が入る)
|
||||
if( NSD_GetLanguage() != NTR_LANG_ENGLISH ) {
|
||||
isFailed = TRUE;
|
||||
}
|
||||
}else if( TSD_GetLanguage() <= NTR_LANG_KOREAN ) {
|
||||
if( ( NSD_GetLanguage() != NTR_LANG_ENGLISH ) ||
|
||||
( NSD_GetLanguageEx() > NTR_LANG_KOREAN ) ) {
|
||||
isFailed = TRUE;
|
||||
}
|
||||
}else {
|
||||
if( ( NSD_GetLanguage() != NTR_LANG_ENGLISH ) ||
|
||||
( NSD_GetLanguageEx() != NTR_LANG_ENGLISH ) ) {
|
||||
isFailed = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
@ -264,21 +242,30 @@ void SYSMi_ConvertTWL2NTRSettings( void )
|
||||
|
||||
// 値が一致する必要があるもの
|
||||
NSD_SetRTCOffset( TSD_GetRTCOffset() );
|
||||
NSD_SetLanguageEx( (NTRLangCode)TSD_GetLanguage() );
|
||||
// NSD_SetLanguageBitmap( TSD_GetLanguageBitmap() );
|
||||
|
||||
// SystemMenuのリージョンによって、ちょっと特殊な処理が必要なもの
|
||||
if( TSD_GetLanguage() < NTR_LANG_CODE_MAX_WW ) {
|
||||
// TSD側がNTR標準6言語の時、TSD側 == NSD側
|
||||
NSD_SetLanguage( (NTRLangCode)TSD_GetLanguage() );
|
||||
}else {
|
||||
NSD_SetLanguage ( (NTRLangCode)TSD_GetLanguage() );
|
||||
NSD_SetLanguageEx( (NTRLangCode)TSD_GetLanguage() );
|
||||
}else if( TSD_GetLanguage() <= TWL_LANG_KOREAN ) {
|
||||
// TSD側がNTR標準6言語以外の時、NSD側のlanguageは強制ENGLISH(NCDEx側にちゃんとした値が入る)
|
||||
NSD_SetLanguage( NTR_LANG_ENGLISH );
|
||||
NSD_SetLanguage ( NTR_LANG_ENGLISH );
|
||||
NSD_SetLanguageEx( (NTRLangCode)TSD_GetLanguage() );
|
||||
}else {
|
||||
// それ以外の時は強制ENGLISH
|
||||
NSD_SetLanguage ( NTR_LANG_ENGLISH );
|
||||
NSD_SetLanguageEx( NTR_LANG_ENGLISH );
|
||||
}
|
||||
// 言語ビットマップ
|
||||
{
|
||||
u16 validLangBitmap = (u16)( ( THW_GetValidLanguageBitmap() & NTR_LANG_BITMAP_ALL ) | ( 0x0001 << NTR_LANG_ENGLISH ) );
|
||||
NSD_SetValidLanguageBitmap( validLangBitmap ); // ライト関数内部でもマスクされるが、ここでもしておく。
|
||||
}
|
||||
|
||||
// 値が何でも問題ないもの
|
||||
// ※※※※ TWL側のバックライト輝度レベルが4段階でない時は、変換が必要。※※※※
|
||||
NSD_SetBacklightBrightness( TSD_GetBacklightBrightness() );
|
||||
NSD_SetBacklightBrightness( TSD_GetBacklightBrightness() & 0x03 );
|
||||
// [TODO:] TWL側のバックライト輝度レベルが4段階でない時は、変換が必要。
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -103,50 +103,6 @@ static u32 load_region_check_list[RELOCATE_INFO_NUM][RELOCATE_INFO_NUM * 2 - 1]
|
||||
NULL },
|
||||
};
|
||||
|
||||
#if 0
|
||||
|
||||
typedef struct RomReloadInfo {
|
||||
void *pSrc;
|
||||
void *pDst;
|
||||
u32 length;
|
||||
BOOL revCopy;
|
||||
}RomReloadInfo;
|
||||
|
||||
static RomReloadInfo romReloadInfo[] = {
|
||||
|
||||
};
|
||||
|
||||
static BOOL SYSMi_OutOfRangeRomSegment( u32 start, u32 length, RomSegmentRange *pRange, ReloadInfo *pReload )
|
||||
{
|
||||
BOOL isReload = FALSE;
|
||||
u32 end = (u32)start + length;
|
||||
|
||||
if( start < pRange->start ) {
|
||||
if( end <= pRange->start ) {
|
||||
isReload = TRUE;
|
||||
pReload->revCopy = FALSE;
|
||||
}else {
|
||||
isReload = TRUE;
|
||||
pReload->revCopy = TRUE;
|
||||
}
|
||||
}else if( start <= pRange->end ) {
|
||||
if( end <= pRange->end ) {
|
||||
if(u32)( pRange->start + length ) )
|
||||
}else if( end > pRange->end ) {
|
||||
isReload = TRUE;
|
||||
pReload->revCopy = FALSE;
|
||||
}
|
||||
}else if( start > pRange->end ) {
|
||||
isReload = TRUE;
|
||||
}
|
||||
|
||||
if( isReload ) {
|
||||
pReload->pDst = (void *)start;
|
||||
pReload->pSrc = (void *)pRange->start;
|
||||
pReload->length = length;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
// ============================================================================
|
||||
//
|
||||
@ -174,10 +130,6 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||
|
||||
SYSM_SetAllocFunc( pAlloc, pFree );
|
||||
|
||||
// WRAM<41>Ý’č‚Í‚˘‚é<E2809A>H
|
||||
// MI_SetMainMemoryPriority(MI_PROCESSOR_ARM7);
|
||||
// MI_SetWramBank(MI_WRAM_ARM7_ALL);
|
||||
|
||||
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
BIN
doc/言語コード処理.xls
Normal file
BIN
doc/言語コード処理.xls
Normal file
Binary file not shown.
@ -36,7 +36,6 @@ extern "C" {
|
||||
#define NTR_COMMENT_LENGTH 26 // コメント長
|
||||
#define NTR_COMMENT_BUFFERSIZE ( NTR_COMMENT_LENGTH * 2 )
|
||||
#define NTR_USER_COLOR_MAX_NUM 16 // ユーザーカラーの最大数
|
||||
#define NSD_TEMP_BUFFER_SIZE ( sizeof(NSDStoreEx) * 2 ) // NSD_ReadSettingsで必要なTempBufferサイズ
|
||||
|
||||
// 言語設定コード
|
||||
typedef enum NTRLangCode{
|
||||
@ -58,7 +57,7 @@ typedef enum NTRLangCode{
|
||||
( 0x0001 << NTR_LANG_FRENCH ) | \
|
||||
( 0x0001 << NTR_LANG_GERMAN ) | \
|
||||
( 0x0001 << NTR_LANG_ITALIAN ) | \
|
||||
( 0x0001 << NTR_LANG_SPANISH ) ) // SystemMenu-WW版での対応言語ビットマップ
|
||||
( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-WW版での対応言語ビットマップ
|
||||
|
||||
|
||||
#define NTR_LANG_BITMAP_CHINA ( ( 0x0001 << NTR_LANG_CHINESE ) | \
|
||||
@ -66,7 +65,7 @@ typedef enum NTRLangCode{
|
||||
( 0x0001 << NTR_LANG_FRENCH ) | \
|
||||
( 0x0001 << NTR_LANG_GERMAN ) | \
|
||||
( 0x0001 << NTR_LANG_ITALIAN ) | \
|
||||
( 0x0001 << NTR_LANG_SPANISH ) ) // SystemMenu-CN版での対応言語ビットマップ
|
||||
( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-CN版での対応言語ビットマップ
|
||||
|
||||
|
||||
#define NTR_LANG_BITMAP_KOREA ( ( 0x0001 << NTR_LANG_KOREAN ) | \
|
||||
@ -74,8 +73,16 @@ typedef enum NTRLangCode{
|
||||
( 0x0001 << NTR_LANG_ENGLISH ) | \
|
||||
( 0x0001 << NTR_LANG_FRENCH ) | \
|
||||
( 0x0001 << NTR_LANG_GERMAN ) | \
|
||||
( 0x0001 << NTR_LANG_SPANISH ) ) // SystemMenu-KR版での対応言語ビットマップ
|
||||
( 0x0001 << NTR_LANG_SPANISH ) ) // NTR-IPL2-KR版での対応言語ビットマップ
|
||||
|
||||
#define NTR_LANG_BITMAP_ALL ( ( 0x0001 << NTR_LANG_JAPANESE ) | \
|
||||
( 0x0001 << NTR_LANG_ENGLISH ) | \
|
||||
( 0x0001 << NTR_LANG_FRENCH ) | \
|
||||
( 0x0001 << NTR_LANG_GERMAN ) | \
|
||||
( 0x0001 << NTR_LANG_ITALIAN ) | \
|
||||
( 0x0001 << NTR_LANG_SPANISH ) | \
|
||||
( 0x0001 << NTR_LANG_CHINESE ) | \
|
||||
( 0x0001 << NTR_LANG_KOREAN ) ) // NTR-IPL2全体での対応言語ビットマップ
|
||||
|
||||
// 日付データ
|
||||
typedef struct NTRDate{
|
||||
@ -170,42 +177,23 @@ typedef struct NTRSettingsDataEx{
|
||||
}NTRSettingsDataEx; // 138bytes
|
||||
|
||||
|
||||
// NTR各種設定データのNVRAM保存時フォーマット
|
||||
typedef struct NSDStore{
|
||||
NTRSettingsData nsd; // NTR各種設定データ
|
||||
u16 saveCount; // 0x00-0x7fをループしてカウントし、カウント値が新しいデータが有効。
|
||||
u16 crc16; // NTR各種設定データの16bitCRC
|
||||
u8 pad[ 128 - sizeof(NTRSettingsData) - 4];
|
||||
}NSDStore; // 128byte // ※本来なら、saveCountとcrc16は256byteの最後に付加して、間にパディングを埋める方がいい。
|
||||
|
||||
|
||||
// NTR各種設定データEXのNVRAM保存時フォーマット(上記NCDStoreと互換をとるための無理やり拡張)
|
||||
typedef struct NSDStoreEx{
|
||||
NTRSettingsData nsd; // NTR各種設定データ
|
||||
u16 saveCount; // 0x00-0x7fをループしてカウントし、カウント値が新しいデータが有効。
|
||||
u16 crc16; // NTR各種設定データの16bitCRC
|
||||
NTRSettingsDataEx nsd_ex;
|
||||
u16 crc16_ex;
|
||||
}NSDStoreEx; // 256byte // ※本来なら、saveCountとcrc16は256byteの最後に付加して、間にパディングを埋める方がいい。
|
||||
|
||||
|
||||
#ifdef SDK_ARM9
|
||||
|
||||
//=========================================================
|
||||
// グローバル変数
|
||||
//=========================================================
|
||||
extern NTRSettingsData *g_pNSD;
|
||||
extern NTRSettingsDataEx *g_pNSDEx;
|
||||
#define GetNSD() ( g_pNSD )
|
||||
#define GetNSDEx() ( g_pNSDEx )
|
||||
|
||||
//=========================================================
|
||||
// NVRAMへのリードライト関数
|
||||
//=========================================================
|
||||
extern void NSD_ClearSettings( void );
|
||||
extern BOOL NSD_IsReadSettings( void );
|
||||
extern BOOL NSD_ReadSettings( u8 region, NSDStoreEx (*pTempBuffer)[2] ); // NSD_TEMP_BUFFER_SIZEのpTempBufferが必要。
|
||||
extern BOOL NSD_WriteSettings( u8 region ); // 先にNSD_ReadSettingsを実行しておく必要がある。
|
||||
extern BOOL NSD_ReadSettings( u32 validLangBitmap );
|
||||
extern BOOL NSD_WriteSettings( void ); // 先にNSD_ReadSettingsを実行しておく必要がある。
|
||||
|
||||
//=========================================================
|
||||
// グローバル変数
|
||||
//=========================================================
|
||||
extern NTRSettingsData *g_pNSD;
|
||||
extern NTRSettingsDataEx *g_pNSDEx;
|
||||
#define GetNSD() ( g_pNSD )
|
||||
#define GetNSDEx() ( g_pNSDEx )
|
||||
|
||||
//=========================================================
|
||||
// データ取得(NSD_ReadSettingsで内部ワークに読み出した情報の取得)
|
||||
@ -313,7 +301,7 @@ static inline NTRLangCode NSD_GetLanguageEx( void )
|
||||
}
|
||||
|
||||
// 対応言語ビットマップの取得
|
||||
static inline u16 NSD_GetLanguageBitmap( void )
|
||||
static inline u16 NSD_GetValidLanguageBitmap( void )
|
||||
{
|
||||
return GetNSDEx()->valid_language_bitmap;
|
||||
}
|
||||
@ -488,7 +476,7 @@ static inline void NSD_SetLanguageEx( NTRLangCode language )
|
||||
#endif
|
||||
|
||||
// 対応言語ビットマップのセット
|
||||
static inline void NSD_SetLanguageBitmap( u16 valid_language_bitmap )
|
||||
static inline void NSD_SetValidLanguageBitmap( u16 valid_language_bitmap )
|
||||
{
|
||||
GetNSDEx()->valid_language_bitmap = valid_language_bitmap;
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user