NANDアプリブート時にカードアプリのROMヘッダを参照している箇所を修正。

HOTSW終了処理の完了をARM9で確認。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1383 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-05-16 09:34:22 +00:00
parent b8ca604cc3
commit d42503d188
6 changed files with 35 additions and 8 deletions

View File

@ -61,6 +61,11 @@ void BOOT_Ready( void )
BOOL isNtrMode; BOOL isNtrMode;
int i; int i;
// HOTSW<53>I—¹<E28094>ˆ<CB86>Ò¿
while( ! HOTSW_isFinalized() ) {
OS_Sleep( 1 );
}
// エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。 // エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。
// SYSMi_CheckEntryAddress(); // SYSMi_CheckEntryAddress();

View File

@ -1908,7 +1908,7 @@ static void FinalizeHotSw(HotSwApliType type)
if(type == HOTSW_APLITYPE_CARD){ if(type == HOTSW_APLITYPE_CARD){
ClearUnnecessaryCardRegister(); ClearUnnecessaryCardRegister();
return; goto final;
} }
isCardExist = HOTSW_IsCardExist(); isCardExist = HOTSW_IsCardExist();
@ -1918,7 +1918,7 @@ static void FinalizeHotSw(HotSwApliType type)
// カードがなかったら、レジスタクリアしてリターン // カードがなかったら、レジスタクリアしてリターン
if(!isCardExist){ if(!isCardExist){
ClearAllCardRegister(); ClearAllCardRegister();
return; goto final;
} }
switch(type){ switch(type){
@ -1932,7 +1932,7 @@ static void FinalizeHotSw(HotSwApliType type)
OS_PutString("Failed To Change Game Mode... Card Slot Power Off\n"); OS_PutString("Failed To Change Game Mode... Card Slot Power Off\n");
return; goto final;
} }
break; break;
@ -1944,7 +1944,8 @@ static void FinalizeHotSw(HotSwApliType type)
OS_Sleep(1); OS_Sleep(1);
} }
if(s_cbData.pBootSegBuf->rh.s.game_card_on){ // NANDアプリヘッダはコピー済み
if(((ROM_Header*)SYSM_CARD_ROM_HEADER_BUF)->s.game_card_on){
McPowerOn(); McPowerOn();
s_cbData.modeType = HOTSW_MODE2; s_cbData.modeType = HOTSW_MODE2;
@ -1967,6 +1968,10 @@ static void FinalizeHotSw(HotSwApliType type)
// 必要なレジスタ以外クリア // 必要なレジスタ以外クリア
ClearUnnecessaryCardRegister(); ClearUnnecessaryCardRegister();
final:
// 終了完了通知
SYSMi_GetWork()->flags.hotsw.isFinalized = TRUE;
} }

View File

@ -117,6 +117,17 @@ void HOTSW_FinalizeHotSWAsync( HotSwApliType apliType )
} }
/*---------------------------------------------------------------------------*
Name: HOTSW_isFinalized
Description:
*---------------------------------------------------------------------------*/
BOOL HOTSW_isFinalized(void)
{
return SYSMi_GetWork()->flags.hotsw.isFinalized;
}
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: HOTSW_isEnableHotSW Name: HOTSW_isEnableHotSW
@ -124,7 +135,7 @@ void HOTSW_FinalizeHotSWAsync( HotSwApliType apliType )
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HOTSW_isEnableHotSW(void) BOOL HOTSW_isEnableHotSW(void)
{ {
return SYSMi_GetWork()->flags.hotsw.isEnableHotSW ? TRUE : FALSE; return SYSMi_GetWork()->flags.hotsw.isEnableHotSW;
} }
@ -135,7 +146,7 @@ BOOL HOTSW_isEnableHotSW(void)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
BOOL HOTSW_isCardLoadCompleted(void) BOOL HOTSW_isCardLoadCompleted(void)
{ {
return SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted ? TRUE : FALSE; return SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted;
} }

View File

@ -401,6 +401,8 @@ static void SYSMi_FinalizeHotSWAsync( TitleProperty *pBootTitle, ROM_Header *hea
{ {
HotSwApliType hotsw_type; HotSwApliType hotsw_type;
DC_StoreRange( head, sizeof(ROM_Header) );
switch( pBootTitle->flags.bootType ) switch( pBootTitle->flags.bootType )
{ {
case LAUNCHER_BOOTTYPE_NAND: case LAUNCHER_BOOTTYPE_NAND:
@ -692,10 +694,10 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
{ {
// ヘッダ読み込み完了フラグを立てる // ヘッダ読み込み完了フラグを立てる
SYSMi_GetWork()->flags.common.isHeaderLoadCompleted = TRUE; SYSMi_GetWork()->flags.common.isHeaderLoadCompleted = TRUE;
// WRAM経由ロードの場合はAES初期化
(void)SYSM_InitDecryptAESRegion_W( (ROM_Header_Short *)destaddr[region_header] );
// HOTSW終了処理有効化 // HOTSW終了処理有効化
SYSMi_FinalizeHotSWAsync( pBootTitle, head ); SYSMi_FinalizeHotSWAsync( pBootTitle, head );
// WRAM経由ロードの場合はAES初期化
(void)SYSM_InitDecryptAESRegion_W( (ROM_Header_Short *)destaddr[region_header] );
} }
} }

View File

@ -107,6 +107,9 @@ BOOL HOTSW_isEnableHotSW(void);
// カードアプリのロードが完了しているかを返す // カードアプリのロードが完了しているかを返す
BOOL HOTSW_isCardLoadCompleted(void); BOOL HOTSW_isCardLoadCompleted(void);
// 終了処理が完了したかを返す
BOOL HOTSW_isFinalized(void);
#ifdef USE_WRAM_LOAD #ifdef USE_WRAM_LOAD
// 活栓挿抜処理の初期化 // 活栓挿抜処理の初期化
void HOTSW_Init(); void HOTSW_Init();

View File

@ -124,6 +124,7 @@ typedef struct SYSM_work {
vu16 isValidCardBanner :1; // バナーデータ更新? vu16 isValidCardBanner :1; // バナーデータ更新?
vu16 is1stCardChecked :1; // カードデータの1stチェック完了 vu16 is1stCardChecked :1; // カードデータの1stチェック完了
vu16 isCardGameMode :1; // カードがゲームモードに遷移したか? vu16 isCardGameMode :1; // カードがゲームモードに遷移したか?
vu16 isFinalized :1; // HOTSW<53>I—¹<E28094>ˆ<CB86>Š®—¹
vu16 :0; vu16 :0;
vu8 isCardStateChanged; // カード状態更新フラグ vu8 isCardStateChanged; // カード状態更新フラグ
}hotsw; }hotsw;