mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
初期化時にDS互換Blowfishキーテーブルをコピー。
ブート前のWRAM0/1クリア。 現状ではARM9でのキーテーブルコピー時にはライトスルーしているはずだが念のためキャッシュをフラッシュしておく。 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@849 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
ed41e55df5
commit
c0492ee4af
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 ------------------------------------------------------------------------
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -11,9 +11,14 @@
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
*---------------------------------------------------------------------------*/
|
||||
#include <hotswTypes.h>
|
||||
#include <blowfish.h>
|
||||
|
||||
#include <twl/ltdwram_begin.h>
|
||||
|
||||
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 <twl/ltdwram_end.h>
|
||||
|
||||
|
||||
@ -113,6 +113,8 @@ static void DebugPrintErrorMessage(HotSwState state);
|
||||
HotSwState HOTSWi_RefreshBadBlock(u32 romMode);
|
||||
|
||||
// Static Values ------------------------------------------------------------
|
||||
#include <twl/ltdwram_begin.h>
|
||||
|
||||
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 ƒ‚<C692>[ƒhŠÖ<C5A0>”
|
||||
};
|
||||
|
||||
#include <twl/ltdwram_end.h>
|
||||
|
||||
// ===========================================================================
|
||||
// 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<58>‰Šú‰»
|
||||
PXI_Init();
|
||||
PXI_SetFifoRecvCallback(PXI_FIFO_TAG_HOTSW, InterruptCallbackPxi);
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user