From f0149494a7e7782ddaa598753bba878d3903b85d Mon Sep 17 00:00:00 2001 From: "(no author)" <(no author)@b08762b0-b915-fc4b-9d8c-17b2551a87ff> Date: Tue, 5 Feb 2008 06:09:27 +0000 Subject: [PATCH] =?UTF-8?q?(=E6=9B=B4=E6=96=B0:Akabane=20Jumpei)=20?= =?UTF-8?q?=E3=82=AB=E3=83=BC=E3=83=89=E8=AA=AD=E3=81=BF=E9=96=A2=E6=95=B0?= =?UTF-8?q?=E3=81=AE=E3=83=AC=E3=82=A4=E3=83=86=E3=83=B3=E3=82=B7=E3=82=92?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@581 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../hotsw/ARM7/include/hotswTypes.h | 6 +- .../hotsw/ARM7/src/dsCardType1.c | 52 ++++---- .../hotsw/ARM7/src/dsCardType2.c | 119 ++++++++++-------- .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 40 +----- 4 files changed, 102 insertions(+), 115 deletions(-) diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h index d45bfb86..8acf3306 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h @@ -40,8 +40,8 @@ extern "C" { #define PAGE_SIZE 0x200 // 1ページのサイズ(バイト単位) #define PAGE_WORD_SIZE 0x80 // 1ページのサイズ(ワード単位) -#define ONE_SEGMENT_SIZE 0x1000 // 1 Segmentのサイズ(バイト単位) -#define ONE_SEGMENT_WORD_SIZE 0x400 // 1 Segmentのサイズ(ワード単位) +#define ONE_SEGMENT_SIZE 0x1000 // 1Segmentのサイズ(バイト単位) +#define ONE_SEGMENT_WORD_SIZE 0x400 // 1Segmentのサイズ(ワード単位) #define SECURE_SEGMENT_SIZE 0x4000 // Secure領域のサイズ @@ -94,7 +94,7 @@ extern "C" { #define START_SHIFT 31 #define START_MASK 0x80000000 -#define SCRAMBLE_MASK 0x1840e000 +#define SCRAMBLE_MASK 0x406000 // CS SE DSのマスク #define AddLatency2ToLatency1(param)\ ( (((param) & LATENCY2_MASK) \ diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c index 0af9c44d..7809a50c 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c @@ -54,9 +54,11 @@ void ReadBootSegNormal_DSType1(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: ChangeModeNormal_DSType1 - - Description: DSカードType1のノーマルモードのモード変更 + * Name: ChangeModeNormal_DSType1 + * + * Description: DSカードType1のノーマルモードのモード変更 + * + * CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page *---------------------------------------------------------------------------*/ void ChangeModeNormal_DSType1(CardBootData *cbd) { @@ -85,8 +87,8 @@ void ChangeModeNormal_DSType1(CardBootData *cbd) reg_HOTSW_MCCMD0 = *(u32 *)cnd.b; reg_HOTSW_MCCMD1 = *(u32 *)&cnd.b[4]; - // MCCNT1 レジスタ設定 (START = 1 に) - reg_HOTSW_MCCNT1 = START_MASK; + // MCCNT1 レジスタ設定 + reg_HOTSW_MCCNT1 = START_MASK | CT_MASK | LATENCY2_MASK & (0x18 << LATENCY2_SHIFT); // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) OS_SleepThread(NULL); @@ -154,9 +156,11 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd) /*---------------------------------------------------------------------------* - Name: ReadIDSecure_DSType1 - - Description: + * Name: ReadIDSecure_DSType1 + * + * Description: + * + * CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status *---------------------------------------------------------------------------*/ void ReadIDSecure_DSType1(CardBootData *cbd) { @@ -179,9 +183,9 @@ void ReadIDSecure_DSType1(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: ReadSegSecure_DSType1 - - Description: + * Name: ReadSegSecure_DSType1 + * + * Description: *---------------------------------------------------------------------------*/ void ReadSegSecure_DSType1(CardBootData *cbd) { @@ -235,9 +239,9 @@ void ReadSegSecure_DSType1(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: SwitchONPNGSecure_DSType1 - - Description: + * Name: SwitchONPNGSecure_DSType1 + * + * Description: *---------------------------------------------------------------------------*/ void SwitchONPNGSecure_DSType1(CardBootData *cbd) { @@ -256,9 +260,9 @@ void SwitchONPNGSecure_DSType1(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: SwitchOFFPNGSecure_DSType1 - - Description: + * Name: SwitchOFFPNGSecure_DSType1 + * + * Description: *---------------------------------------------------------------------------*/ void SwitchOFFPNGSecure_DSType1(CardBootData *cbd) { @@ -277,9 +281,11 @@ void SwitchOFFPNGSecure_DSType1(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: ChangeModeSecure_DSType1 - - Description: + * Name: ChangeModeSecure_DSType1 + * + * Description: + * + * CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page *---------------------------------------------------------------------------*/ void ChangeModeSecure_DSType1(CardBootData *cbd) { @@ -302,9 +308,9 @@ void ChangeModeSecure_DSType1(CardBootData *cbd) // ■ ゲームモードのコマンド ■ // ■------------------------------------■ /*---------------------------------------------------------------------------* - Name: ReadIDGame_DSType1 - - Description: ゲームモードでIDを読み込む + * Name: ReadIDGame_DSType1 + * + * Description: ゲームモードでIDを読み込む *---------------------------------------------------------------------------*/ void ReadIDGame_DSType1(CardBootData *cbd) { diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c index 4c282174..fc708bc2 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c @@ -35,9 +35,9 @@ static void SetMCSCR(void); /*---------------------------------------------------------------------------* * Name: ReadBootSegNormal_DSType2 * - * Description: DSカードType2のノーマルモードのBoot Segment読み込み (Page0 〜 7) - * - * CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=1page + * Description: DSカードType2のノーマルモードのBoot Segment読み込み + * + * CT=240ns Latency1=0x1fff Latency2=0x3f Pagecount=8page *---------------------------------------------------------------------------*/ void ReadBootSegNormal_DSType2(CardBootData *cbd) { @@ -82,9 +82,11 @@ void ReadBootSegNormal_DSType2(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: ChangeModeNormal_DSType2 - - Description: DSカードType1のノーマルモードのモード変更 + * Name: ChangeModeNormal_DSType2 + * + * Description: DSカードType2のノーマルモードのモード変更 + * + * CT=240ns Latency1=0x18 Latency2=0 Pagecount=0page *---------------------------------------------------------------------------*/ // Type1と同じ @@ -150,13 +152,16 @@ static void SetSecureCommand(SecureCommandType type, CardBootData *cbd) /*---------------------------------------------------------------------------* - Name: ReadIDSecure_DSType2 - - Description: SCRAMBLE_MASK -> CS SE DS をマスクできる + * Name: ReadIDSecure_DSType2 + * + * Description: デバッガを読み込んだ場合はSCRAMBLE_MASK -> CS SE DS をマスク + * + * CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=Status *---------------------------------------------------------------------------*/ void ReadIDSecure_DSType2(CardBootData *cbd) { - u32 scrambleMask; + // スクランブルの設定 + u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK); // NewDMA転送の準備 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); // MCCNT1 レジスタ設定 - reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.secure_cmd_param | - START_MASK | SE_MASK | DS_MASK; + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // 25ms待ち OS_Sleep(COMMAND_DECRYPTION_WAIT); @@ -174,13 +178,9 @@ void ReadIDSecure_DSType2(CardBootData *cbd) // MCCMD レジスタ設定 reg_HOTSW_MCCMD0 = 0x0; reg_HOTSW_MCCMD1 = 0x0; - - // スクランブルの設定 - scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK); // MCCNT1 レジスタ設定 - reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.secure_cmd_param | - START_MASK | PC_MASK & (0x7 << PC_SHIFT) | scrambleMask; + reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) OS_SleepThread(NULL); @@ -190,12 +190,11 @@ void ReadIDSecure_DSType2(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: ReadSegSecure_DSType2 - - Description: Secure領域を読み込む関数 - - ※ 本来なら、指定したセグメントを読むコマンドだけど、それを4回連続して - 呼び出して、Secure領域全部を読み込んでいる + * Name: ReadSegSecure_DSType2 + * + * Description: Secure領域を読み込む関数 + * + * CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=1page *---------------------------------------------------------------------------*/ void ReadSegSecure_DSType2(CardBootData *cbd) { @@ -204,6 +203,9 @@ void ReadSegSecure_DSType2(CardBootData *cbd) u64 vae = cbd->vae; GCDCmd64 cndLE, cndBE; + // スクランブルの設定 + u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK); + for(i=0; ipBootSegBuf->rh.s.secure_cmd_param | - START_MASK | SE_MASK | DS_MASK; + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // 25ms待ち OS_Sleep(COMMAND_DECRYPTION_WAIT); @@ -246,8 +247,7 @@ void ReadSegSecure_DSType2(CardBootData *cbd) reg_HOTSW_MCCMD1 = 0x0; // MCCNT1 レジスタ設定 - reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.secure_cmd_param | - START_MASK | PC_MASK & (0x1 << PC_SHIFT) | SE_MASK | DS_MASK; + reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x1 << PC_SHIFT) | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) OS_SleepThread(NULL); @@ -265,18 +265,22 @@ void ReadSegSecure_DSType2(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: SwitchONPNGSecure_DSType2 - - Description: + * Name: SwitchONPNGSecure_DSType2 + * + * Description: PNジェネレータをONにする + * + * CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page *---------------------------------------------------------------------------*/ void SwitchONPNGSecure_DSType2(CardBootData *cbd) { + // スクランブルの設定 + u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK); + // コマンド作成・設定 SetSecureCommand(S_PNG_ON, cbd); // MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に) - reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) | - START_MASK | SE_MASK | DS_MASK; + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // 25ms待ち OS_Sleep(COMMAND_DECRYPTION_WAIT); @@ -286,9 +290,8 @@ void SwitchONPNGSecure_DSType2(CardBootData *cbd) reg_HOTSW_MCCMD1 = 0x0; // MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に) - reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) | - START_MASK | SE_MASK | DS_MASK; - + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; + // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) OS_SleepThread(NULL); @@ -297,18 +300,22 @@ void SwitchONPNGSecure_DSType2(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: SwitchOFFPNGSecure_DSType2 - - Description: + * Name: SwitchOFFPNGSecure_DSType2 + * + * Description: PNジェネレータをOFFする + * + * CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page *---------------------------------------------------------------------------*/ void SwitchOFFPNGSecure_DSType2(CardBootData *cbd) { + // スクランブルの設定 + u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK); + // コマンド作成・設定 SetSecureCommand(S_PNG_OFF, cbd); - // MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に) - reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) | - START_MASK | SE_MASK | DS_MASK; + // MCCNT1 レジスタ設定 + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // 25ms待ち OS_Sleep(COMMAND_DECRYPTION_WAIT); @@ -317,9 +324,8 @@ void SwitchOFFPNGSecure_DSType2(CardBootData *cbd) reg_HOTSW_MCCMD0 = 0x0; reg_HOTSW_MCCMD1 = 0x0; - // MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に) - reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) | - START_MASK | SE_MASK | DS_MASK; + // MCCNT1 レジスタ設定 + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) OS_SleepThread(NULL); @@ -329,18 +335,22 @@ void SwitchOFFPNGSecure_DSType2(CardBootData *cbd) } /*---------------------------------------------------------------------------* - Name: ChangeModeSecure_DSType2 - - Description: + * Name: ChangeModeSecure_DSType2 + * + * Description: Gameモードに移行する + * + * CT=240ns Latency1=0x8f8+0x18 Latency2=0 Pagecount=0page *---------------------------------------------------------------------------*/ void ChangeModeSecure_DSType2(CardBootData *cbd) { + // スクランブルの設定 + u32 scrambleMask = cbd->debuggerFlg ? 0 : (u32)(SCRAMBLE_MASK & ~CS_MASK); + // コマンド作成・設定 SetSecureCommand(S_CHG_MODE, cbd); // MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に) - reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) | - START_MASK | SE_MASK | DS_MASK; + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // 25ms待ち OS_Sleep(COMMAND_DECRYPTION_WAIT); @@ -350,8 +360,7 @@ void ChangeModeSecure_DSType2(CardBootData *cbd) reg_HOTSW_MCCMD1 = 0x0; // MCCNT1 レジスタ設定 (START = 1 SE = 1 DS = 1 Latency1 = 0 に) - reg_HOTSW_MCCNT1 = (cbd->pBootSegBuf->rh.s.secure_cmd_param & CT_MASK) | - START_MASK | SE_MASK | DS_MASK; + reg_HOTSW_MCCNT1 = START_MASK | scrambleMask | cbd->pBootSegBuf->rh.s.secure_cmd_param; // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) OS_SleepThread(NULL); @@ -373,9 +382,11 @@ void ChangeModeSecure_DSType2(CardBootData *cbd) /*---------------------------------------------------------------------------* - Name: ReadPageGame_DSType1 - - Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む + * Name: ReadPageGame_DSType1 + * + * Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む + * + * CT=150ns Latency1=0x657 Latency2=0x1 Pagecount=1page *---------------------------------------------------------------------------*/ void ReadPageGame_DSType2(CardBootData *cbd, u32 start_addr, void* buf, u32 size) { diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 861ba958..1087f4ea 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -170,10 +170,10 @@ void HOTSW_Init(void) #ifdef SDK_ARM7 // チャッタリングカウンタの値を設定 - reg_MI_MC1 = (u32)((reg_MI_MC1 & 0xffff) | 0xc80000); + reg_MI_MC1 = (u32)((reg_MI_MC1 & 0xffff) | 0xe00000); // Counter-Aの値を設定 - reg_MI_MC2 = 0xc8; + reg_MI_MC2 = 0xe0; #else // PXI経由でARM7にチャッタリングカウンタ・カウンタAの値を設定してもらう。設定されるまで待つ。 @@ -398,13 +398,6 @@ BOOL HOTSW_LoadCardData(void) // デバッグ出力 // 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"); } else{ @@ -417,28 +410,6 @@ BOOL HOTSW_LoadCardData(void) 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; } @@ -797,8 +768,6 @@ static BOOL IsCardExist(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){ // SCFG_MC1 の Slot Status の M1,M0 を 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待ち OS_Sleep(27); - -// OS_TPrintf("MC Power ON\n"); } } @@ -833,6 +800,9 @@ static void McPowerOff(void) // SCFG_MC1 の Slot Status の M1,M0 が 00 になるまでポーリング while((reg_MI_MC1 & SLOT_STATUS_MODE_SELECT_MSK) != SLOT_STATUS_MODE_00){} + + // 100ms待ち [TODO:]待ち時間は暫定値。金子さんに数値を測定してもらう。 + OS_Sleep(100); } }