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 )
{
if( SYSMi_GetWork()->flags.common.isCardBoot ) {
#ifdef DEBUG_USED_CARD_SLOT_B_
reg_MI_MC_SWP ^= 0x80; // カードスロットのスワップ
reg_MI_MC_SWP ^= 0x80; // カードスロットのスワップ
#endif
*(u32 *)HW_BOOT_CHECK_INFO_BUF = SYSMi_GetWork()->nCardID; // カード抜けチェックバッファにカードIDをセット
}else {
*(u32 *)HW_BOOT_CHECK_INFO_BUF = 0;
}
// カード抜けチェックバッファにカードIDをセット
((SDKBootCheckInfo*)HW_BOOT_CHECK_INFO_BUF)->nCardID = SYSMi_GetWork()->appCardID;
*(vu32 *)HW_RESET_PARAMETER_BUF = 0; // リセットバッファをクリア

View File

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

View File

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

View File

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