diff --git a/build/nandfirm/menu-launcher/ARM9/main.c b/build/nandfirm/menu-launcher/ARM9/main.c index c32fe40b..0364fc01 100644 --- a/build/nandfirm/menu-launcher/ARM9/main.c +++ b/build/nandfirm/menu-launcher/ARM9/main.c @@ -35,9 +35,13 @@ static const u8 rsa_key_launcher[128] = }; #endif -#define RSA_HEAP_SIZE (4*1024) // RSA用ヒープサイズ (サイズ調整必要) +#define RSA_HEAP_SIZE (4*1024) // RSA用ヒープサイズ +#define CRYPTO_HEAP_SIZE (12*1024) // CRYPTO用ヒープサイズ + +#define HEAP_SIZE (RSA_HEAP_SIZE > CRYPTO_HEAP_SIZE ? RSA_HEAP_SIZE : CRYPTO_HEAP_SIZE) + +static u8 heap[HEAP_SIZE] ATTRIBUTE_ALIGN(32); -static u8 acHeap[RSA_HEAP_SIZE] __attribute__ ((aligned (32))); static SVCSignHeapContext acPool; #define MENU_TITLE_ID_HI 0x00030017ULL @@ -110,14 +114,12 @@ static void PreInit(void) ***************************************************************/ static void PostInit(void) { - // アリーナ設定 + // FS用アリーナ設定 { static u32 arena[ 0x400 / sizeof(u32) ]; OS_SetMainArenaLo( arena ); OS_SetMainArenaHi( &arena[ 0x400 / sizeof(u32) ] ); } - // RSA用ヒープ設定 - SVC_InitSignHeap( &acPool, acHeap, sizeof(acHeap) ); // FS/FATFS初期化 FS_InitFIRM(); } @@ -135,6 +137,18 @@ static BOOL TryResolveSrl(void) MENU_TITLE_ID }; int num; + + // CRYPTO用ヒープ設定 (ESライブラリしか使わないはず) + void* lo = OS_InitAlloc( OS_ARENA_MAIN, heap, heap + CRYPTO_HEAP_SIZE, 1); + void* hi = heap + CRYPTO_HEAP_SIZE; + OSHeapHandle hh = OS_CreateHeap( OS_ARENA_MAIN, lo, hi ); + if ( hh < 0 ) + { + OS_TPrintf("Failed to allocate heap.\n"); + return FALSE; + } + OS_SetCurrentHeap( OS_ARENA_MAIN, hh ); + if ( !LCFG_ReadHWSecureInfo() ) { OS_TPrintf("Failed to load HWSecureInfo.\n"); @@ -151,6 +165,9 @@ static BOOL TryResolveSrl(void) return FALSE; } OS_TPrintf("Launcher Title ID: 0x%016llx\n", titleIdList[num]); + + OS_DestroyHeap( OS_ARENA_MAIN, hh ); + return TRUE; } @@ -283,6 +300,11 @@ void TwlMain( void ) // 6: after PXI PUSH_PROFILE(); + /* ES (CRYPTO) ライブラリはここまで */ + /* SVN_RSA はここから*/ + // RSA用ヒープ設定 + SVC_InitSignHeap( &acPool, heap, RSA_HEAP_SIZE ); + if ( !FS_LoadHeader( &acPool, NULL, NULL, RSA_KEY_ADDR ) || !CheckHeader() ) { OS_TPrintf("Failed to call FS_LoadHeader() and/or CheckHeader().\n"); diff --git a/build/nandfirm/menu-launcher/wram_regs/wram_regs.c b/build/nandfirm/menu-launcher/wram_regs/wram_regs.c index 2454b302..7e727571 100644 --- a/build/nandfirm/menu-launcher/wram_regs/wram_regs.c +++ b/build/nandfirm/menu-launcher/wram_regs/wram_regs.c @@ -34,7 +34,8 @@ MIHeader_WramRegs wram_regs_init = REG_MI_MBK_B4_FIELD( 1, MI_WRAM_BC_OFFSET_128KB, MI_WRAM_ARM7 ), REG_MI_MBK_B5_FIELD( 1, MI_WRAM_BC_OFFSET_160KB, MI_WRAM_ARM7 ), REG_MI_MBK_B6_FIELD( 1, MI_WRAM_BC_OFFSET_192KB, MI_WRAM_ARM7 ), - REG_MI_MBK_B7_FIELD( 1, MI_WRAM_BC_OFFSET_224KB, MI_WRAM_ARM7 ), +// REG_MI_MBK_B7_FIELD( 1, MI_WRAM_BC_OFFSET_224KB, MI_WRAM_ARM7 ), + REG_MI_MBK_B7_FIELD( 1, MI_WRAM_BC_OFFSET_224KB, MI_WRAM_ARM9 ), }, { REG_MI_MBK_C0_FIELD( 1, MI_WRAM_BC_OFFSET_0KB , MI_WRAM_ARM7 ), @@ -50,10 +51,16 @@ MIHeader_WramRegs wram_regs_init = MI_WRAM_IMAGE_256KB, REG_WRAM_MAP_CONV_ADDR( 6, A, SADDR, HW_WRAM_AREA_HALF - HW_WRAM_A_SIZE ) ), +/* REG_MI_MBK7_FIELD( REG_WRAM_MAP_CONV_ADDR( 7, B, EADDR, HW_WRAM_AREA + HW_WRAM_B_SIZE ), MI_WRAM_IMAGE_256KB, REG_WRAM_MAP_CONV_ADDR( 7, B, SADDR, HW_WRAM_AREA ) ), +*/ + REG_MI_MBK7_FIELD( REG_WRAM_MAP_CONV_ADDR( 7, B, EADDR, HW_WRAM_AREA_HALF - HW_WRAM_A_SIZE ), // joint to WRAM-A + MI_WRAM_IMAGE_256KB, + REG_WRAM_MAP_CONV_ADDR( 7, B, SADDR, HW_WRAM_AREA ) + ), REG_MI_MBK8_FIELD( REG_WRAM_MAP_CONV_ADDR( 8, C, EADDR, MI_WRAM_MAP_NULL ), MI_WRAM_IMAGE_256KB, REG_WRAM_MAP_CONV_ADDR( 8, C, SADDR, MI_WRAM_MAP_NULL ) diff --git a/docs/繝。繝「繝ェ繝槭ャ繝誉NAND繝輔ぃ繝シ繝.vsd b/docs/繝。繝「繝ェ繝槭ャ繝誉NAND繝輔ぃ繝シ繝.vsd index cb0901b7..e70e9783 100644 Binary files a/docs/繝。繝「繝ェ繝槭ャ繝誉NAND繝輔ぃ繝シ繝.vsd and b/docs/繝。繝「繝ェ繝槭ャ繝誉NAND繝輔ぃ繝シ繝.vsd differ diff --git a/include/firm/aes/ARM7/aes_init.h b/include/firm/aes/ARM7/aes_init.h index f3c18dc0..aee8344b 100644 --- a/include/firm/aes/ARM7/aes_init.h +++ b/include/firm/aes/ARM7/aes_init.h @@ -129,7 +129,7 @@ static inline void AESi_ResetAesKeyC( void ) Returns: None *---------------------------------------------------------------------------*/ -#if 0 // rebootライブラリに移動. +#if 0 // rebootライブラリに移動. static inline void AESi_ResetAesKeyD( void ) { AES_Lock(); @@ -153,7 +153,7 @@ static inline void AESi_ResetAesKeyD( void ) static inline void AESi_InitKeysFIRM( void ) { AESi_InitKeysForApp( (u8*)((ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF)->game_code ); - AESi_ResetAesKeyC(); +// AESi_ResetAesKeyC(); // AESi_ResetAesKey(); } diff --git a/include/firm/hw/common/mmap_firm.h b/include/firm/hw/common/mmap_firm.h index a6f27035..37553ee0 100644 --- a/include/firm/hw/common/mmap_firm.h +++ b/include/firm/hw/common/mmap_firm.h @@ -29,7 +29,7 @@ extern "C" { //------------------------------------- *_LoadBuffer #define HW_FIRM_LOAD_BUFFER_BASE MI_GetWramMapStart_B() #define HW_FIRM_LOAD_BUFFER_UNIT_SIZE 0x8000 -#define HW_FIRM_LOAD_BUFFER_UNIT_NUMS 8 +#define HW_FIRM_LOAD_BUFFER_UNIT_NUMS 7 #define HW_FIRM_LOAD_BUFFER_SIZE (HW_FIRM_LOAD_BUFFER_UNIT_SIZE * HW_FIRM_LOAD_BUFFER_UNIT_NUMS) #define HW_FIRM_LOAD_BUFFER_END (HW_FIRM_LOAD_BUFFER_BASE + HW_FIRM_LOAD_BUFFER_SIZE) diff --git a/include/firm/specfiles/ARM9-TS-FIRM.lcf.template b/include/firm/specfiles/ARM9-TS-FIRM.lcf.template index f9b51627..10871507 100644 --- a/include/firm/specfiles/ARM9-TS-FIRM.lcf.template +++ b/include/firm/specfiles/ARM9-TS-FIRM.lcf.template @@ -38,7 +38,7 @@ MEMORY check.ITCM (RW) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check - check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check + check.WORKRAM (RWX) : ORIGIN = 0x037b8000, LENGTH = 0x48000 > workram.check binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > diff --git a/include/firm/specfiles/ARM9-TS-FIRM.lsf b/include/firm/specfiles/ARM9-TS-FIRM.lsf index c9fa3d5b..ace7c786 100644 --- a/include/firm/specfiles/ARM9-TS-FIRM.lsf +++ b/include/firm/specfiles/ARM9-TS-FIRM.lsf @@ -20,7 +20,8 @@ Static $(TARGET_NAME) { - Address 0x037c0000 +# Address 0x037c0000 + Address 0x037b8000 Object $(OBJS_STATIC) Library $(LLIBS) $(GLIBS) $(CW_LIBS) Object * (.itcm)