From 339352192eb244dc7c057d3576f22e7fa44757dc Mon Sep 17 00:00:00 2001 From: nakasima Date: Mon, 3 Mar 2008 05:55:19 +0000 Subject: [PATCH] =?UTF-8?q?=E3=83=87=E3=83=90=E3=83=83=E3=82=AC=E3=81=A8?= =?UTF-8?q?=E5=AE=9F=E6=A9=9F=E3=81=A7=E6=8C=99=E5=8B=95=E3=81=8C=E9=81=95?= =?UTF-8?q?=E3=81=84=E3=81=99=E3=81=8E=E3=82=8B=E3=81=A8=E3=83=87=E3=83=90?= =?UTF-8?q?=E3=83=83=E3=82=B0=E3=81=AB=E6=94=AF=E9=9A=9C=E3=81=8C=E3=81=82?= =?UTF-8?q?=E3=82=8B=E3=81=9F=E3=82=81=E3=82=B2=E3=83=BC=E3=83=A0=E3=83=A2?= =?UTF-8?q?=E3=83=BC=E3=83=89=E3=81=AE=E9=96=A2=E6=95=B0=E3=82=92=E7=B5=B1?= =?UTF-8?q?=E4=B8=80=E3=80=82?= 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@784 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- build/libraries_sysmenu/hotsw/ARM7/Makefile | 9 +- .../hotsw/ARM7/include/blowfish.h | 10 +- .../hotsw/ARM7/include/customNDma.h | 6 +- .../hotsw/ARM7/include/dsCardCommon.h | 39 ++++ .../hotsw/ARM7/include/dsCardType1.h | 13 +- .../hotsw/ARM7/include/dsCardType2.h | 13 +- .../hotsw/ARM7/include/hotswTypes.h | 4 +- .../hotsw/ARM7/include/romEmulation.h | 6 +- .../hotsw/ARM7/src/dsCardCommon.c | 212 ++++++++++++++++++ .../hotsw/ARM7/src/dsCardType1.c | 75 +------ .../hotsw/ARM7/src/dsCardType2.c | 4 +- .../libraries_sysmenu/hotsw/ARM7/src/hotsw.c | 124 +--------- .../hotsw/ARM7/src/romEmulation.c | 4 + 13 files changed, 297 insertions(+), 222 deletions(-) create mode 100644 build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h create mode 100644 build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c diff --git a/build/libraries_sysmenu/hotsw/ARM7/Makefile b/build/libraries_sysmenu/hotsw/ARM7/Makefile index 750d2b94..4d0a2704 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/Makefile +++ b/build/libraries_sysmenu/hotsw/ARM7/Makefile @@ -29,7 +29,14 @@ TWL_PROC = ARM7 SRCDIR = ./src INCDIR = ./include -SRCS = blowfish.c hotsw.c ds_blowfish_table.c dsCardType1.c dsCardType2.c romEmulation.c customNDma.c +SRCS = blowfish.c \ + hotsw.c \ + ds_blowfish_table.c \ + dsCardCommon.c \ + dsCardType1.c \ + dsCardType2.c \ + romEmulation.c \ + customNDma.c \ TARGET_LIB = libhotsw_sp$(TWL_LIBSUFFIX).a diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h b/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h index c1ed8701..1e0b64ae 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h @@ -1,8 +1,8 @@ /*---------------------------------------------------------------------------* - Project: TwlFirm - GCD - include + Project: TwlIPL - HOTSW - include File: blowfish.h - Copyright 2007 Nintendo. All rights reserved. + Copyright 2007-2008 Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo @@ -10,8 +10,8 @@ not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ -#ifndef FIRM_GCD_BLOWFISH_H -#define FIRM_GCD_BLOWFISH_H +#ifndef HOTSW_GCD_BLOWFISH_H +#define HOTSW_GCD_BLOWFISH_H #include @@ -47,4 +47,4 @@ void GCDm_MakeBlowfishTableDS(BLOWFISH_CTX *tableBufp, ROM_Header_Short *rhs, u3 } /* extern "C" */ #endif -#endif // FIRM_GCD_BLOWFISH_H +#endif // HOTSW_GCD_BLOWFISH_H diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/customNDma.h b/build/libraries_sysmenu/hotsw/ARM7/include/customNDma.h index e2fdefaa..97f2ad61 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/customNDma.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/customNDma.h @@ -1,5 +1,5 @@ -#ifndef __CUSTOM_NDMA_H__ -#define __CUSTOM_NDMA_H__ +#ifndef __HOTSW_CUSTOM_NDMA_H__ +#define __HOTSW_CUSTOM_NDMA_H__ #include @@ -17,4 +17,4 @@ void HOTSW_NDmaCopy_Card(u32 ndmaNo, const void *src, void *dest, u32 size); } /* extern "C" */ #endif -#endif // __CUSTOM_NDMA_H__ \ No newline at end of file +#endif // __HOTSW_CUSTOM_NDMA_H__ \ No newline at end of file diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h new file mode 100644 index 00000000..39dae9e3 --- /dev/null +++ b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardCommon.h @@ -0,0 +1,39 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK + File: + *---------------------------------------------------------------------------*/ +#ifndef __HOTSW_DSCARD_COMMON_H__ +#define __HOTSW_DSCARD_COMMON_H__ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// =========================================================================== +// Function Describe +// =========================================================================== +// ■ ノーマルモードのコマンド ■ +// DSカードのノーマルモードのID読み込み +HotSwState ReadIDNormal(CardBootData *cbd); + +// カード側のKeyTableをロード +HotSwState LoadTable(void); + +// デバッガのROMエミュレーション情報読み込み +HotSwState ReadRomEmulationData(CardBootData *cbd); + +// ■ ゲームモードのコマンド ■ +// DSカードのゲームモードのID読み込み +HotSwState ReadIDGame(CardBootData *cbd); + +// DSカードのゲームモードの指定ページ読み込み +HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size); + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +#endif // __HOTSW_DSCARD_COMMON_H__ diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType1.h b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType1.h index adafdb6e..c6a87fe9 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType1.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType1.h @@ -2,8 +2,8 @@ Project: TwlSDK File: *---------------------------------------------------------------------------*/ -#ifndef __DSCARD_TYPE1_H__ -#define __DSCARD_TYPE1_H__ +#ifndef __HOTSW_DSCARD_TYPE1_H__ +#define __HOTSW_DSCARD_TYPE1_H__ #include #include @@ -41,15 +41,8 @@ HotSwState SwitchOFFPNGSecure_DSType1(CardBootData *cbd); HotSwState ChangeModeSecure_DSType1(CardBootData *cbd); -// ■ ゲームモードのコマンド ■ -// DSカードType1のゲームモードのID読み込み -HotSwState ReadIDGame_DSType1(CardBootData *cbd); - -// DSカードType1のゲームモードの指定ページ読み込み -HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size); - #ifdef __cplusplus } /* extern "C" */ #endif -#endif // __DSCARD_TYPE1_H__ +#endif // __HOTSW_DSCARD_TYPE1_H__ diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType2.h b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType2.h index 16d7b172..c9c9bd4c 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType2.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/dsCardType2.h @@ -2,8 +2,8 @@ Project: TwlSDK File: *---------------------------------------------------------------------------*/ -#ifndef __DSCARD_TYPE2_H__ -#define __DSCARD_TYPE2_H__ +#ifndef __HOTSW_DSCARD_TYPE2_H__ +#define __HOTSW_DSCARD_TYPE2_H__ #include #include @@ -40,15 +40,8 @@ HotSwState SwitchOFFPNGSecure_DSType2(CardBootData *cbd); HotSwState ChangeModeSecure_DSType2(CardBootData *cbd); -// ■ ゲームモードのコマンド ■ -// DSカードType2のゲームモードのID読み込み (Type1と同じ処理) -#define ReadIDGame_DSType2 ReadIDGame_DSType1 - -// DSカードType2のゲームモードの指定ページ読み込み -#define ReadPageGame_DSType2 ReadPageGame_DSType1 - #ifdef __cplusplus } /* extern "C" */ #endif -#endif // __DSCARD_TYPE2_H__ +#endif // __HOTSW_DSCARD_TYPE2_H__ diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h index 6e6409de..2770a0c9 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/hotswTypes.h @@ -242,8 +242,6 @@ typedef struct CardBootData{ u32 arm9Ltd; u32 arm7Ltd; - u32 secureLatency; - BOOL twlFlg; BOOL debuggerFlg; @@ -251,6 +249,8 @@ typedef struct CardBootData{ u32 keyBuf[KEY_BUF_SIZE]; CardTypeEx cardType; + u32 secureLatency; + u32 gameCommondParam; BootSegmentData *pBootSegBuf; u32 *pSecureSegBuf; diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/romEmulation.h b/build/libraries_sysmenu/hotsw/ARM7/include/romEmulation.h index ab1b30a6..8b9dd53a 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/romEmulation.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/romEmulation.h @@ -2,8 +2,8 @@ Project: TwlSDK File: romEmulation.h *---------------------------------------------------------------------------*/ -#ifndef __ROM_EMULATION_H__ -#define __ROM_EMULATION_H__ +#ifndef __HOTSW_ROM_EMULATION_H__ +#define __HOTSW_ROM_EMULATION_H__ #include #include @@ -52,4 +52,4 @@ HotSwState ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 } /* extern "C" */ #endif -#endif // __ROM_EMULATION_H__ +#endif // __HOTSW_ROM_EMULATION_H__ diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c new file mode 100644 index 00000000..589984c2 --- /dev/null +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardCommon.c @@ -0,0 +1,212 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK + File: dsCardType1.c + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include + +// define ------------------------------------------------------------------- +#define ROM_EMULATION_START_OFS 0x160 +#define ROM_EMULATION_END_OFS 0x180 + +// Function prototype ------------------------------------------------------- + + +// =========================================================================== +// Function Describe +// =========================================================================== + +// ■------------------------------------■ +// ■ ノーマルモードのコマンド ■ +// ■------------------------------------■ +/* ----------------------------------------------------------------- + * ReadIDNormal関数 + * + * ノーマルモード時のカードIDを読み込む関数 + * ----------------------------------------------------------------- */ +HotSwState ReadIDNormal(CardBootData *cbd) +{ + // カード割り込みによるDMAコピー + HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_nml, sizeof(cbd->id_nml) ); + + // MCCMD レジスタ設定 + reg_HOTSW_MCCMD0 = 0x00000090; + reg_HOTSW_MCCMD1 = 0x00000000; + + // MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に) + reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000); + + // MCCNT1 レジスタ設定 (START = 1 PC = 111(ステータスリード) latency1 = 1 に) + reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | (0x1 & LATENCY1_MASK); + + // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) + OS_SleepThread(NULL); + + return HOTSW_SUCCESS; +} + +/* ----------------------------------------------------------------- + * LoadTable関数 + * + * カード側の Key Table をロードする関数。 + * + * ※この関数は開発カード用に発行しないといけない。 + * 製品版カードの場合、このコマンドは無視される + * ----------------------------------------------------------------- */ +HotSwState LoadTable(void) +{ + u32 temp; + + // MCCMD レジスタ設定 + reg_HOTSW_MCCMD0 = 0x0000009f; + reg_HOTSW_MCCMD1 = 0x00000000; + + // MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に) + reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000); + + // MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 101(16ページ) latency1 = 0(必要ないけど) に) + reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x5 << PC_SHIFT); + + // MCCNTレジスタのRDYフラグをポーリングして、フラグが立ったらデータをMCD1レジスタに再度セット。スタートフラグが0になるまでループ。 + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + temp = reg_HOTSW_MCD1; + } + + return HOTSW_SUCCESS; +} + +/*---------------------------------------------------------------------------* + Name: ReadRomEmulationData + + Description: Romエミュレーションデータの読み込み + *---------------------------------------------------------------------------*/ +HotSwState ReadRomEmulationData(CardBootData *cbd) +{ + u32 count=0; + u32 temp; + u32 *dst = cbd->romEmuBuf; + + // 量産用CPUでは平文アクセス防止のためリードしない + if ( ! (*(u8*)(OS_CHIPTYPE_DEBUGGER_ADDR) & OS_CHIPTYPE_DEBUGGER_MASK) ) + { + return HOTSW_SUCCESS; + } + + // MCCMD レジスタ設定 + reg_HOTSW_MCCMD0 = 0x3e000000; + reg_HOTSW_MCCMD1 = 0x0; + + // MCCNT1 レジスタ設定 (START = 1 PC = 001(1ページリード)に latency1 = 0x5fe) + reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x1 << PC_SHIFT) | (0x5fe & LATENCY1_MASK); + + // MCCNTレジスタのRDYフラグをポーリングして、フラグが立ったらデータをMCD1レジスタに再度セット。スタートフラグが0になるまでループ。 + while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ + while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} + if(count >= ROM_EMULATION_START_OFS && count < ROM_EMULATION_END_OFS){ + *dst++ = reg_HOTSW_MCD1; + } + else{ + temp = reg_HOTSW_MCD1; + } + count+=4; + } + + MI_CpuCopyFast(cbd->romEmuBuf, (void*)HW_ISD_RESERVED, 32); + + return HOTSW_SUCCESS; +} + +// ■------------------------------------■ +// ■ ゲームモードのコマンド ■ +// ■------------------------------------■ +/*---------------------------------------------------------------------------* + * Name: ReadIDGame + * + * Description: ゲームモードでIDを読み込む + *---------------------------------------------------------------------------*/ +HotSwState ReadIDGame(CardBootData *cbd) +{ + if(!HOTSW_IsCardAccessible()){ + return HOTSW_PULLED_OUT_ERROR; + } + + // NewDMA転送の準備 + HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_gam, sizeof(cbd->id_gam) ); + + // MCCMD レジスタ設定 + reg_HOTSW_MCCMD0 = 0x000000B8; + reg_HOTSW_MCCMD1 = 0x00000000; + + // MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 111(ステータスリード) その他Romヘッダの情報におまかせ) + reg_HOTSW_MCCNT1 = cbd->gameCommondParam | + START_MASK | (PC_MASK & (0x7 << PC_SHIFT)); + + // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) + OS_SleepThread(NULL); + + return HOTSW_SUCCESS; +} + +/*---------------------------------------------------------------------------* + * Name: ReadPageGame + * + * Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む + * + * CT=150ns Pagecount=1page Latency=RomHeaderで指定の値 + *---------------------------------------------------------------------------*/ +HotSwState ReadPageGame(CardBootData *cbd, u32 start_addr, void* buf, u32 size) +{ + u32 loop, counter=0; + u64 i, page; + GCDCmd64 cndLE, cndBE; + + page = (u32)(start_addr / PAGE_SIZE); + loop = (u32)(size / PAGE_SIZE); + loop = (size % PAGE_SIZE) ? loop + 1 : loop; + +// OS_TPrintf("Src Addr : 0x%08x Dst Addr : 0x%08x\n", start_addr, buf); +// OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size); + + for(i=0; igameCommondParam | + START_MASK | (PC_MASK & (0x1 << PC_SHIFT)); + + // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) + OS_SleepThread(NULL); + } + + return HOTSW_SUCCESS; +} \ No newline at end of file diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c index c082a653..3087a50c 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType1.c @@ -354,28 +354,7 @@ HotSwState ChangeModeSecure_DSType1(CardBootData *cbd) * * Description: ゲームモードでIDを読み込む *---------------------------------------------------------------------------*/ -HotSwState ReadIDGame_DSType1(CardBootData *cbd) -{ - if(!HOTSW_IsCardAccessible()){ - return HOTSW_PULLED_OUT_ERROR; - } - - // NewDMA転送の準備 - HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &cbd->id_gam, sizeof(cbd->id_gam) ); - - // MCCMD レジスタ設定 - reg_HOTSW_MCCMD0 = 0x000000B8; - reg_HOTSW_MCCMD1 = 0x00000000; - - // MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 111(ステータスリード) その他Romヘッダの情報におまかせ) - reg_HOTSW_MCCNT1 = cbd->pBootSegBuf->rh.s.game_cmd_param | - START_MASK | (PC_MASK & (0x7 << PC_SHIFT)); - - // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) - OS_SleepThread(NULL); - - return HOTSW_SUCCESS; -} +// 共通 /*---------------------------------------------------------------------------* * Name: ReadPageGame_DSType1 @@ -384,55 +363,5 @@ HotSwState ReadIDGame_DSType1(CardBootData *cbd) * * CT=150ns Pagecount=1page Latency=RomHeaderで指定の値 *---------------------------------------------------------------------------*/ -HotSwState ReadPageGame_DSType1(CardBootData *cbd, u32 start_addr, void* buf, u32 size) -{ - u32 loop, counter=0; - u64 i, page; - GCDCmd64 cndLE, cndBE; +// 共通 - page = (u32)(start_addr / PAGE_SIZE); - loop = (u32)(size / PAGE_SIZE); - loop = (size % PAGE_SIZE) ? loop + 1 : loop; - -// OS_TPrintf("Src Addr : 0x%08x Dst Addr : 0x%08x\n", start_addr, buf); -// OS_TPrintf("Read Game Segment Page Count : %d size : %x\n", loop, size); - - for(i=0; ipBootSegBuf->rh.s.game_cmd_param | - START_MASK | (PC_MASK & (0x1 << PC_SHIFT)); - - // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) - OS_SleepThread(NULL); - } - - return HOTSW_SUCCESS; -} \ No newline at end of file diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c index f4c25240..3a6e71ba 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/dsCardType2.c @@ -423,7 +423,7 @@ HotSwState ChangeModeSecure_DSType2(CardBootData *cbd) Description: ゲームモードでIDを読み込む *---------------------------------------------------------------------------*/ -// Type1と同じ +// 共通 /*---------------------------------------------------------------------------* @@ -431,4 +431,4 @@ HotSwState ChangeModeSecure_DSType2(CardBootData *cbd) * * Description: ゲームモードで、指定されたページを指定バッファに指定サイズ分を読み込む *---------------------------------------------------------------------------*/ -// Type1と同じ \ No newline at end of file +// 共通 diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 089af9ef..a477de5b 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include @@ -34,9 +35,6 @@ #define DIGEST_HASH_BLOCK_SIZE_SHA1 (512/8) -#define ROM_EMULATION_START_OFS 0x160 -#define ROM_EMULATION_END_OFS 0x180 - #define HOTSW_THREAD_STACK_SIZE (1024 + PAGE_SIZE) // スタックサイズ #define HOTSW_THREAD_PRIO 11 // カード電源ON → ゲームモードのスレッド優先度 #define HOTSW_INSERT_MSG_NUM 16 // 挿し割り込み送信メッセージの数 @@ -100,9 +98,6 @@ static void SetMCSCR(void); static void GenVA_VB_VD(void); static HotSwState DecryptObjectFile(void); -static HotSwState LoadTable(void); -static HotSwState ReadRomEmulationData(void); -static HotSwState ReadIDNormal(void); static HotSwState LoadBannerData(void); static HotSwState LoadStaticModule(void); static HotSwState LoadCardData(void); @@ -164,19 +159,19 @@ static CardBootFunction s_funcTable[] = { // DS Card Type 1 { ReadBootSegNormal_DSType1, ChangeModeNormal_DSType1, // Normalモード関数 ReadIDSecure_DSType1, ReadSegSecure_DSType1, SwitchONPNGSecure_DSType1, ChangeModeSecure_DSType1, // Secureモード関数 - ReadIDGame_DSType1, ReadPageGame_DSType1}, // Game モード関数 + ReadIDGame, ReadPageGame}, // Game モード関数 // DS Card Type 2 { ReadBootSegNormal_DSType2, ChangeModeNormal_DSType2, // Normalモード関数 ReadIDSecure_DSType2, ReadSegSecure_DSType2, SwitchONPNGSecure_DSType2, ChangeModeSecure_DSType2, // Secureモード関数 - ReadIDGame_DSType2, ReadPageGame_DSType2}, // Game モード関数 + ReadIDGame, ReadPageGame}, // Game モード関数 // TWL Card Type 1 { ReadBootSegNormal_DSType2, ChangeModeNormal_DSType2, // Normalモード関数 ReadIDSecure_DSType2, ReadSegSecure_DSType2, SwitchONPNGSecure_DSType2, ChangeModeSecure_DSType2, // Secureモード関数 - ReadIDGame_DSType2, ReadPageGame_DSType2}, // Game モード関数 + ReadIDGame, ReadPageGame}, // Game モード関数 // RomEmulation { ReadBootSegNormal_ROMEMU, ChangeModeNormal_ROMEMU, // Normalモード関数 ReadIDSecure_ROMEMU, ReadSegSecure_ROMEMU, SwitchONPNGSecure_ROMEMU, ChangeModeSecure_ROMEMU, // Secureモード関数 - ReadIDGame_ROMEMU, ReadPageGame_ROMEMU} // Game モード関数 + ReadIDGame, ReadPageGame}, // Game モード関数 }; @@ -318,7 +313,7 @@ static HotSwState LoadCardData(void) // ---------------------- Normal Mode ---------------------- // カードID読み込み - state = ReadIDNormal(); + state = ReadIDNormal(&s_cbData); retval = (retval == HOTSW_SUCCESS) ? state : retval; // カードタイプを判別をして、使う関数を切替える IDの最上位ビットが1なら3DM @@ -336,7 +331,7 @@ static HotSwState LoadCardData(void) retval = (retval == HOTSW_SUCCESS) ? state : retval; // Romエミュレーション情報を取得 - state = ReadRomEmulationData(); + state = ReadRomEmulationData(&s_cbData); retval = (retval == HOTSW_SUCCESS) ? state : retval; // 取得したRomエミュレーション情報を比較 @@ -350,12 +345,13 @@ static HotSwState LoadCardData(void) if(s_cbData.debuggerFlg){ OS_PutString("Read Debugger\n"); s_cbData.cardType = ROM_EMULATION; - SYSMi_GetWork()->gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK; - OS_TPrintf("SYSMi_GetWork()->gameCommondParam : 0x%08x\n",SYSMi_GetWork()->gameCommondParam); + s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param & ~SCRAMBLE_MASK; + OS_TPrintf("SYSMi_GetWork()->gameCommondParam : 0x%08x\n", s_cbData.gameCommondParam); } else{ - SYSMi_GetWork()->gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param; + s_cbData.gameCommondParam = s_cbData.pBootSegBuf->rh.s.game_cmd_param; } + SYSMi_GetWork()->gameCommondParam = s_cbData.gameCommondParam; // ROMヘッダCRCを算出してチェック。NintendoロゴCRCも確認。 SYSMi_GetWork()->cardHeaderCrc16_bak = SVC_GetCRC16( 65535, s_cbData.pBootSegBuf, 0x015e ); @@ -755,104 +751,6 @@ static void GenVA_VB_VD(void) s_cbData.vd &= 0xffffff; } -/* ----------------------------------------------------------------- - * LoadTable関数 - * - * カード側の Key Table をロードする関数。 - * - * ※この関数は開発カード用に発行しないといけない。 - * 製品版カードの場合、このコマンドは無視される - * ----------------------------------------------------------------- */ -static HotSwState LoadTable(void) -{ - u32 temp; - - // MCCMD レジスタ設定 - reg_HOTSW_MCCMD0 = 0x0000009f; - reg_HOTSW_MCCMD1 = 0x00000000; - - // MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に) - reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000); - - // MCCNT1 レジスタ設定 (START = 1 W/R = 0 PC = 101(16ページ) latency1 = 0(必要ないけど) に) - reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x5 << PC_SHIFT); - - // MCCNTレジスタのRDYフラグをポーリングして、フラグが立ったらデータをMCD1レジスタに再度セット。スタートフラグが0になるまでループ。 - while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ - while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} - temp = reg_HOTSW_MCD1; - } - - return HOTSW_SUCCESS; -} - -/*---------------------------------------------------------------------------* - Name: ReadRomEmulationData - - Description: Romエミュレーションデータの読み込み - *---------------------------------------------------------------------------*/ -static HotSwState ReadRomEmulationData(void) -{ - u32 count=0; - u32 temp; - u32 *dst = s_cbData.romEmuBuf; - - // 量産用CPUでは平文アクセス防止のためリードしない - if ( ! (*(u8*)(OS_CHIPTYPE_DEBUGGER_ADDR) & OS_CHIPTYPE_DEBUGGER_MASK) ) - { - return HOTSW_SUCCESS; - } - - // MCCMD レジスタ設定 - reg_HOTSW_MCCMD0 = 0x3e000000; - reg_HOTSW_MCCMD1 = 0x0; - - // MCCNT1 レジスタ設定 (START = 1 PC = 001(1ページリード)に latency1 = 0x5fe) - reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x1 << PC_SHIFT) | (0x5fe & LATENCY1_MASK); - - // MCCNTレジスタのRDYフラグをポーリングして、フラグが立ったらデータをMCD1レジスタに再度セット。スタートフラグが0になるまでループ。 - while(reg_HOTSW_MCCNT1 & START_FLG_MASK){ - while(!(reg_HOTSW_MCCNT1 & READY_FLG_MASK)){} - if(count >= ROM_EMULATION_START_OFS && count < ROM_EMULATION_END_OFS){ - *dst++ = reg_HOTSW_MCD1; - } - else{ - temp = reg_HOTSW_MCD1; - } - count+=4; - } - - MI_CpuCopyFast(s_cbData.romEmuBuf, (void*)HW_ISD_RESERVED, 32); - - return HOTSW_SUCCESS; -} - -/* ----------------------------------------------------------------- - * ReadIDNormal関数 - * - * ノーマルモード時のカードIDを読み込む関数 - * ----------------------------------------------------------------- */ -static HotSwState ReadIDNormal(void) -{ - // カード割り込みによるDMAコピー - HOTSW_NDmaCopy_Card( HOTSW_DMA_NO, (u32 *)HOTSW_MCD1, &s_cbData.id_nml, sizeof(s_cbData.id_nml) ); - - // MCCMD レジスタ設定 - reg_HOTSW_MCCMD0 = 0x00000090; - reg_HOTSW_MCCMD1 = 0x00000000; - - // MCCNT0 レジスタ設定 (E = 1 I = 1 SEL = 0に) - reg_HOTSW_MCCNT0 = (u16)((reg_HOTSW_MCCNT0 & 0x0fff) | 0xc000); - - // MCCNT1 レジスタ設定 (START = 1 PC = 111(ステータスリード) latency1 = 1 に) - reg_HOTSW_MCCNT1 = START_MASK | PC_MASK & (0x7 << PC_SHIFT) | (0x1 & LATENCY1_MASK); - - // カードデータ転送終了割り込みが起こるまで寝る(割り込みハンドラの中で起こされる) - OS_SleepThread(NULL); - - return HOTSW_SUCCESS; -} - /* ----------------------------------------------------------------- * DecryptObjectFile関数 * diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c b/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c index 7ad29c69..bf0b2a0f 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/romEmulation.c @@ -287,6 +287,8 @@ HotSwState ChangeModeSecure_ROMEMU(CardBootData *cbd) // ■------------------------------------■ // ■ ゲームモードのコマンド ■ // ■------------------------------------■ +#if 0 + /*---------------------------------------------------------------------------* Name: ReadIDGame_ROMEMU @@ -377,3 +379,5 @@ HotSwState ReadPageGame_ROMEMU(CardBootData *cbd, u32 start_addr, void* buf, u32 return HOTSW_SUCCESS; } + +#endif