RSFのGameCardNitroModeプロパティへ対応。

カードIDをFinalize時に渡すように変更。
DS-IPL同様にカードブート以外でもカードIDを渡す。
DSP初期化を戻す。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1615 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
nakasima 2008-06-12 04:42:12 +00:00
parent f365c98557
commit 22e68de023
4 changed files with 51 additions and 30 deletions

View File

@ -330,14 +330,11 @@ static void BOOTi_RebootCallback( void** entryp, void* mem_list_v, REBOOTTarget*
static void BOOTi_ClearREG_RAM( void ) static void BOOTi_ClearREG_RAM( void )
{ {
if( SYSMi_GetWork()->flags.common.isCardBoot ) {
#ifdef DEBUG_USED_CARD_SLOT_B_ #ifdef DEBUG_USED_CARD_SLOT_B_
reg_MI_MC_SWP ^= 0x80; // カードスロットのスワップ reg_MI_MC_SWP ^= 0x80; // カードスロットのスワップ
#endif #endif
*(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット // カード抜けチェックバッファにカードIDをセット
}else { ((SDKBootCheckInfo*)HW_BOOT_CHECK_INFO_BUF)->nCardID = SYSMi_GetWork()->appCardID;
*(u32 *)HW_BOOT_CHECK_INFO_BUF = 0;
}
*(vu32 *)HW_RESET_PARAMETER_BUF = 0; // リセットバッファをクリア *(vu32 *)HW_RESET_PARAMETER_BUF = 0; // リセットバッファをクリア

View File

@ -91,6 +91,7 @@ static HotSwState ReadSecureModeCardData(void);
static void ClearCardFlgs(void); static void ClearCardFlgs(void);
static void FinalizeHotSw(HotSwApliType type); static void FinalizeHotSw(HotSwApliType type);
static void ForceNitroModeToFinalize(void);
static BOOL ChangeGameMode(void); static BOOL ChangeGameMode(void);
static void ClearCardIrq(void); static void ClearCardIrq(void);
static void ClearAllCardRegister(void); static void ClearAllCardRegister(void);
@ -408,7 +409,7 @@ static HotSwState LoadCardData(void)
RegisterRomEmuInfo(); RegisterRomEmuInfo();
// 排他制御ここまで // 排他制御ここまで
UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc); UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
goto end; goto finalize;
} }
} }
@ -1588,7 +1589,6 @@ static void HotSwThread(void *arg)
SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE; SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE;
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE; SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = TRUE; SYSMi_GetWork()->flags.hotsw.isCardLoadCompleted = TRUE;
SYSMi_GetWork()->nCardID = s_cbData.id_gam;
#ifdef USE_WRAM_LOAD #ifdef USE_WRAM_LOAD
SYSMi_GetWork()->flags.hotsw.isCardGameMode = TRUE; SYSMi_GetWork()->flags.hotsw.isCardGameMode = TRUE;
#endif #endif
@ -1671,11 +1671,14 @@ static void ClearCardFlgs(void)
TWL NANDアプリ起動なら TWL NANDアプリ起動なら
NANDアプリヘッダ指定無し
OFF
NANDアプリヘッダのゲームカードONフラグ=1 NANDアプリヘッダのゲームカードONフラグ=1
NANDアプリ起動後もカード電源(OFF後)ONにしてNormalモードにする NANDアプリ起動後もカード電源(OFF後)ONにしてNormalモードにする
NANDアプリヘッダのゲームカードONフラグ=0 NANDアプリヘッダのゲームカードNITROモードフラグ=1
OFF NTR NANDアプリ同様
NTR NANDアプリ起動なら NTR NANDアプリ起動なら
OFFしてからGAMEモードに遷移させておく OFFしてからGAMEモードに遷移させておく
@ -1691,8 +1694,9 @@ static void ClearCardFlgs(void)
*---------------------------------------------------------------------------*/ *---------------------------------------------------------------------------*/
static void FinalizeHotSw(HotSwApliType type) static void FinalizeHotSw(HotSwApliType type)
{ {
ROM_Header* rh = (void*)SYSM_APP_ROM_HEADER_BUF;
static BOOL finalized = FALSE; static BOOL finalized = FALSE;
BOOL isCardExist; BOOL isAccessible;
if(finalized){ if(finalized){
return; return;
@ -1705,17 +1709,19 @@ static void FinalizeHotSw(HotSwApliType type)
// ポーリングスレッドを消去 // ポーリングスレッドを消去
OS_KillThread( &HotSwThreadData.monitorThread, NULL ); OS_KillThread( &HotSwThreadData.monitorThread, NULL );
SYSMi_GetWork()->appCardID = 0;
if(type == HOTSW_APLITYPE_CARD){ if(type == HOTSW_APLITYPE_CARD){
ClearCardIrq(); SYSMi_GetWork()->appCardID = s_cbData.id_gam;
goto final; goto final;
} }
isCardExist = HOTSW_IsCardExist(); isAccessible = HOTSW_IsCardAccessible();
McPowerOff(); McPowerOff();
// カードがかったら、レジスタクリアしてリターン // カードが無い(アクセスできない)なら、レジスタクリアしてリターン
if(!isCardExist){ if(!isAccessible){
ClearAllCardRegister(); ClearAllCardRegister();
goto final; goto final;
} }
@ -1725,14 +1731,7 @@ static void FinalizeHotSw(HotSwApliType type)
case HOTSW_APLITYPE_NTR_NAND: case HOTSW_APLITYPE_NTR_NAND:
OS_PutString("Finalize Type : NTR NAND Application\n"); OS_PutString("Finalize Type : NTR NAND Application\n");
if(!ChangeGameMode()){ ForceNitroModeToFinalize();
ClearAllCardRegister();
McPowerOff();
OS_PutString("Failed To Change Game Mode... Card Slot Power Off\n");
goto final;
}
break; break;
// TWL NAND Application Boot // TWL NAND Application Boot
@ -1744,12 +1743,17 @@ static void FinalizeHotSw(HotSwApliType type)
} }
// NANDアプリヘッダはコピー済み // NANDアプリヘッダはコピー済み
if(((ROM_Header*)SYSM_APP_ROM_HEADER_BUF)->s.access_control.game_card_on){ if(rh->s.access_control.game_card_nitro_mode){
ForceNitroModeToFinalize();
}
else if(rh->s.access_control.game_card_on){
McPowerOn(); McPowerOn();
s_cbData.modeType = HOTSW_MODE2; s_cbData.modeType = HOTSW_MODE2;
(void)LoadTable(); (void)LoadTable();
(void)ReadIDNormal(&s_cbData);
(void)ReadBootSegNormal(&s_cbData); (void)ReadBootSegNormal(&s_cbData);
SYSMi_GetWork()->appCardID = s_cbData.id_nml;
OS_PutString("- game card on flg is TRUE : now Normal Mode\n"); OS_PutString("- game card on flg is TRUE : now Normal Mode\n");
} }
@ -1765,10 +1769,13 @@ static void FinalizeHotSw(HotSwApliType type)
break; break;
} }
final:
ClearCardIrq(); ClearCardIrq();
final: // デバッガではTWLカードスロットを電源ON
// デバッガではTWLカードスロットを電源ON既にONなら何もしない //既にONなら何もしない
// NANDアプリ起動時はデフォルトではカードI/FをOFFにするが、
// デバッガモニタではカードI/Fが必要なためスロットを使用
if ( SYSM_IsRunOnDebugger() ) if ( SYSM_IsRunOnDebugger() )
{ {
HOTSWi_TurnCardPowerOn( 2 ); HOTSWi_TurnCardPowerOn( 2 );
@ -1779,6 +1786,26 @@ final:
} }
/*---------------------------------------------------------------------------*
Name: ForceNitroModeToFinalize
Description: Nitro互換のGame Modeに強制移行させる
*---------------------------------------------------------------------------*/
static void ForceNitroModeToFinalize(void)
{
s_cbData.id_gam = 0;
if(!ChangeGameMode()){
ClearAllCardRegister();
McPowerOff();
OS_PutString("Failed To Change Game Mode... Card Slot Power Off\n");
}
SYSMi_GetWork()->appCardID = s_cbData.id_gam;
}
/*---------------------------------------------------------------------------* /*---------------------------------------------------------------------------*
Name: ChangeGameMode Name: ChangeGameMode

View File

@ -218,7 +218,6 @@ void TwlMain( void )
#endif #endif
// DSP<53>‰Šú‰» // DSP<53>‰Šú‰»
#if 0
{ {
FSFile file[1]; FSFile file[1];
MIWramSize sizeB = MI_WRAM_SIZE_128KB; MIWramSize sizeB = MI_WRAM_SIZE_128KB;
@ -238,8 +237,6 @@ void TwlMain( void )
} }
DSP_UnloadJpegDecoder(); DSP_UnloadJpegDecoder();
} }
#endif
#endif // INIT_DEVICES_LIKE_UIG_LAUNCHER #endif // INIT_DEVICES_LIKE_UIG_LAUNCHER
// startŽžŠÔŒvªP-c // startŽžŠÔŒvªP-c

View File

@ -136,7 +136,7 @@ typedef struct SYSM_work {
OSLockWord lockCardRsc ATTRIBUTE_ALIGN(8); // カードリソース排他制御用 OSLockWord lockCardRsc ATTRIBUTE_ALIGN(8); // カードリソース排他制御用
OSLockWord lockHotSW; // カードリソース排他制御用 OSLockWord lockHotSW; // カードリソース排他制御用
u32 nCardID; // カードID u32 appCardID; // カードID
u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする) u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする)
u8 cloneBootMode; u8 cloneBootMode;