mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
(更新:Akabane Jumpei) カード読み関数のレイテンシを修正
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@581 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
9dcbaf83b6
commit
f0149494a7
@ -40,8 +40,8 @@ extern "C" {
|
|||||||
#define PAGE_SIZE 0x200 // 1ページのサイズ(バイト単位)
|
#define PAGE_SIZE 0x200 // 1ページのサイズ(バイト単位)
|
||||||
#define PAGE_WORD_SIZE 0x80 // 1ページのサイズ(ワード単位)
|
#define PAGE_WORD_SIZE 0x80 // 1ページのサイズ(ワード単位)
|
||||||
|
|
||||||
#define ONE_SEGMENT_SIZE 0x1000 // 1 Segmentのサイズ(バイト単位)
|
#define ONE_SEGMENT_SIZE 0x1000 // 1Segmentのサイズ(バイト単位)
|
||||||
#define ONE_SEGMENT_WORD_SIZE 0x400 // 1 Segmentのサイズ(ワード単位)
|
#define ONE_SEGMENT_WORD_SIZE 0x400 // 1Segmentのサイズ(ワード単位)
|
||||||
|
|
||||||
#define SECURE_SEGMENT_SIZE 0x4000 // Secure領域のサイズ
|
#define SECURE_SEGMENT_SIZE 0x4000 // Secure領域のサイズ
|
||||||
|
|
||||||
@ -94,7 +94,7 @@ extern "C" {
|
|||||||
#define START_SHIFT 31
|
#define START_SHIFT 31
|
||||||
#define START_MASK 0x80000000
|
#define START_MASK 0x80000000
|
||||||
|
|
||||||
#define SCRAMBLE_MASK 0x1840e000
|
#define SCRAMBLE_MASK 0x406000 // CS SE DSのマスク
|
||||||
|
|
||||||
#define AddLatency2ToLatency1(param)\
|
#define AddLatency2ToLatency1(param)\
|
||||||
( (((param) & LATENCY2_MASK) \
|
( (((param) & LATENCY2_MASK) \
|
||||||
|
|||||||
@ -54,9 +54,11 @@ void ReadBootSegNormal_DSType1(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ChangeModeNormal_DSType1
|
* Name: ChangeModeNormal_DSType1
|
||||||
|
*
|
||||||
Description: DSカードType1のノーマルモードのモード変更
|
* Description: DSカードType1のノーマルモードのモード変更
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ChangeModeNormal_DSType1(CardBootData *cbd)
|
void ChangeModeNormal_DSType1(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -85,8 +87,8 @@ void ChangeModeNormal_DSType1(CardBootData *cbd)
|
|||||||
reg_HOTSW_MCCMD0 = *(u32 *)cnd.b;
|
reg_HOTSW_MCCMD0 = *(u32 *)cnd.b;
|
||||||
reg_HOTSW_MCCMD1 = *(u32 *)&cnd.b[4];
|
reg_HOTSW_MCCMD1 = *(u32 *)&cnd.b[4];
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定 (START = 1 に)
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = START_MASK;
|
reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | LATENCY2_MASK & (0x18 << LATENCY2_SHIFT);
|
||||||
|
|
||||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||||
OS_SleepThread(NULL);
|
OS_SleepThread(NULL);
|
||||||
@ -154,9 +156,11 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadIDSecure_DSType1
|
* Name: ReadIDSecure_DSType1
|
||||||
|
*
|
||||||
Description:
|
* Description:
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ReadIDSecure_DSType1(CardBootData *cbd)
|
void ReadIDSecure_DSType1(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -179,9 +183,9 @@ void ReadIDSecure_DSType1(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadSegSecure_DSType1
|
* Name: ReadSegSecure_DSType1
|
||||||
|
*
|
||||||
Description:
|
* Description:
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ReadSegSecure_DSType1(CardBootData *cbd)
|
void ReadSegSecure_DSType1(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -235,9 +239,9 @@ void ReadSegSecure_DSType1(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: SwitchONPNGSecure_DSType1
|
* Name: SwitchONPNGSecure_DSType1
|
||||||
|
*
|
||||||
Description:
|
* Description:
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
void SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -256,9 +260,9 @@ void SwitchONPNGSecure_DSType1(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: SwitchOFFPNGSecure_DSType1
|
* Name: SwitchOFFPNGSecure_DSType1
|
||||||
|
*
|
||||||
Description:
|
* Description:
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
void SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -277,9 +281,11 @@ void SwitchOFFPNGSecure_DSType1(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ChangeModeSecure_DSType1
|
* Name: ChangeModeSecure_DSType1
|
||||||
|
*
|
||||||
Description:
|
* Description:
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ChangeModeSecure_DSType1(CardBootData *cbd)
|
void ChangeModeSecure_DSType1(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -302,9 +308,9 @@ void ChangeModeSecure_DSType1(CardBootData *cbd)
|
|||||||
// ■ ゲームモードのコマンド ■
|
// ■ ゲームモードのコマンド ■
|
||||||
// ■------------------------------------■
|
// ■------------------------------------■
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadIDGame_DSType1
|
* Name: ReadIDGame_DSType1
|
||||||
|
*
|
||||||
Description: ゲームモードでIDを読み込む
|
* Description: ゲームモードでIDを読み込む
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ReadIDGame_DSType1(CardBootData *cbd)
|
void ReadIDGame_DSType1(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -35,9 +35,9 @@ static void SetMCSCR(void);
|
|||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
* Name: ReadBootSegNormal_DSType2
|
* Name: ReadBootSegNormal_DSType2
|
||||||
*
|
*
|
||||||
* Description: DSカードType2のノーマルモードのBoot Segment読み込み (Page0 ~ 7)
|
* Description: DSカードType2のノーマルモードのBoot Segment読み込み
|
||||||
*
|
*
|
||||||
* CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=1page
|
* CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=8page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ReadBootSegNormal_DSType2(CardBootData *cbd)
|
void ReadBootSegNormal_DSType2(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -82,9 +82,11 @@ void ReadBootSegNormal_DSType2(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ChangeModeNormal_DSType2
|
* Name: ChangeModeNormal_DSType2
|
||||||
|
*
|
||||||
Description: DSカードType1のノーマルモードのモード変更
|
* Description: DSカードType2のノーマルモードのモード変更
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
// Type1と同じ
|
// Type1と同じ
|
||||||
|
|
||||||
@ -150,13 +152,16 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadIDSecure_DSType2
|
* Name: ReadIDSecure_DSType2
|
||||||
|
*
|
||||||
Description: SCRAMBLE_MASK -> CS SE DS をマスクできる
|
* Description: デバッガを読み込んだ場合はSCRAMBLE_MASK -> CS SE DS をマスク
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ReadIDSecure_DSType2(CardBootData *cbd)
|
void ReadIDSecure_DSType2(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
u32 scrambleMask;
|
// スクランブルの設定
|
||||||
|
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK);
|
||||||
|
|
||||||
// NewDMA転送の準備
|
// NewDMA転送の準備
|
||||||
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) );
|
HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_scr, sizeof(cbd->id_scr) );
|
||||||
@ -165,8 +170,7 @@ void ReadIDSecure_DSType2(CardBootData *cbd)
|
|||||||
SetSecureCommand(S_RD_ID, cbd);
|
SetSecureCommand(S_RD_ID, cbd);
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.secure_cmd_param |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// 25ms待ち
|
// 25ms待ち
|
||||||
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
||||||
@ -174,13 +178,9 @@ void ReadIDSecure_DSType2(CardBootData *cbd)
|
|||||||
// MCCMD レジスタ設定
|
// MCCMD レジスタ設定
|
||||||
reg_HOTSW_MCCMD0 = 0x0;
|
reg_HOTSW_MCCMD0 = 0x0;
|
||||||
reg_HOTSW_MCCMD1 = 0x0;
|
reg_HOTSW_MCCMD1 = 0x0;
|
||||||
|
|
||||||
// スクランブルの設定
|
|
||||||
scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK);
|
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.secure_cmd_param |
|
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | PC_MASK & (0x7 << PC_SHIFT) | scrambleMask;
|
|
||||||
|
|
||||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||||
OS_SleepThread(NULL);
|
OS_SleepThread(NULL);
|
||||||
@ -190,12 +190,11 @@ void ReadIDSecure_DSType2(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadSegSecure_DSType2
|
* Name: ReadSegSecure_DSType2
|
||||||
|
*
|
||||||
Description: Secure領域を読み込む関数
|
* Description: Secure領域を読み込む関数
|
||||||
|
*
|
||||||
※ 本来なら、指定したセグメントを読むコマンドだけど、それを4回連続して
|
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=1page
|
||||||
呼び出して、Secure領域全部を読み込んでいる
|
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ReadSegSecure_DSType2(CardBootData *cbd)
|
void ReadSegSecure_DSType2(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
@ -204,6 +203,9 @@ void ReadSegSecure_DSType2(CardBootData *cbd)
|
|||||||
u64 vae = cbd->vae;
|
u64 vae = cbd->vae;
|
||||||
GCDCmd64 cndLE, cndBE;
|
GCDCmd64 cndLE, cndBE;
|
||||||
|
|
||||||
|
// スクランブルの設定
|
||||||
|
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK);
|
||||||
|
|
||||||
for(i=0; i<SECURE_SEGMENT_NUM; i++){
|
for(i=0; i<SECURE_SEGMENT_NUM; i++){
|
||||||
// ゼロクリア
|
// ゼロクリア
|
||||||
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
|
MI_CpuClear8(&cndLE, sizeof(GCDCmd64));
|
||||||
@ -231,8 +233,7 @@ void ReadSegSecure_DSType2(CardBootData *cbd)
|
|||||||
reg_HOTSW_MCCMD1 = *(u32*)&cndBE.b[4];
|
reg_HOTSW_MCCMD1 = *(u32*)&cndBE.b[4];
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.secure_cmd_param |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// 25ms待ち
|
// 25ms待ち
|
||||||
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
||||||
@ -246,8 +247,7 @@ void ReadSegSecure_DSType2(CardBootData *cbd)
|
|||||||
reg_HOTSW_MCCMD1 = 0x0;
|
reg_HOTSW_MCCMD1 = 0x0;
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.secure_cmd_param |
|
reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x1 << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | PC_MASK & (0x1 << PC_SHIFT) | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||||
OS_SleepThread(NULL);
|
OS_SleepThread(NULL);
|
||||||
@ -265,18 +265,22 @@ void ReadSegSecure_DSType2(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: SwitchONPNGSecure_DSType2
|
* Name: SwitchONPNGSecure_DSType2
|
||||||
|
*
|
||||||
Description:
|
* Description: PNジェネレータをONにする
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
void SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
|
// スクランブルの設定
|
||||||
|
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK);
|
||||||
|
|
||||||
// コマンド作成・設定
|
// コマンド作成・設定
|
||||||
SetSecureCommand(S_PNG_ON, cbd);
|
SetSecureCommand(S_PNG_ON, cbd);
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
||||||
reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// 25ms待ち
|
// 25ms待ち
|
||||||
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
||||||
@ -286,9 +290,8 @@ void SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
|||||||
reg_HOTSW_MCCMD1 = 0x0;
|
reg_HOTSW_MCCMD1 = 0x0;
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
||||||
reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||||
OS_SleepThread(NULL);
|
OS_SleepThread(NULL);
|
||||||
|
|
||||||
@ -297,18 +300,22 @@ void SwitchONPNGSecure_DSType2(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: SwitchOFFPNGSecure_DSType2
|
* Name: SwitchOFFPNGSecure_DSType2
|
||||||
|
*
|
||||||
Description:
|
* Description: PNジェネレータをOFFする
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
void SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
|
// スクランブルの設定
|
||||||
|
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK);
|
||||||
|
|
||||||
// コマンド作成・設定
|
// コマンド作成・設定
|
||||||
SetSecureCommand(S_PNG_OFF, cbd);
|
SetSecureCommand(S_PNG_OFF, cbd);
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// 25ms待ち
|
// 25ms待ち
|
||||||
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
||||||
@ -317,9 +324,8 @@ void SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
|||||||
reg_HOTSW_MCCMD0 = 0x0;
|
reg_HOTSW_MCCMD0 = 0x0;
|
||||||
reg_HOTSW_MCCMD1 = 0x0;
|
reg_HOTSW_MCCMD1 = 0x0;
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
// MCCNT1 レジスタ設定
|
||||||
reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||||
OS_SleepThread(NULL);
|
OS_SleepThread(NULL);
|
||||||
@ -329,18 +335,22 @@ void SwitchOFFPNGSecure_DSType2(CardBootData *cbd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ChangeModeSecure_DSType2
|
* Name: ChangeModeSecure_DSType2
|
||||||
|
*
|
||||||
Description:
|
* Description: Gameモードに移行する
|
||||||
|
*
|
||||||
|
* CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ChangeModeSecure_DSType2(CardBootData *cbd)
|
void ChangeModeSecure_DSType2(CardBootData *cbd)
|
||||||
{
|
{
|
||||||
|
// スクランブルの設定
|
||||||
|
u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK);
|
||||||
|
|
||||||
// コマンド作成・設定
|
// コマンド作成・設定
|
||||||
SetSecureCommand(S_CHG_MODE, cbd);
|
SetSecureCommand(S_CHG_MODE, cbd);
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
||||||
reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// 25ms待ち
|
// 25ms待ち
|
||||||
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
OS_Sleep(COMMAND_DECRYPTION_WAIT);
|
||||||
@ -350,8 +360,7 @@ void ChangeModeSecure_DSType2(CardBootData *cbd)
|
|||||||
reg_HOTSW_MCCMD1 = 0x0;
|
reg_HOTSW_MCCMD1 = 0x0;
|
||||||
|
|
||||||
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
// MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に)
|
||||||
reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) |
|
reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param;
|
||||||
START_MASK | SE_MASK | DS_MASK;
|
|
||||||
|
|
||||||
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
// カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる)
|
||||||
OS_SleepThread(NULL);
|
OS_SleepThread(NULL);
|
||||||
@ -373,9 +382,11 @@ void ChangeModeSecure_DSType2(CardBootData *cbd)
|
|||||||
|
|
||||||
|
|
||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Name: ReadPageGame_DSType1
|
* Name: ReadPageGame_DSType1
|
||||||
|
*
|
||||||
Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
* Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む
|
||||||
|
*
|
||||||
|
* CT=150ns Latency1=0x657 Latency2=0x1 Pagecount=1page
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
void ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
void ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -170,10 +170,10 @@ void HOTSW_Init(void)
|
|||||||
|
|
||||||
#ifdef SDK_ARM7
|
#ifdef SDK_ARM7
|
||||||
// チャッタリングカウンタの値を設定
|
// チャッタリングカウンタの値を設定
|
||||||
reg_MI_MC1 = (u32)((reg_MI_MC1 & 0xffff) | 0xc80000);
|
reg_MI_MC1 = (u32)((reg_MI_MC1 & 0xffff) | 0xe00000);
|
||||||
|
|
||||||
// Counter-Aの値を設定
|
// Counter-Aの値を設定
|
||||||
reg_MI_MC2 = 0xc8;
|
reg_MI_MC2 = 0xe0;
|
||||||
#else
|
#else
|
||||||
// PXI経由でARM7にチャッタリングカウンタ・カウンタAの値を設定してもらう。設定されるまで待つ。
|
// PXI経由でARM7にチャッタリングカウンタ・カウンタAの値を設定してもらう。設定されるまで待つ。
|
||||||
|
|
||||||
@ -398,13 +398,6 @@ BOOL HOTSW_LoadCardData(void)
|
|||||||
// デバッグ出力
|
// デバッグ出力
|
||||||
// ShowRomHeaderData();
|
// ShowRomHeaderData();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ※最終的にはカードIDをHW_BOOT_CHECK_INFO_BUFに入れないと、アプリ起動後のカード抜け処理が上手く動作しないので注意。
|
|
||||||
// 今はスロットBを使用しているので、ノーケアでOK.
|
|
||||||
// *(u32 *)HW_BOOT_CHECK_INFO_BUF = s_cbData.id_gam;
|
|
||||||
// *(u32 *)HW_RED_RESERVED = s_cbData.id_gam;
|
|
||||||
// SYSMi_GetWork()->nCardID = s_cbData.id_gam;
|
|
||||||
|
|
||||||
OS_TPrintf("-----------------------------------------------\n\n");
|
OS_TPrintf("-----------------------------------------------\n\n");
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
@ -417,28 +410,6 @@ BOOL HOTSW_LoadCardData(void)
|
|||||||
|
|
||||||
OS_TPrintf( "Load Card Time : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
|
OS_TPrintf( "Load Card Time : %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
|
||||||
|
|
||||||
// [TODO:]暫定処置。ちゃんとした流れでLauncher側に渡すようにする。
|
|
||||||
// MI_CpuCopy8( HOTSW_GetRomEmulationBuffer(), &SYSMi_GetWork()->romEmuInfo, ROM_EMULATION_DATA_SIZE );
|
|
||||||
// SYSMi_GetWork()->flags.common.isOnDebugger = s_cbData.debuggerFlg;
|
|
||||||
|
|
||||||
//#ifdef DEBUG_USED_CARD_SLOT_B_
|
|
||||||
// SYSMi_GetWork()->flags.common.is1stCardChecked = TRUE;
|
|
||||||
//#endif
|
|
||||||
/*
|
|
||||||
{
|
|
||||||
u16 id = (u16)OS_GetLockID();
|
|
||||||
(void)OS_LockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
|
||||||
SYSMi_GetWork()->flags.common.isBusyHotSW = 0;
|
|
||||||
if( SYSMi_GetWork()->flags.arm9.reqChangeHotSW ) {
|
|
||||||
SYSMi_GetWork()->flags.common.isEnableHotSW = SYSMi_GetWork()->flags.arm9.nextHotSWStatus;
|
|
||||||
SYSMi_GetWork()->flags.arm9.reqChangeHotSW = 0;
|
|
||||||
SYSMi_GetWork()->flags.arm9.nextHotSWStatus = 0;
|
|
||||||
// HOTSW_Finalize();
|
|
||||||
}
|
|
||||||
(void)OS_UnlockByWord( id, &SYSMi_GetWork()->lockHotSW, NULL );
|
|
||||||
OS_ReleaseLockID( id );
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -797,8 +768,6 @@ static BOOL IsCardExist(void)
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
static void McPowerOn(void)
|
static void McPowerOn(void)
|
||||||
{
|
{
|
||||||
// OS_TPrintf("Slot State : %08x\n", reg_MI_MC1);
|
|
||||||
|
|
||||||
if((reg_MI_MC1 & SLOT_STATUS_MODE_SELECT_MSK) == SLOT_STATUS_MODE_00){
|
if((reg_MI_MC1 & SLOT_STATUS_MODE_SELECT_MSK) == SLOT_STATUS_MODE_00){
|
||||||
// SCFG_MC1 の Slot Status の M1,M0 を 01 にする
|
// SCFG_MC1 の Slot Status の M1,M0 を 01 にする
|
||||||
reg_MI_MC1 = (u32)((reg_MI_MC1 & (~SLOT_STATUS_MODE_SELECT_MSK)) | SLOT_STATUS_MODE_01);
|
reg_MI_MC1 = (u32)((reg_MI_MC1 & (~SLOT_STATUS_MODE_SELECT_MSK)) | SLOT_STATUS_MODE_01);
|
||||||
@ -815,8 +784,6 @@ static void McPowerOn(void)
|
|||||||
|
|
||||||
// 27ms待ち
|
// 27ms待ち
|
||||||
OS_Sleep(27);
|
OS_Sleep(27);
|
||||||
|
|
||||||
// OS_TPrintf("MC Power ON\n");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -833,6 +800,9 @@ static void McPowerOff(void)
|
|||||||
|
|
||||||
// SCFG_MC1 の Slot Status の M1,M0 が 00 になるまでポーリング
|
// SCFG_MC1 の Slot Status の M1,M0 が 00 になるまでポーリング
|
||||||
while((reg_MI_MC1 & SLOT_STATUS_MODE_SELECT_MSK) != SLOT_STATUS_MODE_00){}
|
while((reg_MI_MC1 & SLOT_STATUS_MODE_SELECT_MSK) != SLOT_STATUS_MODE_00){}
|
||||||
|
|
||||||
|
// 100ms待ち [TODO:]待ち時間は暫定値。金子さんに数値を測定してもらう。
|
||||||
|
OS_Sleep(100);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user