ランチャーからアプリを起動するとき、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:
yoshida_teruhisa 2007-11-20 03:57:15 +00:00
parent efc2eda25b
commit 8cfee745bb
9 changed files with 92 additions and 16 deletions

View File

@ -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

View File

@ -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
{

View File

@ -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)

View File

@ -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のステートをにする。
BOOT_Core(); // never return
// BOOT_Core(); // never return
// SDK共通リブート
OS_Boot( (void *)*(u32 *)(HW_TWL_ROM_HEADER_BUF + 0x34), clr_list );
}
return FALSE;
}

View File

@ -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)

View File

@ -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 // レジスタ固定ビット列後期アボートモデル、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
}

View File

@ -384,8 +384,6 @@ static void SYSMi_LoadTitleThreadFunc( TitleProperty *pBootTitle )
// アプリロード
// アプリ認証
// 実験用。namを改造している。ロードするだけ。
//NAM_LaunchTitle(pBootTitle->titleID);
// ロード
char path[256];

View File

@ -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'

View File

@ -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の実装