・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:
yosiokat 2007-12-12 13:00:55 +00:00
parent 09bef4a051
commit 698853c42d
7 changed files with 128 additions and 196 deletions

View File

@ -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は、日・英・独・仏・伊・西の言語のうちの、対応言語のみの値となる。
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"にしておく

View File

@ -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モードで開くと、既存ファイルを残したまま更新。

View File

@ -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標準言語以外の時、NSD側のlanguageは強制ENGLISHNCDEx側にちゃんとした値が入る
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標準言語の時、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標準言語以外の時、NSD側のlanguageは強制ENGLISHNCDEx側にちゃんとした値が入る
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側のバックライト輝度レベルが段階でない時は、変換が必要。※※※※
NSD_SetBacklightBrightness( TSD_GetBacklightBrightness() );
NSD_SetBacklightBrightness( TSD_GetBacklightBrightness() & 0x03 );
// [TODO:] TWL側のバックライト輝度レベルが段階でない時は、変換が必要。
}

View File

@ -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.

View File

@ -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;
}