diff --git a/build/components/hyena.TWL/Makefile b/build/components/hyena.TWL/Makefile index 032ec4a5..5667d3cf 100644 --- a/build/components/hyena.TWL/Makefile +++ b/build/components/hyena.TWL/Makefile @@ -38,6 +38,7 @@ CRT0_O = crt0.LTD.TWL.o #---------------------------------------------------------------------------- include $(TWLIPL_ROOT)/build/buildtools/commondefs +include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot #MACRO_FLAGS += -DSDK_ARM7COMP_LTD diff --git a/build/components/hyena.TWL/hyena.lsf b/build/components/hyena.TWL/hyena.lsf index dcd3e8e3..6268eee0 100644 --- a/build/components/hyena.TWL/hyena.lsf +++ b/build/components/hyena.TWL/hyena.lsf @@ -55,6 +55,8 @@ Autoload WRAM librtc_sp.TWL$(CODEGEN).a \ libwvr_sp.TWL$(CODEGEN).a \ libaes_sp.TWL$(CODEGEN).a \ + libboot_sp.TWL$(CODEGEN).a \ + libreboot_sp.TWL$(CODEGEN).a \ $(USE_CRYPTO_LIBS) \ $(ISDBG_LIBS) @@ -68,13 +70,6 @@ Autoload WRAM Object $(OBJDIR)/main.o } -Autoload BOOT_CORE -{ - Address $(ADDRESS_BOOTCORE) - - Library libboot_sp.TWL$(CODEGEN).a -} - #-------- Ltdautoload LTDMAIN { diff --git a/build/libraries_sysmenu/boot/ARM7/Makefile b/build/libraries_sysmenu/boot/ARM7/Makefile index b1cb08fd..c184bce9 100644 --- a/build/libraries_sysmenu/boot/ARM7/Makefile +++ b/build/libraries_sysmenu/boot/ARM7/Makefile @@ -36,6 +36,7 @@ TARGET_LIB = libboot_sp$(TWL_LIBSUFFIX).a include $(TWLIPL_ROOT)/build/buildtools/commondefs +include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot INSTALL_TARGETS = $(TARGETS) INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) diff --git a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c index b3c6387c..5c2f4cb3 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM7/src/bootAPI.c @@ -17,6 +17,7 @@ #include #include +#include "reboot.h" //#include "loader.h" //#include "mb_child.h" @@ -44,6 +45,12 @@ void BOOT_Init( void ) BOOL BOOT_WaitStart( void ) { if( (reg_PXI_MAINPINTF & 0x000f ) == 0x000f ) { + // メモリクリアリストの設定 + static u32 clr_list[] = + { + NULL + }; + (void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。 (void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。 /* @@ -54,10 +61,13 @@ BOOL BOOT_WaitStart( void ) InsertWLPatch(); } */ - BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。 + // BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。 reg_MI_MBK9 = 0; // 全WRAMのロック解除 reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求+ARM7のステートを1にする。 - BOOT_Core(); // never return + // BOOT_Core(); // never return + + // SDK共通リブート + OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list ); } return FALSE; } diff --git a/build/libraries_sysmenu/boot/ARM9/Makefile b/build/libraries_sysmenu/boot/ARM9/Makefile index f65fa531..f55bab56 100644 --- a/build/libraries_sysmenu/boot/ARM9/Makefile +++ b/build/libraries_sysmenu/boot/ARM9/Makefile @@ -36,6 +36,7 @@ TARGET_LIB = libboot$(TWL_LIBSUFFIX).a include $(TWLIPL_ROOT)/build/buildtools/commondefs +include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot INSTALL_TARGETS = $(TARGETS) INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) diff --git a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c index 038f8d48..869b5a1d 100644 --- a/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c +++ b/build/libraries_sysmenu/boot/ARM9/src/bootAPI.c @@ -19,19 +19,27 @@ #include #include #include +#include "reboot.h" //#include //#include "IPL2_work.h" //#include "define.h" + // define data------------------------------------------------------- #define SUBP_RECV_IF_ENABLE 0x4000 +#define C1_DTCM_ENABLE 0x00010000 // データTCM イネーブル +#define C1_EXCEPT_VEC_UPPER 0x00002000 // 例外ベクタ 上位アドレス(こちらに設定して下さい) +#define C1_SB1_BITSET 0x00000078 // レジスタ1用1固定ビット列(後期アボートモデル、DATA32構成シグナル制御、PROG32構成シグナル制御、ライトバッファイネーブル) + // extern data------------------------------------------------------- // function's prototype---------------------------------------------- static void BOOTi_ClearREG_RAM( void ); static void BOOTi_StartBOOT( void ); +static void ResetCP15( void ); + // global variables-------------------------------------------------- // static variables-------------------------------------------------- @@ -51,6 +59,17 @@ static void ie_subphandler( void ) // ブート準備をして、ARM7からの通知を待つ。 void BOOT_Ready( void ) { + // メモリクリアリストの設定 + static u32 clr_list[] = + { + HW_ITCM, HW_ITCM_SIZE, + HW_OAM, HW_OAM_SIZE, + HW_PLTT, HW_PLTT_SIZE, + HW_DB_OAM, HW_DB_OAM_SIZE, + HW_DB_PLTT, HW_DB_PLTT_SIZE, + NULL + }; + int i; // エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。 @@ -61,7 +80,7 @@ void BOOT_Ready( void ) } // FinalizeCardPulledOut(); // カード抜け検出終了処理 - BOOTi_ClearREG_RAM(); // レジスタ&RAMクリア + // BOOTi_ClearREG_RAM(); // レジスタ&RAMクリア (void)GX_VBlankIntr( FALSE ); (void)OS_SetIrqFunction( OS_IE_SUBP, ie_subphandler ); OS_EnableInterrupts(); @@ -87,7 +106,13 @@ void BOOT_Ready( void ) reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01; } - BOOT_Core(); // never return + //BOOT_Core(); // never return + + // プロテクションユニットの初期化 + ResetCP15(); + + // SDK共通リブート + OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x24), clr_list ); } @@ -121,3 +146,30 @@ static void BOOTi_ClearREG_RAM( void ) // クリアしていないレジスタは、VCOUNT, PIFCNT, MC-, EXMEMCNT, IME, RBKCNT1, PAUSE, POWLCDCNT, 全3D系。 } +//----------------------------------------------------------------------- +// システム制御コプロセッサ リセット +//----------------------------------------------------------------------- +asm static void ResetCP15( void ) +{ + // プロテクションユニット&キャッシュ&ITCM無効。DTCMは有効(スタックをクリアするため) + ldr r0, = C1_DTCM_ENABLE | C1_EXCEPT_VEC_UPPER | C1_SB1_BITSET + mcr p15, 0, r0, c1, c0, 0 + + // ITCMの割り当てを解除 + mov r0, #0 + mcr p15, 0, r0, c6, c5, 0 + + // DTCMの割り当てを解除 +// mov r0,#0 +// mcr p15, 0, r0, c9, c1, 0 + + // キャッシュ無効化 + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 // 命令キャッシュ + mcr p15, 0, r0, c7, c6, 0 // データキャッシュ + + // ライトバッファ エンプティ待ち + mcr p15, 0, r0, c7, c10, 4 + + bx lr +} diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 5cbd48a5..af3b0975 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -384,8 +384,6 @@ static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle ) // アプリロード // アプリ認証 - // 実験用。namを改造している。ロードするだけ。 - //NAM_LaunchTitle(pBootTitle->titleID); // ロード char path[256]; diff --git a/build/systemMenu_RED/Launcher/ARM9/Makefile b/build/systemMenu_RED/Launcher/ARM9/Makefile index 0eeb5ee8..77837209 100644 --- a/build/systemMenu_RED/Launcher/ARM9/Makefile +++ b/build/systemMenu_RED/Launcher/ARM9/Makefile @@ -60,6 +60,7 @@ DEFAULT_MAKEROM_ARM7_BASE = $(TWLIPL_ROOT)/components/$(DEFAULT_COMP_ARM7)/$(TWL MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)' include $(TWLIPL_ROOT)/build/buildtools/commondefs +include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot MAKELCF_FLAGS += -DADDRESS_BOOTCORE='0x02e7fc00' diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index 4e8d687f..6f02f61f 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -311,9 +311,26 @@ void LauncherLoading( TitleProperty *pTitleList ) BannerDraw( s_csr, selected, pTitleList ); #endif - // これだと93フレームでフェードアウト終わる - G2_ChangeBlendAlpha( fadecount/3, 31-(fadecount/3) ); - if(fadecount < 93) fadecount++; + // 描画少し上書き追加 + { + MtxFx22 mtx; + static double wa; + double s = cos(wa); + if( s!=0 ) mtx._00 = (double)FX32_HALF/s; + else mtx._00 = 0x8fff; + mtx._01 = 0; + mtx._10 = 0; + mtx._11 = FX32_HALF; + G2_SetOBJAffine((GXOamAffine *)(&banner_oam_attr[0]), &mtx); + wa += 0.1; + } + + DC_FlushRange(&banner_oam_attr, sizeof(banner_oam_attr)); + GX_LoadOAM(&banner_oam_attr, 0, sizeof(banner_oam_attr)); + + // これだと124フレームでフェードアウト終わる + G2_ChangeBlendAlpha( fadecount/4, 31-(fadecount/4) ); + if(fadecount < 124) fadecount++; } // LauncherMainのSelectSomethingByTPで使うSelectSomethingFuncの実装