(更新:Akabane Jumpei) カード読み関数のレイテンシを修正

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@581 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
(no author) 2008-02-05 06:09:27 +00:00
parent 9dcbaf83b6
commit f0149494a7
4 changed files with 102 additions and 115 deletions

View File

@ -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) \

View File

@ -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)
{ {

View File

@ -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)
{ {

View File

@ -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);
} }
} }