diff --git a/build/buildtools/commondefs.sysmenu b/build/buildtools/commondefs.sysmenu index 99cb6e01..d074838a 100644 --- a/build/buildtools/commondefs.sysmenu +++ b/build/buildtools/commondefs.sysmenu @@ -61,12 +61,14 @@ SYSMENU_LIBS ?= \ libsysmenu$(TWL_LIBSUFFIX).a \ libsettings$(TWL_LIBSUFFIX).a \ libmbloader$(TWL_LIBSUFFIX).a \ - libacsign$(TWL_LIBSUFFIX).a + libacsign$(TWL_LIBSUFFIX).a \ +# libcardboot$(TWL_LIBSUFFIX).a else # ($(CODEGEN_PROC),ARM7) SYSMENU_LIBS ?= \ - libmbloader_sp$(TWL_LIBSUFFIX).a + libmbloader_sp$(TWL_LIBSUFFIX).a \ + libcardboot_sp$(TWL_LIBSUFFIX).a endif diff --git a/build/components/hyena.TWL/hyena.lsf b/build/components/hyena.TWL/hyena.lsf index 5d10bd6c..500b3ac4 100644 --- a/build/components/hyena.TWL/hyena.lsf +++ b/build/components/hyena.TWL/hyena.lsf @@ -55,6 +55,7 @@ Autoload WRAM libmicex_sp.TWL$(CODEGEN).a \ libboot_sp.TWL$(CODEGEN).a \ libreboot_sp.TWL$(CODEGEN).a \ + libcardboot_sp.TWL$(CODEGEN).a \ Library libsdio_hcd_twl.TWL$(CODEGEN).a \ libsdio_busdriver.TWL$(CODEGEN).a \ @@ -140,7 +141,6 @@ Ltdautoload LTDMAIN libnwm_sp.TWL$(CODEGEN).a \ libwvr_sp.TWL$(CODEGEN).a \ libwl_sp.TWL$(CODEGEN).a \ - libcardboot_sp.TWL$(CODEGEN).a \ Library libfatfs_sp.TWL$(CODEGEN).a \ $(USE_CRYPTO_LIBS) diff --git a/build/components/hyena.TWL/src/main.c b/build/components/hyena.TWL/src/main.c index 9613f271..352bfa4a 100644 --- a/build/components/hyena.TWL/src/main.c +++ b/build/components/hyena.TWL/src/main.c @@ -172,10 +172,10 @@ TwlSpMain(void) BOOT_Init(); // 活栓挿抜機能初期化 -// Cardm_Init(); + Cardm_Init(); // カードがささっていたらブート開始 -// Card_Boot(); + Card_Boot(); while (TRUE) { diff --git a/build/libraries_sysmenu/boot/ARM7/src/boot.c b/build/libraries_sysmenu/boot/ARM7/src/boot.c index cfe3173e..e055c441 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/boot.c +++ b/build/libraries_sysmenu/boot/ARM7/src/boot.c @@ -111,7 +111,7 @@ static asm void ClearBankREG_Stack( void ) bl CpuClear32Byte #endif // ISDBG_MB_CHILD_ - sub r0, r2, #( HW_PRV_WRAM_END - SYSM_BOOTCODE_ARM7_ADDR ) + sub r0, r2, #( HW_PRV_WRAM_END - SYSM_OWN_ARM7_WRAM_ADDR_END ) ldr r1, = ClearMemory bl CpuClear32Byte diff --git a/build/libraries_sysmenu/card/ARM7/src/Card.c b/build/libraries_sysmenu/card/ARM7/src/Card.c index ecf7f9ed..51a0e9a8 100644 --- a/build/libraries_sysmenu/card/ARM7/src/Card.c +++ b/build/libraries_sysmenu/card/ARM7/src/Card.c @@ -20,7 +20,7 @@ #include #include #include - +#include // define ------------------------------------------------------------------- #define STACK_SIZE 1024 // スタックサイズ #define MC_THREAD_PRIO 11 // カード電源ON → ゲームモードのスレッド優先度 @@ -65,9 +65,6 @@ static BootSegmentData *s_pBootSegBuffer; // static CardBootData s_cbData; -// temp value -------------------------------------------------------- -static BootSegmentData s_bootData ATTRIBUTE_ALIGN(32); -static u32 s_SecureData[SECURE_SEGMENT_SIZE / sizeof(u32)] ATTRIBUTE_ALIGN(32); // ------------------------------------------------------------------- static CardBootFunction s_funcTable[] = { @@ -123,10 +120,10 @@ void Cardm_Init(void) OS_WakeupThreadDirect(&s_MCThread); // Boot Segment バッファの設定 - Card_SetBootSegmentBuffer((void *)&s_bootData, sizeof(BootSegmentData)); + Card_SetBootSegmentBuffer((void *)SYSM_CARD_ROM_HEADER_BUFFER, 0x1000 ); // Secure Segment バッファの設定 - Card_SetSecureSegmentBuffer((void *)s_SecureData, sizeof(s_SecureData)); + Card_SetSecureSegmentBuffer((void *)SYSM_CARD_NTR_SECURE_BUFFER, SECURE_AREA_SIZE ); // モジュールロード用スレッドの生成 /* OS_CreateThread(&s_MLThread, @@ -208,7 +205,6 @@ BOOL Card_Boot(void) OS_TPrintf("TWL Card.\n"); s_cbData.twlFlg = TRUE; } - // Key Table初期化 GCDm_MakeBlowfishTableDS(&s_cbData.keyTable, &s_pBootSegBuffer->rh.s, s_cbData.keyBuf, 8); @@ -230,10 +226,9 @@ BOOL Card_Boot(void) // Arm9の常駐モジュールを指定先に転送 LoadStaticModule_Secure(); - // ゲームモードに移行 s_funcTable[s_cbData.cardType].ChangeMode_S(&s_cbData); - + // ---------------------- Game Mode ---------------------- // ID読み込み s_funcTable[s_cbData.cardType].ReadID_G(&s_cbData); diff --git a/build/systemMenu_RED/Launcher/ARM9/Makefile b/build/systemMenu_RED/Launcher/ARM9/Makefile index e9acf28d..a0aab21f 100644 --- a/build/systemMenu_RED/Launcher/ARM9/Makefile +++ b/build/systemMenu_RED/Launcher/ARM9/Makefile @@ -19,6 +19,7 @@ SUBDIRS = \ ../../../libraries_sysmenu/sysmenu \ ../../../libraries_sysmenu/boot \ + ../../../libraries_sysmenu/card \ ../../../components/hyena.TWL #---------------------------------------------------------------------------- diff --git a/include/sysmenu/hw/common/mmap.h b/include/sysmenu/hw/common/mmap.h index 4a72d77b..95d2a783 100644 --- a/include/sysmenu/hw/common/mmap.h +++ b/include/sysmenu/hw/common/mmap.h @@ -28,16 +28,22 @@ extern "C" { // SystemMenu自身のマップ情報定義 #define SYSM_OWN_ARM9_MMEM_ADDR 0x02800000 -#define SYSM_OWN_ARM9_MMEM_ADDR_END SYSM_BOOTCODE_ARM9_ADDR +#define SYSM_OWN_ARM9_MMEM_ADDR_END 0x02e77000 #define SYSM_OWN_ARM7_MMEM_ADDR 0x02280000 #define SYSM_OWN_ARM7_MMEM_ADDR_END 0x02380000 #define SYSM_OWN_ARM7_WRAM_ADDR 0x037c0000 -#define SYSM_OWN_ARM7_WRAM_ADDR_END SYSM_BOOTCODE_ARM7_ADDR +#define SYSM_OWN_ARM7_WRAM_ADDR_END 0x0380f000 -#define SYSM_BOOTCODE_ARM9_ADDR 0x02e7fc00 // ARM9最終ブートコードアドレス -#define SYSM_BOOTCODE_ARM7_ADDR 0x0380f000 // ARM7最終ブートコードアドレス +#define SYSM_BOOTCODE_ARM9_ADDR 0x027ffc00 // ARM9最終ブートコードアドレス #define SYSROM9_NINLOGO_ADR 0xffff0020 // ARM9システムROM内の任天堂ロゴ格納アドレス +// カードアプリ格納バッファ +#define SYSM_CARD_ROM_HEADER_BUFFER ( SYSM_OWN_ARM9_MMEM_ADDR_END ) +#define SYSM_CARD_ROM_HEADER_BUFFER_END ( SYSM_OWN_ARM9_MMEM_ADDR_END + 0x1000 ) +#define SYSM_CARD_NTR_SECURE_BUFFER ( SYSM_CARD_ROM_HEADER_BUFFER_END ) +#define SYSM_CARD_NTR_SECURE_BUFFER_END ( SYSM_CARD_ROM_HEADER_BUFFER_END + SECURE_AREA_SIZE ) +#define SYSM_CARD_TWL_SECURE_BUFFER ( SYSM_CARD_NTR_SECURE_BUFFER_END ) +#define SYSM_CARD_TWL_SECURE_BUFFER_END ( SYSM_CARD_NTR_SECURE_BUFFER_END + SECURE_AREA_SIZE ) // ※アプリをWRAMに直接配置してブートしようとすると、SystemMenuのコードとぶつかっていろいろややこしい状態になるので、検討が必要 @@ -70,7 +76,7 @@ extern "C" { // ※旧NTR-IPL2のレガシーコード 整理予定 #define SYSM_ARM9_LOAD_MMEM_LAST_ADDR 0x02280000 // ロード可能なARM9 staticメインメモリ最終アドレス #define SYSM_ARM7_LOAD_MMEM_LAST_ADDR 0x023c0000 // ロード可能なARM7 staticメインメモリ最終アドレス -#define SYSM_ARM7_LOAD_WRAM_LAST_ADDR SYSM_BOOTCODE_ARM7_ADDR // ロード可能なARM7 staticメインメモリ最終アドレス +#define SYSM_ARM7_LOAD_WRAM_LAST_ADDR SYSM_OWN_ARM7_WRAM_ADDR_END // ロード可能なARM7 staticメインメモリ最終アドレス #define SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT SYSM_ARM9_LOAD_MMEM_LAST_ADDR #ifdef __cplusplus