mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
アプリジャンプ時のデバッガ接続対応(ROMエミュレーション情報再ロード版)。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1149 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
3bdc49eac2
commit
c42bc3397c
@ -44,6 +44,9 @@
|
|||||||
#include "nvram_sp.h"
|
#include "nvram_sp.h"
|
||||||
#include "twl/sea.h"
|
#include "twl/sea.h"
|
||||||
|
|
||||||
|
// 未実装(現状ではデバッガ接続しないなら選択してもよい)
|
||||||
|
//#define HYENA_ROMEMU_INFO_FROM_LNCR_PARAM
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
定数定義
|
定数定義
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
@ -217,13 +220,25 @@ TwlSpMain(void)
|
|||||||
if( ( SYSM_GetLauncherParamBody()->v1.flags.isValid ) &&
|
if( ( SYSM_GetLauncherParamBody()->v1.flags.isValid ) &&
|
||||||
( SYSM_GetLauncherParamBody()->v1.flags.bootType != LAUNCHER_BOOTTYPE_ROM ) &&
|
( SYSM_GetLauncherParamBody()->v1.flags.bootType != LAUNCHER_BOOTTYPE_ROM ) &&
|
||||||
( SYSM_GetLauncherParamBody()->v1.bootTitleID )
|
( SYSM_GetLauncherParamBody()->v1.bootTitleID )
|
||||||
) {
|
)
|
||||||
|
#ifdef HYENA_ROMEMU_INFO_FROM_LNCR_PARAM
|
||||||
|
{
|
||||||
// ランチャーパラメータでダイレクトカードブート以外の指定がある時は、活線挿抜をOFFにする。
|
// ランチャーパラメータでダイレクトカードブート以外の指定がある時は、活線挿抜をOFFにする。
|
||||||
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = 0;
|
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = 0;
|
||||||
}else {
|
}else {
|
||||||
// それ以外の時は活線挿抜ON
|
// それ以外の時は活線挿抜ON
|
||||||
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = 1;
|
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = 1;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
{
|
||||||
|
// ランチャーパラメータでダイレクトカードブート以外の指定がある時は、ROMエミュレーション情報のみ必要。
|
||||||
|
SYSMi_GetWork()->flags.hotsw.isLoadRomEmuOnly = 1;
|
||||||
|
}else {
|
||||||
|
// それ以外の時は普通にロード
|
||||||
|
SYSMi_GetWork()->flags.hotsw.isLoadRomEmuOnly = 0;
|
||||||
|
}
|
||||||
|
SYSMi_GetWork()->flags.hotsw.isEnableHotSW = 1;
|
||||||
|
#endif
|
||||||
|
|
||||||
// [TODO]アプリジャンプ有効で、カードブートでない時は、最初からHOTSW_Initを呼ばないようにしたい。
|
// [TODO]アプリジャンプ有効で、カードブートでない時は、最初からHOTSW_Initを呼ばないようにしたい。
|
||||||
HOTSW_Init(THREAD_PRIO_HOTSW);
|
HOTSW_Init(THREAD_PRIO_HOTSW);
|
||||||
|
|||||||
@ -233,6 +233,7 @@ typedef enum CardType{
|
|||||||
|
|
||||||
typedef enum HotSwState{
|
typedef enum HotSwState{
|
||||||
HOTSW_SUCCESS = 0,
|
HOTSW_SUCCESS = 0,
|
||||||
|
HOTSW_ROMEMU_ONLY,
|
||||||
HOTSW_TIME_OUT,
|
HOTSW_TIME_OUT,
|
||||||
HOTSW_CARD_LOCK_ERROR,
|
HOTSW_CARD_LOCK_ERROR,
|
||||||
HOTSW_CRC_CHECK_ERROR,
|
HOTSW_CRC_CHECK_ERROR,
|
||||||
|
|||||||
@ -83,6 +83,7 @@ static BOOL isTwlModeLoad(void);
|
|||||||
static HotSwState ReadSecureModeCardData(void);
|
static HotSwState ReadSecureModeCardData(void);
|
||||||
static void ClearCaradFlgs(void);
|
static void ClearCaradFlgs(void);
|
||||||
|
|
||||||
|
static void RegisterRomEmuInfo(void);
|
||||||
static void GenVA_VB_VD(void);
|
static void GenVA_VB_VD(void);
|
||||||
static HotSwState DecryptObjectFile(void);
|
static HotSwState DecryptObjectFile(void);
|
||||||
static HotSwState LoadBannerData(void);
|
static HotSwState LoadBannerData(void);
|
||||||
@ -404,6 +405,15 @@ static HotSwState LoadCardData(void)
|
|||||||
( 0xcf56 != s_cbData.pBootSegBuf->rh.s.nintendo_logo_crc16 ) ){
|
( 0xcf56 != s_cbData.pBootSegBuf->rh.s.nintendo_logo_crc16 ) ){
|
||||||
retval = (retval == HOTSW_SUCCESS) ? HOTSW_CRC_CHECK_ERROR : retval;
|
retval = (retval == HOTSW_SUCCESS) ? HOTSW_CRC_CHECK_ERROR : retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// アプリジャンプのデバッグ時にROMエミュレーション情報だけ必要な場合
|
||||||
|
if(SYSMi_GetWork()->flags.hotsw.isLoadRomEmuOnly){
|
||||||
|
SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE;
|
||||||
|
RegisterRomEmuInfo();
|
||||||
|
// 排他制御ここまで
|
||||||
|
UnlockHotSwRsc(&SYSMi_GetWork()->lockCardRsc);
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( retval == HOTSW_SUCCESS ) {
|
if( retval == HOTSW_SUCCESS ) {
|
||||||
@ -502,7 +512,7 @@ static HotSwState LoadCardData(void)
|
|||||||
// カードIDの比較をして、一致しなければFALSEを返す
|
// カードIDの比較をして、一致しなければFALSEを返す
|
||||||
if(s_cbData.id_scr != s_cbData.id_gam){
|
if(s_cbData.id_scr != s_cbData.id_gam){
|
||||||
retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval;
|
retval = (retval == HOTSW_SUCCESS) ? HOTSW_ID_CHECK_ERROR : retval;
|
||||||
goto end;
|
goto finalize;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 常駐モジュール残りを指定先に転送
|
// 常駐モジュール残りを指定先に転送
|
||||||
@ -528,7 +538,7 @@ static HotSwState LoadCardData(void)
|
|||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
end:
|
finalize:
|
||||||
if( retval == HOTSW_SUCCESS )
|
if( retval == HOTSW_SUCCESS )
|
||||||
{
|
{
|
||||||
// バッドブロックを置換
|
// バッドブロックを置換
|
||||||
@ -536,6 +546,7 @@ end:
|
|||||||
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
retval = (retval == HOTSW_SUCCESS) ? state : retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
end:
|
||||||
// カードDMA終了確認
|
// カードDMA終了確認
|
||||||
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
HOTSW_WaitDmaCtrl(HOTSW_NDMA_NO);
|
||||||
|
|
||||||
@ -730,6 +741,26 @@ BOOL HOTSWi_IsRomEmulation(void)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*
|
||||||
|
Name: RegisterRomEmuInfo
|
||||||
|
|
||||||
|
Description: ROMエミュレーション情報を登録
|
||||||
|
*---------------------------------------------------------------------------*/
|
||||||
|
static void RegisterRomEmuInfo(void)
|
||||||
|
{
|
||||||
|
SYSM_work* sw = SYSMi_GetWork();
|
||||||
|
|
||||||
|
// デバッガ情報
|
||||||
|
if ( ! sw->flags.hotsw.is1stCardChecked && debuggerFlg )
|
||||||
|
{
|
||||||
|
MI_CpuCopy8( &s_romEmuInfo, &(sw->romEmuInfo), ROM_EMULATION_DATA_SIZE );
|
||||||
|
sw->flags.hotsw.isOnDebugger = debuggerFlg;
|
||||||
|
}
|
||||||
|
|
||||||
|
sw->flags.hotsw.isCardStateChanged = TRUE;
|
||||||
|
sw->flags.hotsw.is1stCardChecked = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: LoadBannerData
|
Name: LoadBannerData
|
||||||
@ -742,6 +773,7 @@ static HotSwState LoadBannerData(void)
|
|||||||
{
|
{
|
||||||
BOOL state;
|
BOOL state;
|
||||||
HotSwState retval = HOTSW_SUCCESS;
|
HotSwState retval = HOTSW_SUCCESS;
|
||||||
|
SYSM_work* sw = SYSMi_GetWork();
|
||||||
|
|
||||||
// バナーリード
|
// バナーリード
|
||||||
if( s_cbData.pBootSegBuf->rh.s.banner_offset ) {
|
if( s_cbData.pBootSegBuf->rh.s.banner_offset ) {
|
||||||
@ -751,33 +783,26 @@ static HotSwState LoadBannerData(void)
|
|||||||
|
|
||||||
// バナーリードが成功していたら各種フラグTRUE その他の場合はFALSE (この関数の外で排他制御されているからここでは排他制御しないでOK)
|
// バナーリードが成功していたら各種フラグTRUE その他の場合はFALSE (この関数の外で排他制御されているからここでは排他制御しないでOK)
|
||||||
state = (retval == HOTSW_SUCCESS) ? TRUE : FALSE;
|
state = (retval == HOTSW_SUCCESS) ? TRUE : FALSE;
|
||||||
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = state;
|
sw->flags.hotsw.isValidCardBanner = state;
|
||||||
SYSMi_GetWork()->flags.hotsw.isExistCard = state;
|
sw->flags.hotsw.isExistCard = state;
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
// バナーデータが登録されていない場合 (この関数の外で排他制御されているからここでは排他制御しないでOK)
|
// バナーデータが登録されていない場合 (この関数の外で排他制御されているからここでは排他制御しないでOK)
|
||||||
SYSMi_GetWork()->flags.hotsw.isValidCardBanner = FALSE;
|
sw->flags.hotsw.isValidCardBanner = FALSE;
|
||||||
SYSMi_GetWork()->flags.hotsw.isExistCard = TRUE;
|
sw->flags.hotsw.isExistCard = TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( SYSMi_GetWork()->flags.hotsw.isExistCard )
|
if ( sw->flags.hotsw.isExistCard )
|
||||||
{
|
{
|
||||||
SYSMi_GetWork()->flags.hotsw.isInspectCard = s_cbData.pBootSegBuf->rh.s.inspect_card;
|
sw->flags.hotsw.isInspectCard = s_cbData.pBootSegBuf->rh.s.inspect_card;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
SYSMi_GetWork()->flags.hotsw.isInspectCard = FALSE;
|
sw->flags.hotsw.isInspectCard = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ƒfƒoƒbƒK<C692>î•ñ
|
// デバッガ情報を登録
|
||||||
if ( ! SYSMi_GetWork()->flags.hotsw.is1stCardChecked && debuggerFlg )
|
RegisterRomEmuInfo();
|
||||||
{
|
|
||||||
MI_CpuCopy8( &s_romEmuInfo, &(SYSMi_GetWork()->romEmuInfo), ROM_EMULATION_DATA_SIZE );
|
|
||||||
SYSMi_GetWork()->flags.hotsw.isOnDebugger = debuggerFlg;
|
|
||||||
}
|
|
||||||
|
|
||||||
SYSMi_GetWork()->flags.hotsw.isCardStateChanged = TRUE;
|
|
||||||
SYSMi_GetWork()->flags.hotsw.is1stCardChecked = TRUE;
|
|
||||||
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -100,6 +100,7 @@ typedef struct SYSM_work {
|
|||||||
vu16 isOnDebugger :1; // デバッガ動作か?
|
vu16 isOnDebugger :1; // デバッガ動作か?
|
||||||
vu16 isEnableHotSW :1; // 活線挿抜有効?
|
vu16 isEnableHotSW :1; // 活線挿抜有効?
|
||||||
vu16 isBusyHotSW :1; // 活線挿抜処理中?
|
vu16 isBusyHotSW :1; // 活線挿抜処理中?
|
||||||
|
vu16 isLoadRomEmuOnly :1; // ROMエミュレーション情報のみロード
|
||||||
vu16 isCardLoadCompleted :1; // カードからデータロード完了?
|
vu16 isCardLoadCompleted :1; // カードからデータロード完了?
|
||||||
vu16 isValidCardBanner :1; // バナーデータ更新?
|
vu16 isValidCardBanner :1; // バナーデータ更新?
|
||||||
vu16 is1stCardChecked :1; // カードデータの1stチェック完了?
|
vu16 is1stCardChecked :1; // カードデータの1stチェック完了?
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user