diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index eea6f76c..4f8ffc80 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -30,9 +30,9 @@ #define reg_MI_MC_SWP (*(REGType8v *) ( REG_MC1_ADDR + 1 ) ) #ifdef ISDBG_MB_CHILD_ -#define PRE_CLEAR_NUM_MAX (6*2) +#define PRE_CLEAR_NUM_MAX (7*2) #else -#define PRE_CLEAR_NUM_MAX (4*2) +#define PRE_CLEAR_NUM_MAX (5*2) #endif #define COPY_NUM_MAX (4*3) @@ -109,7 +109,7 @@ BOOL BOOT_WaitStart( void ) u32 *post_clear_list; // メモリリストの設定 // [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域(WRAMにある)を消さないように注意。 - // WRAMリマップ後の消し忘れがないように不要な鍵はpre clearで消す。 + // WRAMリマップ後の消し漏れやバッファオーバランの懸念回避のため不要な鍵はpre clearで消す。 // [TODO:] pre clearにARM9/7共用WRAMの32KBも入れる。 static u32 mem_list[PRE_CLEAR_NUM_MAX + 1 + COPY_NUM_MAX + 2 + POST_CLEAR_NUM_MAX + 1] = { @@ -121,6 +121,7 @@ BOOL BOOT_WaitStart( void ) HW_PRV_WRAM_END - 0x600, (HW_PRV_WRAM_END - HW_PRV_WRAM_SYSRV_SIZE) - (HW_PRV_WRAM_END - 0x600), HW_PRV_WRAM_END - 0x600 + 0x20, HW_PRV_WRAM_END - (HW_PRV_WRAM_END - 0x600 + 0x20), #endif + HW_WRAM_LTD, HW_WRAM_LTD_END - HW_WRAM_LTD, HW_MAIN_MEM_SHARED, HW_RED_RESERVED - HW_MAIN_MEM_SHARED, NULL, // copy forward diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index 5df9cb10..264d6161 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -73,6 +73,7 @@ void BOOT_Ready( void ) (void)OS_SetIrqFunction( OS_IE_SUBP, ie_subphandler ); OS_EnableInterrupts(); (void)OS_SetIrqMask( OS_IE_SUBP ); // サブプロセッサ割り込みのみを許可。 + MI_SetWramBank(MI_WRAM_ARM7_ALL); // WRAM0/1の最終配置はOS_Bootで行う reg_PXI_SUBPINTF = SUBP_RECV_IF_ENABLE | 0x0f00; // ARM9ステートを "0x0f" に // ※もうFIFOはクリア済みなので、使わない。 // ARM7からの通知待ち @@ -91,13 +92,14 @@ void BOOT_Ready( void ) MIHeader_WramRegs *pWRAMREGS = (MIHeader_WramRegs *)pROMH->main_wram_config_data; reg_GX_VRAMCNT_C = pWRAMREGS->main_vrambnk_c; reg_GX_VRAMCNT_D = pWRAMREGS->main_vrambnk_d; - reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01; + // WRAM0/1の最終配置はOS_Bootで行う } // SDK共通リブート { // メモリリストの設定 - // [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域(ITCMにある)を消さないように注意 + // [TODO:] ショップアプリで鍵を残す場合、NANDファーム引数の領域(ITCMにある)を消さないように注意。 + // バッファオーバランの懸念回避のため不要な鍵はpre clearで消す。 static u32 mem_list[] = { // pre clear diff --git a/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h b/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h index f38a49d9..2ad489b1 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h +++ b/build/libraries_sysmenu/hotsw/ARM7/include/blowfish.h @@ -28,6 +28,8 @@ extern "C" { #ifdef USE_LOCAL_KEYTABLE // 初期化テーブル extern const BLOWFISH_CTX GCDi_BlowfishInitTableDS; +#else +extern BLOWFISH_CTX GCDi_BlowfishInitTableBufDS; #endif // Function Prototype ------------------------------------------------------------------------ diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c b/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c index 2da68dbe..218cc6a4 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/blowfish.c @@ -27,7 +27,9 @@ static u32 F(const BLOWFISH_CTX *ctx, u32 x); void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen) { #ifdef USE_LOCAL_KEYTABLE - const BLOWFISH_CTX *blowfishInitTablep = &GCDi_BlowfishInitTableDS; + const BLOWFISH_CTX *initTable = &GCDi_BlowfishInitTableDS; +#else + const BLOWFISH_CTX *initTable = &GCDi_BlowfishInitTableBufDS; #endif u32 blowfishedKey[2]; @@ -36,12 +38,8 @@ void GCDm_MakeBlowfishTableDS(CardBootData *cbd, s32 keyLen) u32 *keyBuf = cbd->keyBuf; BLOWFISH_CTX *ctx = &cbd->keyTable; -#ifdef USE_LOCAL_KEYTABLE - MI_CpuCopyFast((void *)blowfishInitTablep, (void *)ctx, sizeof(BLOWFISH_CTX)); -#else - MI_CpuCopyFast((void *)HW_WRAM_0_LTD, (void *)ctx, sizeof(BLOWFISH_CTX)); -#endif - + MI_CpuCopyFast((void *)initTable, (void *)ctx, sizeof(BLOWFISH_CTX)); + keyBuf[0] = *RomHeaderGameCode; keyBuf[1] = *RomHeaderGameCode >> 1; keyBuf[2] = *RomHeaderGameCode << 1; diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/ds_blowfish_table.c b/build/libraries_sysmenu/hotsw/ARM7/src/ds_blowfish_table.c index 323aeb15..1771cc21 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/ds_blowfish_table.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/ds_blowfish_table.c @@ -11,9 +11,14 @@ in whole or in part, without the prior written consent of Nintendo. *---------------------------------------------------------------------------*/ #include +#include +#include -const BLOWFISH_CTX GCDi_BlowfishInitTableDS ATTRIBUTE_ALIGN(4) = { +#ifndef USE_LOCAL_KEYTABLE +BLOWFISH_CTX GCDi_BlowfishInitTableBufDS; +#else +const BLOWFISH_CTX GCDi_BlowfishInitTableDS = { 0x5f20d599, 0xb9f54457, 0xd9a4196e, 0x945a6a9e, 0xebf1aed8, 0x3ae27541, 0x32d08293, 0xd531ee33, 0x9a6157cc, 0x1ba20637, 0xf5723979, 0xbef6ae55, @@ -280,4 +285,7 @@ const BLOWFISH_CTX GCDi_BlowfishInitTableDS ATTRIBUTE_ALIGN(4) = { 0xb5fd02cd, 0xaa5bbce9, 0x7e19a4d8, 0x81945d0e, 0xad776f9e, 0x93740ed6, 0x18c4e796, 0x19f5ad5f }; +#endif // USE_LOCAL_KEYTABLE + +#include diff --git a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c index 3e7ad404..96864323 100644 --- a/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c +++ b/build/libraries_sysmenu/hotsw/ARM7/src/hotsw.c @@ -113,6 +113,8 @@ static void DebugPrintErrorMessage(HotSwState state); HotSwState HOTSWi_RefreshBadBlock(u32 romMode); // Static Values ------------------------------------------------------------ +#include + static char encrypt_object_key[] ATTRIBUTE_ALIGN(4) = "encryObj"; static char rom_emu_info[] ATTRIBUTE_ALIGN(4) = "TWLD"; @@ -170,6 +172,7 @@ static CardBootFunction s_funcTable[] = { ReadIDGame, ReadPageGame}, // Game モード関数 }; +#include // =========================================================================== // Function Describe @@ -184,6 +187,10 @@ void HOTSW_Init(u32 threadPrio) OS_InitTick(); OS_InitThread(); +#ifndef USE_LOCAL_KEYTABLE + // 初期化後に他の用途でWRAM_0を使用できるようにローカルバッファへコピーしておく + MI_CpuCopyFast((void *)HW_WRAM_0_LTD, &GCDi_BlowfishInitTableBufDS, sizeof(BLOWFISH_CTX)); +#endif // PXI初期化 PXI_Init(); PXI_SetFifoRecvCallback(PXI_FIFO_TAG_HOTSW, InterruptCallbackPxi); diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index bbed5d66..f3b44f22 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -116,6 +116,7 @@ void SYSMi_SendKeysToARM7( void ) MI_SetWramBank(MI_WRAM_ARM9_ALL); // DS互換BlowfishテーブルをARM7へ渡す MI_CpuCopyFast( &((OSFromFirm9Buf *)HW_FIRM_FROM_FIRM_BUF)->ds_blowfish, (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) ); + DC_FlushRange( (void *)HW_WRAM_0, sizeof(BLOWFISH_CTX) ); MI_SetWramBank(MI_WRAM_ARM7_ALL); }