mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ランチャーからアプリを起動するとき、rebootライブラリのOS_Boot()を利用するように変更
暫定のため、メモリクリア領域データがほぼ未定義状態 git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@217 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
efc2eda25b
commit
8cfee745bb
@ -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
|
||||
|
||||
|
||||
@ -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
|
||||
{
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -17,6 +17,7 @@
|
||||
|
||||
#include <twl.h>
|
||||
#include <sysmenu/boot/common/boot.h>
|
||||
#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;
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -19,19 +19,27 @@
|
||||
#include <twl/os/common/format_rom.h>
|
||||
#include <sysmenu/boot/common/boot.h>
|
||||
#include <firm/format/wram_regs.h>
|
||||
#include "reboot.h"
|
||||
//#include <nitro/mb.h>
|
||||
//#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
|
||||
}
|
||||
|
||||
@ -384,8 +384,6 @@ static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
|
||||
// アプリロード
|
||||
// アプリ認証
|
||||
|
||||
// 実験用。namを改造している。ロードするだけ。
|
||||
//NAM_LaunchTitle(pBootTitle->titleID);
|
||||
|
||||
// ロード
|
||||
char path[256];
|
||||
|
||||
@ -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'
|
||||
|
||||
|
||||
@ -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の実装
|
||||
|
||||
Loading…
Reference in New Issue
Block a user