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 $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||||
|
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||||
|
|
||||||
#MACRO_FLAGS += -DSDK_ARM7COMP_LTD
|
#MACRO_FLAGS += -DSDK_ARM7COMP_LTD
|
||||||
|
|
||||||
|
|||||||
@ -55,6 +55,8 @@ Autoload WRAM
|
|||||||
librtc_sp.TWL$(CODEGEN).a \
|
librtc_sp.TWL$(CODEGEN).a \
|
||||||
libwvr_sp.TWL$(CODEGEN).a \
|
libwvr_sp.TWL$(CODEGEN).a \
|
||||||
libaes_sp.TWL$(CODEGEN).a \
|
libaes_sp.TWL$(CODEGEN).a \
|
||||||
|
libboot_sp.TWL$(CODEGEN).a \
|
||||||
|
libreboot_sp.TWL$(CODEGEN).a \
|
||||||
$(USE_CRYPTO_LIBS) \
|
$(USE_CRYPTO_LIBS) \
|
||||||
$(ISDBG_LIBS)
|
$(ISDBG_LIBS)
|
||||||
|
|
||||||
@ -68,13 +70,6 @@ Autoload WRAM
|
|||||||
Object $(OBJDIR)/main.o
|
Object $(OBJDIR)/main.o
|
||||||
}
|
}
|
||||||
|
|
||||||
Autoload BOOT_CORE
|
|
||||||
{
|
|
||||||
Address $(ADDRESS_BOOTCORE)
|
|
||||||
|
|
||||||
Library libboot_sp.TWL$(CODEGEN).a
|
|
||||||
}
|
|
||||||
|
|
||||||
#--------
|
#--------
|
||||||
Ltdautoload LTDMAIN
|
Ltdautoload LTDMAIN
|
||||||
{
|
{
|
||||||
|
|||||||
@ -36,6 +36,7 @@ TARGET_LIB = libboot_sp$(TWL_LIBSUFFIX).a
|
|||||||
|
|
||||||
|
|
||||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||||
|
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||||
|
|
||||||
INSTALL_TARGETS = $(TARGETS)
|
INSTALL_TARGETS = $(TARGETS)
|
||||||
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||||
|
|||||||
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <sysmenu/boot/common/boot.h>
|
#include <sysmenu/boot/common/boot.h>
|
||||||
|
#include "reboot.h"
|
||||||
//#include "loader.h"
|
//#include "loader.h"
|
||||||
//#include "mb_child.h"
|
//#include "mb_child.h"
|
||||||
|
|
||||||
@ -44,6 +45,12 @@ void BOOT_Init( void )
|
|||||||
BOOL BOOT_WaitStart( void )
|
BOOL BOOT_WaitStart( void )
|
||||||
{
|
{
|
||||||
if( (reg_PXI_MAINPINTF & 0x000f ) == 0x000f ) {
|
if( (reg_PXI_MAINPINTF & 0x000f ) == 0x000f ) {
|
||||||
|
// メモリクリアリストの設定
|
||||||
|
static u32 clr_list[] =
|
||||||
|
{
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
|
(void)OS_DisableIrq(); // ここで割り込み禁止にしないとダメ。
|
||||||
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
|
(void)OS_SetIrqMask(0); // SDKバージョンのサーチに時間がかかると、ARM9がHALTにかかってしまい、ARM7のサウンドスレッドがARM9にFIFOでデータ送信しようとしてもFIFOが一杯で送信できない状態で無限ループに入ってしまう。
|
||||||
/*
|
/*
|
||||||
@ -54,10 +61,13 @@ BOOL BOOT_WaitStart( void )
|
|||||||
InsertWLPatch();
|
InsertWLPatch();
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。
|
// BOOTi_ClearREG_RAM(); // ARM7側のメモリ&レジスタクリア。
|
||||||
reg_MI_MBK9 = 0; // 全WRAMのロック解除
|
reg_MI_MBK9 = 0; // 全WRAMのロック解除
|
||||||
reg_PXI_MAINPINTF = MAINP_SEND_IF | 0x0100; // ARM9に対してブートするようIRQで要求+ARM7のステートを1にする。
|
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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,6 +36,7 @@ TARGET_LIB = libboot$(TWL_LIBSUFFIX).a
|
|||||||
|
|
||||||
|
|
||||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||||
|
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||||
|
|
||||||
INSTALL_TARGETS = $(TARGETS)
|
INSTALL_TARGETS = $(TARGETS)
|
||||||
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
|
||||||
|
|||||||
@ -19,19 +19,27 @@
|
|||||||
#include <twl/os/common/format_rom.h>
|
#include <twl/os/common/format_rom.h>
|
||||||
#include <sysmenu/boot/common/boot.h>
|
#include <sysmenu/boot/common/boot.h>
|
||||||
#include <firm/format/wram_regs.h>
|
#include <firm/format/wram_regs.h>
|
||||||
|
#include "reboot.h"
|
||||||
//#include <nitro/mb.h>
|
//#include <nitro/mb.h>
|
||||||
//#include "IPL2_work.h"
|
//#include "IPL2_work.h"
|
||||||
//#include "define.h"
|
//#include "define.h"
|
||||||
|
|
||||||
|
|
||||||
// define data-------------------------------------------------------
|
// define data-------------------------------------------------------
|
||||||
#define SUBP_RECV_IF_ENABLE 0x4000
|
#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-------------------------------------------------------
|
// extern data-------------------------------------------------------
|
||||||
|
|
||||||
// function's prototype----------------------------------------------
|
// function's prototype----------------------------------------------
|
||||||
static void BOOTi_ClearREG_RAM( void );
|
static void BOOTi_ClearREG_RAM( void );
|
||||||
static void BOOTi_StartBOOT( void );
|
static void BOOTi_StartBOOT( void );
|
||||||
|
|
||||||
|
static void ResetCP15( void );
|
||||||
|
|
||||||
// global variables--------------------------------------------------
|
// global variables--------------------------------------------------
|
||||||
|
|
||||||
// static variables--------------------------------------------------
|
// static variables--------------------------------------------------
|
||||||
@ -51,6 +59,17 @@ static void ie_subphandler( void )
|
|||||||
// ブート準備をして、ARM7からの通知を待つ。
|
// ブート準備をして、ARM7からの通知を待つ。
|
||||||
void BOOT_Ready( void )
|
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;
|
int i;
|
||||||
|
|
||||||
// エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。
|
// エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。
|
||||||
@ -61,7 +80,7 @@ void BOOT_Ready( void )
|
|||||||
}
|
}
|
||||||
|
|
||||||
// FinalizeCardPulledOut(); // カード抜け検出終了処理
|
// FinalizeCardPulledOut(); // カード抜け検出終了処理
|
||||||
BOOTi_ClearREG_RAM(); // レジスタ&RAMクリア
|
// BOOTi_ClearREG_RAM(); // レジスタ&RAMクリア
|
||||||
(void)GX_VBlankIntr( FALSE );
|
(void)GX_VBlankIntr( FALSE );
|
||||||
(void)OS_SetIrqFunction( OS_IE_SUBP, ie_subphandler );
|
(void)OS_SetIrqFunction( OS_IE_SUBP, ie_subphandler );
|
||||||
OS_EnableInterrupts();
|
OS_EnableInterrupts();
|
||||||
@ -87,7 +106,13 @@ void BOOT_Ready( void )
|
|||||||
reg_GX_VRAMCNT_WRAM = pWRAMREGS->main_wrambnk_01;
|
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系。
|
// クリアしていないレジスタは、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];
|
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)'
|
MAKEROM_FLAGS += -F -DTITLEID_LO='$(TITLEID_LO)'
|
||||||
|
|
||||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||||
|
include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot
|
||||||
|
|
||||||
MAKELCF_FLAGS += -DADDRESS_BOOTCORE='0x02e7fc00'
|
MAKELCF_FLAGS += -DADDRESS_BOOTCORE='0x02e7fc00'
|
||||||
|
|
||||||
|
|||||||
@ -311,9 +311,26 @@ void LauncherLoading( TitleProperty *pTitleList )
|
|||||||
BannerDraw( s_csr, selected, pTitleList );
|
BannerDraw( s_csr, selected, pTitleList );
|
||||||
#endif
|
#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の実装
|
// LauncherMainのSelectSomethingByTPで使うSelectSomethingFuncの実装
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user