mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
ソース整理。
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@141 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
fc1b2bb85f
commit
09f6d98683
5
Makefile
5
Makefile
@ -21,7 +21,10 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = build
|
||||
SUBDIRS = $(TWLSDK_ROOT)/build/libraries/ese \
|
||||
$(TWLSDK_ROOT)/build/libraries/nam \
|
||||
$(TWLSDK_ROOT)/build/tools/TwlNMenu \
|
||||
build
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
@ -18,64 +18,29 @@
|
||||
#include <twl.h>
|
||||
#include <twl/nam.h>
|
||||
#include <sysmenu.h>
|
||||
#include <sysmenu/boot/common/boot.h>
|
||||
#include "sysmenu_define.h"
|
||||
#include "sysmenu_card.h"
|
||||
#include "spi.h"
|
||||
#include "mb_child.h"
|
||||
#include <sysmenu/boot/common/boot.h>
|
||||
|
||||
// define data-----------------------------------------------------------------
|
||||
|
||||
#define SCREEN_RED 0
|
||||
#define SCREEN_YELLOW 1
|
||||
|
||||
#define TITLE_ID_BUF_SIZE 40
|
||||
|
||||
typedef struct BannerCheckParam {
|
||||
u8 *srcp;
|
||||
u32 size;
|
||||
}BannerCheckParam;
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
extern void ReturnFromMain( void );
|
||||
extern void BootFuncEnd( void );
|
||||
|
||||
FS_EXTERN_OVERLAY( ipl2_data );
|
||||
FS_EXTERN_OVERLAY( bm_mainp );
|
||||
|
||||
// function's prototype-------------------------------------------------------
|
||||
static void SYSMi_WaitInitARM7( void );
|
||||
static BOOL SYSMi_IsDebuggerBannerViewMode( void );
|
||||
|
||||
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
||||
void SYSM_Finalize( void );
|
||||
void SYSM_RebootLauncher( void );
|
||||
void SYSM_RebootTitle( u64 titleID );
|
||||
|
||||
|
||||
|
||||
static void INTR_SubpIRQ( void );
|
||||
|
||||
static void LoadRomRegSizeAdjust( CARDRomRegion *romRegp, u32 load_limit_lo, u32 load_limit_hi );
|
||||
static void SYSMi_ReadyBootNitroGame( void );
|
||||
static void SYSMi_MainpRegisterAndRamClear( BOOL isPlatformTWL );
|
||||
static void ClearMemory( int addr1, int addr2 );
|
||||
|
||||
static void SYSMi_CopyInfoFromIPL1( void );
|
||||
|
||||
static void SYSMi_WriteAdjustRTC( void );
|
||||
static BOOL SYSMi_SendMessageToARM7( u32 msg );
|
||||
static int SYSMi_ExistCard( void );
|
||||
static u32 SYSMi_SelectBootType( void );
|
||||
static void SYSMi_DispInitialDebugData( void );
|
||||
static void SYSMi_DispDebugData( void );
|
||||
|
||||
static void DispSingleColorScreen( int mode );
|
||||
|
||||
static void SYSMi_ReadCardBannerFile( void );
|
||||
|
||||
static BOOL SYSMi_CheckEntryAddress( void );
|
||||
static BOOL SYSMi_CheckARM7LoadNITROCard( void );
|
||||
static void SYSMi_CheckCardCloneBoot( void );
|
||||
static void SYSMi_CheckRTC( void );
|
||||
|
||||
@ -92,7 +57,7 @@ NitroConfigData *ncdp; //
|
||||
// static variable-------------------------------------------------------------
|
||||
static BOOL s_isBanner = FALSE;
|
||||
static BannerFile s_bannerBuf;
|
||||
static NAMTitleId old_titleIdArray[TITLE_ID_BUF_SIZE];
|
||||
static NAMTitleId old_titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
@ -102,18 +67,7 @@ static BannerCheckParam s_bannerCheckList[ BNR_VER_MAX ] = {
|
||||
{ (u8 *)&s_bannerBuf.v3, sizeof( BannerFileV3 ) },
|
||||
};
|
||||
|
||||
#ifdef __DEBUG_SECURITY_CODE
|
||||
static GXRgb security_detection_color[] = { GX_RGB( 31, 0, 0 ),
|
||||
GX_RGB( 31, 31, 0 ), };
|
||||
#endif
|
||||
|
||||
// inline functions------------------------------------------------------------
|
||||
|
||||
static inline void DBG_SetRed(u32 y_pos)
|
||||
{
|
||||
*(u16 *)(HW_DB_BG_VRAM + 0xf000 + 0x20*2*y_pos) = (1<<12) | 0x100;
|
||||
MI_CpuFill16(((u8 *)HW_DB_BG_VRAM + 0x20*0x100), 0x1111, 0x20);
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// function's description
|
||||
@ -129,13 +83,21 @@ static void FreeForNAM(void *p)
|
||||
OS_FreeToHeap( OS_ARENA_MAIN, OS_CURRENT_HEAP_HANDLE, p);
|
||||
}
|
||||
|
||||
|
||||
// システムメニューライブラリ用メモリアロケータの設定
|
||||
void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||
{
|
||||
SYSM_Alloc = pAlloc;
|
||||
SYSM_Free = pFree;
|
||||
}
|
||||
|
||||
|
||||
// SystemMenuの初期化
|
||||
void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||
{
|
||||
#ifdef __SYSM_DEBUG
|
||||
pSysm = GetSYSMWork();
|
||||
ncdp = GetTSD();
|
||||
// SYSMi_DispInitialDebugData(); // 初期デバッグ情報表示
|
||||
#endif /* __SYSM_DEBUG */
|
||||
|
||||
TP_Init();
|
||||
@ -149,30 +111,7 @@ void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||
|
||||
SVC_CpuClearFast(0x0000, (u16 *)GetSYSMWork(), sizeof(SYSM_work)); // SYSMワークのクリア
|
||||
|
||||
// ※ISデバッガかどうかの判定。 BootROMからのパラメータ引渡し?
|
||||
SYSMi_WaitInitARM7();
|
||||
|
||||
//NAMの初期化
|
||||
//NAM_Init(AllocForNAM,FreeForNAM);
|
||||
|
||||
MI_CpuClearFast(old_titleIdArray, sizeof(old_titleIdArray) );
|
||||
}
|
||||
|
||||
// システムメニューライブラリ用メモリアロケータの設定
|
||||
void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) )
|
||||
{
|
||||
SYSM_Alloc = pAlloc;
|
||||
SYSM_Free = pFree;
|
||||
}
|
||||
|
||||
|
||||
// ARM7側の初期化待ち
|
||||
static void SYSMi_WaitInitARM7( void )
|
||||
{
|
||||
/* while( !( SYSM_GetBootFlag() & BFLG_ARM7_INIT_COMPLETED ) ) {
|
||||
SVC_WaitByLoop(0x1000); // ARM7の初期化が終了するのを待つ。
|
||||
}
|
||||
*/
|
||||
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
||||
|
||||
// SYSM_ReadHWInfo(); // NANDからHW情報をリード
|
||||
@ -185,32 +124,24 @@ static void SYSMi_WaitInitARM7( void )
|
||||
|
||||
SYSM_VerifyAndRecoveryNTRSettings(); // NTR設定データを読み出して、TWL設定データとベリファイし、必要ならリカバリ
|
||||
|
||||
SYSMi_CheckCardCloneBoot(); // カードがクローンブートかチェック
|
||||
SYSMi_ReadCardBannerFile(); // カードバナーファイルの読み出し。
|
||||
// SYSMi_CheckCardCloneBoot(); // カードがクローンブートかチェック
|
||||
// SYSMi_ReadCardBannerFile(); // カードバナーファイルの読み出し。
|
||||
|
||||
// ==============================================================
|
||||
// デバッガ対応コード
|
||||
#ifdef __IS_DEBUGGER_BUILD
|
||||
if( GetSYSMWork()->isOnDebugger ) {
|
||||
if( SYSMi_ExistCard() &&
|
||||
!SYSMi_IsDebuggerBannerViewMode() ){ // デバッガ上動作の場合は、この中でカードブートまでやってしまう。
|
||||
SYSM_GetResetParam()->isLogoSkip = TRUE;
|
||||
SYSM_GetResetParam()->bootTitleID = SYSM_GetCardTitleID();
|
||||
}
|
||||
}else {
|
||||
while( 1 ) {} // ISデバッガビルドでISデバッガが検出できなかったら停止。
|
||||
}
|
||||
#endif // __IS_DEBUGGER_BUILD
|
||||
// ==============================================================
|
||||
//NAMの初期化
|
||||
//NAM_Init(AllocForNAM,FreeForNAM);
|
||||
|
||||
MI_CpuClearFast(old_titleIdArray, sizeof(old_titleIdArray) );
|
||||
}
|
||||
|
||||
|
||||
// カードタイトルの取得
|
||||
int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
{
|
||||
#pragma unused( pTitleList_Card )
|
||||
return 0;
|
||||
}
|
||||
|
||||
// 指定ファイルリード
|
||||
static s32 ReadFile(FSFile* pf, void* buffer, s32 size)
|
||||
{
|
||||
u8* p = (u8*)buffer;
|
||||
@ -240,15 +171,16 @@ static s32 ReadFile(FSFile* pf, void* buffer, s32 size)
|
||||
#include <twl/ese.h>
|
||||
ESTitleMeta dst[1];
|
||||
|
||||
// NANDタイトルリストの取得
|
||||
int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size)
|
||||
{
|
||||
// filter_flag : ALL, ALL_APP, SYS_APP, USER_APP, Data only, 等の条件を指定してタイトルリストを取得する。
|
||||
// とりあえずALL
|
||||
int l;
|
||||
int gotten;
|
||||
NAMTitleId titleIdArray[TITLE_ID_BUF_SIZE];
|
||||
static BannerFile bannerBuf[TITLE_ID_BUF_SIZE];
|
||||
gotten = NAM_GetTitleList(titleIdArray, TITLE_ID_BUF_SIZE);
|
||||
NAMTitleId titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
static BannerFile bannerBuf[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
gotten = NAM_GetTitleList(titleIdArray, LAUNCHER_TITLE_LIST_NUM );
|
||||
|
||||
// バナーの読み込み……別の関数に移すべきかも。
|
||||
// 毎フレーム変化を見る必要がある。
|
||||
@ -316,7 +248,7 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size)
|
||||
|
||||
}
|
||||
}
|
||||
for(l=gotten;l<TITLE_ID_BUF_SIZE;l++)
|
||||
for(l=gotten;l<LAUNCHER_TITLE_LIST_NUM;l++)
|
||||
{
|
||||
// 念のため0にクリア
|
||||
titleIdArray[l] = 0;
|
||||
@ -428,20 +360,24 @@ OS_TPrintf("RebootSystem failed: logo CRC error\n");
|
||||
}
|
||||
|
||||
// 各領域を読み込む
|
||||
source[region_header] = 0x00000000;
|
||||
length[region_header] = HW_TWL_ROM_HEADER_BUF_SIZE;
|
||||
destaddr[region_header] = HW_TWL_ROM_HEADER_BUF;
|
||||
source[region_arm9_ntr] = *(const u32*)&header[0x020];
|
||||
length[region_arm9_ntr] = *(const u32*)&header[0x02C];
|
||||
source [region_header ] = 0x00000000;
|
||||
length [region_header ] = HW_TWL_ROM_HEADER_BUF_SIZE;
|
||||
destaddr[region_header ] = HW_TWL_ROM_HEADER_BUF;
|
||||
|
||||
source [region_arm9_ntr] = *(const u32*)&header[0x020];
|
||||
length [region_arm9_ntr] = *(const u32*)&header[0x02C];
|
||||
destaddr[region_arm9_ntr] = *(const u32*)&header[0x028];
|
||||
source[region_arm7_ntr] = *(const u32*)&header[0x030];
|
||||
length[region_arm7_ntr] = *(const u32*)&header[0x03C];
|
||||
|
||||
source [region_arm7_ntr] = *(const u32*)&header[0x030];
|
||||
length [region_arm7_ntr] = *(const u32*)&header[0x03C];
|
||||
destaddr[region_arm7_ntr] = *(const u32*)&header[0x038];
|
||||
source[region_arm9_twl] = *(const u32*)&header[0x1C0];
|
||||
length[region_arm9_twl] = *(const u32*)&header[0x1CC];
|
||||
|
||||
source [region_arm9_twl] = *(const u32*)&header[0x1C0];
|
||||
length [region_arm9_twl] = *(const u32*)&header[0x1CC];
|
||||
destaddr[region_arm9_twl] = *(const u32*)&header[0x1C8];
|
||||
source[region_arm7_twl] = *(const u32*)&header[0x1D0];
|
||||
length[region_arm7_twl] = *(const u32*)&header[0x1DC];
|
||||
|
||||
source [region_arm7_twl] = *(const u32*)&header[0x1D0];
|
||||
length [region_arm7_twl] = *(const u32*)&header[0x1DC];
|
||||
destaddr[region_arm7_twl] = *(const u32*)&header[0x1D8];
|
||||
|
||||
for (i = region_header; i < region_max; ++i)
|
||||
@ -473,90 +409,24 @@ OS_TPrintf("RebootSystem failed: cant read file(%d, %d)\n", source[i], len);
|
||||
// ROMヘッダバッファをコピー
|
||||
MI_CpuCopy32( (void *)HW_TWL_ROM_HEADER_BUF, (void *)HW_ROM_HEADER_BUF, HW_ROM_HEADER_BUF_END - HW_ROM_HEADER_BUF );
|
||||
|
||||
// 起動。
|
||||
BOOT_Ready();
|
||||
|
||||
// パラメータチェック
|
||||
if( !SYSMi_CheckTitlePointer( pBootTitle ) ) {
|
||||
return AUTH_RESULT_TITLE_POINTER_ERROR;
|
||||
}
|
||||
#if 0
|
||||
// エントリアドレスの正当性をチェック
|
||||
if( !SYSMi_CheckEntryAddress() ) {
|
||||
return AUTH_RESULT_ENTRY_ADDRESS_ERROR;
|
||||
}
|
||||
#endif
|
||||
|
||||
// 起動。
|
||||
BOOT_Ready(); // never return;
|
||||
|
||||
return AUTH_RESULT_SUCCEEDED;
|
||||
}
|
||||
|
||||
|
||||
// ブートのための終了処理
|
||||
void SYSM_Finalize( void )
|
||||
{
|
||||
// ARM7へのブート通知
|
||||
// レジスタ・RAMクリア
|
||||
|
||||
// ※ブート時にプロテクションユニットをOFFにしなければ、不正なアドレスでの起動を防げるのでは?
|
||||
|
||||
u32 i;
|
||||
|
||||
// ブートの前準備
|
||||
MI_CpuCopyFast( (void *)ReturnFromMain, (void *)RETURN_FROM_MAIN_ARM9_FUNCP, (u32)( (u32)BootFuncEnd - (u32)ReturnFromMain ) );
|
||||
DC_StoreRange ( (void *)ReturnFromMain, 0x200 ); // ゲームブート時の最終処理をメインメモリの後ろの方にコピー(※SYSM実行時のスタック上昇で破壊されないように、このタイミングでコピーする。)
|
||||
|
||||
for( i = 0; i <= MI_DMA_MAX_NUM; i++ ) { // DMAの停止
|
||||
MI_StopDma( i );
|
||||
}
|
||||
SYSM_FinalizeCardPulledOut(); // カード抜け検出終了処理
|
||||
SYSMi_MainpRegisterAndRamClear( TRUE ); // レジスタ&RAMクリア
|
||||
( void )GX_VBlankIntr(FALSE);
|
||||
( void )OS_SetIrqFunction(OS_IE_SUBP, INTR_SubpIRQ);
|
||||
( void )OS_SetIrqMask(OS_IE_SUBP); // サブプロセッサ割り込みのみを許可。
|
||||
reg_PXI_SUBPINTF = SUBP_RECV_IF_ENABLE | 0x0f00; // ARM9ステートを "0x0f" に
|
||||
GetSYSMWork()->mainp_state = MAINP_STATE_WAIT_BOOT_REQ;
|
||||
// ※もうFIFOはクリア済みなので、使わない。
|
||||
// ARM7からの通知待ち
|
||||
OS_WaitIrq(1, OS_IE_SUBP); // SVC_WaitIntr(0,OS_IE_SUBP);から変更。
|
||||
|
||||
// 割り込みをクリアして最終ブートシーケンスへ。
|
||||
reg_PXI_SUBPINTF &= 0x0f00; // サブプロセッサ割り込み許可フラグをクリア
|
||||
( void )OS_DisableIrq();
|
||||
( void )OS_SetIrqMask(0);
|
||||
( void )OS_ResetRequestIrqMask( (u32)~0 );
|
||||
}
|
||||
|
||||
|
||||
// ランチャーをリブート
|
||||
void SYSM_RebootLauncher( void )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// 再起動タイトルを指定してのリブート
|
||||
void SYSM_RebootTitle( u64 titleID )
|
||||
{
|
||||
#pragma unused( titleID )
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
// NITRO起動をARM7に通知
|
||||
BOOL SYSM_BootCard( void )
|
||||
{ // Nintendoロゴチェックは、このタイミングで行う。
|
||||
|
||||
( void )SYSMi_SendMessageToARM7(MSG_BOOT_TYPE_CARD); // ARM7にカード起動を通知。
|
||||
|
||||
if( SYSM_CheckNinLogo( (u16 *)GetRomHeaderAddr()->nintendo_logo ) == FALSE
|
||||
|| GetSYSMWork()->enableCardNormalOnly == TRUE ) { // NORMALカード非対応化
|
||||
SYSM_SetBootFlag( BFLG_ILLEGAL_NITRO_CARD );
|
||||
return FALSE;
|
||||
}else {
|
||||
SYSM_SetBootFlag( BFLG_BOOT_DECIDED | BFLG_BOOT_NITRO );
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
// TPリード可能かどうかを調べる。
|
||||
BOOL SYSM_IsTPReadable( void )
|
||||
@ -567,82 +437,6 @@ BOOL SYSM_IsTPReadable( void )
|
||||
#endif
|
||||
|
||||
|
||||
// ARM7-ARM9共有リソースのbootFlagへの値のセット
|
||||
void SYSM_SetBootFlag( u32 value )
|
||||
{
|
||||
BOOL preIrq = OS_DisableIrq();
|
||||
LockVariable *lockp = &GetSYSMWork()->boot_flag;
|
||||
( void )OS_LockByWord( BOOTFLAG_LOCK_ID, &(lockp->lock), (void (*)( void ))0x00000000);
|
||||
lockp->value |= value;
|
||||
( void )OS_UnLockByWord(BOOTFLAG_LOCK_ID, &(lockp->lock), (void (*)( void ))0x00000000);
|
||||
( void )OS_RestoreIrq( preIrq );
|
||||
}
|
||||
|
||||
|
||||
void SYSM_ClearBootFlag( u32 value )
|
||||
{
|
||||
BOOL preIrq = OS_DisableIrq();
|
||||
LockVariable *lockp = &GetSYSMWork()->boot_flag;
|
||||
( void )OS_LockByWord( BOOTFLAG_LOCK_ID, &(lockp->lock), (void (*)( void ))0x00000000);
|
||||
lockp->value &= ~value;
|
||||
( void )OS_UnLockByWord(BOOTFLAG_LOCK_ID, &(lockp->lock), (void (*)( void ))0x00000000);
|
||||
( void )OS_RestoreIrq( preIrq );
|
||||
}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// 割り込み処理
|
||||
// ============================================================================
|
||||
|
||||
// サブプロセッサ割り込み
|
||||
static void INTR_SubpIRQ( void )
|
||||
{
|
||||
OS_SetIrqCheckFlag( OS_IE_SUBP );
|
||||
}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// アプリ起動処理
|
||||
// ============================================================================
|
||||
|
||||
// SystemMenuで使用したレジスタ&メモリのクリア
|
||||
static void SYSMi_MainpRegisterAndRamClear( BOOL isPlatformTWL )
|
||||
{
|
||||
// 最後がサブプロセッサ割り込み待ちなので、IMEはクリアしない。
|
||||
( void )OS_SetIrqMask(0);
|
||||
( void )OS_ResetRequestIrqMask( (u32)~0 );
|
||||
|
||||
// メモリクリア
|
||||
GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); // VRAM クリア
|
||||
MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE);
|
||||
( void )GX_DisableBankForLCDC();
|
||||
// MI_CpuClearFast((void *)HW_ITCM, HW_ITCM_SIZE); // ITCM クリア ※ITCMにはSDKのコードが入っているので、gameBoot.cでクリアする。
|
||||
// MI_CpuClearFast((void *)HW_DTCM, HW_DTCM_SIZE-0x800); // DTCM クリア ※DTCMはスタック&SDK変数入りなので、最後にgameBoot.cでクリアしている。
|
||||
MI_CpuClearFast((void *)HW_OAM, HW_OAM_SIZE); // OAM クリア
|
||||
MI_CpuClearFast((void *)HW_PLTT, HW_PLTT_SIZE); // パレット クリア
|
||||
MI_CpuClearFast((void *)HW_DB_OAM, HW_DB_OAM_SIZE); // OAM クリア
|
||||
MI_CpuClearFast((void *)HW_DB_PLTT, HW_DB_PLTT_SIZE); // パレット クリア
|
||||
|
||||
// レジスタクリア
|
||||
MI_CpuClearFast((void*)(HW_REG_BASE + 0x8), 0x12c); // BG0CNT ~ KEYCNT
|
||||
MI_CpuClearFast((void*)(HW_REG_BASE + 0x280), 0x40); // DIVCNT ~ SQRTD3
|
||||
MI_CpuClearFast((void*)(HW_REG_BASE + 0x1000), 0x6e); // DISP1CNT1 ~ DISPBRTCNT1
|
||||
CP_SetDiv32_32( 0, 1 );
|
||||
reg_PXI_SUBP_FIFO_CNT = 0x4008;
|
||||
reg_GX_DISPCNT = 0;
|
||||
reg_GX_DISPSTAT = 0; // ※ reg_GX_VCOUNTはベタクリアできないので、この先頭部分のクリアを分離する。
|
||||
|
||||
|
||||
// NTRの時には、バナーがある時は、MCCNTのカードイネーブルビットが"1"で、無いときには"0"になっていたが、
|
||||
// NTR起動の時には、ここでもそれを踏襲しないとダメかも。。。
|
||||
|
||||
// クリアしていないレジスタは、VCOUNT, PIFCNT, MC-, EXMEMCNT, IME, RBKCNT1, PAUSE, POWLCDCNT, 全3D系です。
|
||||
if( isPlatformTWL ) {
|
||||
// TWL専用レジスタのクリア
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// サブルーチン
|
||||
// ============================================================================
|
||||
@ -668,7 +462,6 @@ static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
||||
}
|
||||
|
||||
|
||||
|
||||
// バナーファイルの読み込みの実体
|
||||
static void SYSMi_ReadCardBannerFile( void )
|
||||
{
|
||||
@ -755,14 +548,6 @@ static void SYSMi_WriteAdjustRTC( void )
|
||||
}
|
||||
|
||||
|
||||
// FIFO経由でARM7にメッセージ通知。※PXI_FIFO_TAG_USER_1を使用。
|
||||
static BOOL SYSMi_SendMessageToARM7(u32 msg)
|
||||
{
|
||||
#pragma unused(msg)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// NTR,TWLカード存在チェック 「リターン 1:カード認識 0:カードなし」
|
||||
static int SYSMi_ExistCard( void )
|
||||
{
|
||||
@ -802,7 +587,7 @@ void SYSM_SetBackLightBrightness( void )
|
||||
//======================================================================
|
||||
|
||||
// Nintendoロゴチェック 「リターン 1:Nintendoロゴ認識成功 0:失敗」
|
||||
BOOL SYSM_CheckNinLogo(u16 *logo_cardp)
|
||||
BOOL SYSM_CheckNintendoLogo(u16 *logo_cardp)
|
||||
{
|
||||
u16 *logo_orgp = (u16 *)SYSROM9_NINLOGO_ADR; // ARM9のシステムROMのロゴデータとカートリッジ内のものを比較
|
||||
u16 length = NINTENDO_LOGO_LENGTH >> 1;
|
||||
@ -836,18 +621,6 @@ static BOOL SYSMi_CheckEntryAddress( void )
|
||||
}
|
||||
|
||||
|
||||
// ARM7によるNITROゲームのロード完了を確認する。
|
||||
static BOOL SYSMi_CheckARM7LoadNITROCard( void )
|
||||
{
|
||||
if( SYSMi_ExistCard()
|
||||
// && !( SYSM_GetBootFlag() & BFLG_LOAD_CARD_COMPLETED )
|
||||
) {
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// クローンブート判定
|
||||
static void SYSMi_CheckCardCloneBoot( void )
|
||||
{
|
||||
@ -904,70 +677,3 @@ static void SYSMi_CheckRTC( void )
|
||||
//======================================================================
|
||||
// デバッグ
|
||||
//======================================================================
|
||||
|
||||
// 初期データのデバッグ表示
|
||||
#ifdef __SYSM_DEBUG
|
||||
static void SYSMi_DispInitialDebugData( void )
|
||||
{
|
||||
OS_Printf("SYSM version :20%x\n", SYSMENU_VER);
|
||||
if( GetMovedInfoFromIPL1Addr()->isOnDebugger ) OS_Printf("Run On IS-DEBUGGER\n");
|
||||
else OS_Printf("Run On IS-EMULATOR\n");
|
||||
if(GetMovedInfoFromIPL1Addr()->rtcStatus & 0x01) OS_Printf("RTC reset is detected!\n");
|
||||
if(GetMovedInfoFromIPL1Addr()->rtcError) OS_Printf("RTC error is detected!\n");
|
||||
#if 0
|
||||
OS_Printf("NvDate :%4d\n",sizeof(NvDate));
|
||||
OS_Printf("NvNickname :%4d\n",sizeof(NvNickname));
|
||||
OS_Printf("NvComment :%4d\n",sizeof(NvComment));
|
||||
OS_Printf("NvOwnerInfo :%4d\n",sizeof(NvOwnerInfo));
|
||||
OS_Printf("NvAlarm :%4d\n",sizeof(NvAlarm));
|
||||
OS_Printf("NvTpCalibData:%4d\n",sizeof(NvTpCalibData));
|
||||
OS_Printf("NvOption :%4d\n",sizeof(NvOption));
|
||||
OS_Printf("NCD :%4d\n",sizeof(NitroConfigData));
|
||||
OS_Printf("NCDStore :%4d\n",sizeof(NCDStore));
|
||||
#endif
|
||||
#if 0
|
||||
{ // ROM_HEADER_BUFFの内容を書き出し
|
||||
int i,j;
|
||||
u32 *romhp = (u32 *)GetRomHeaderAddr();
|
||||
OS_Printf("ROM Header Buff\n ");
|
||||
for(i = 0; i < 6; i++) {
|
||||
for(j = 0; j < 4; j++) OS_Printf(" 0x%8x", *romhp++);
|
||||
OS_Printf("\n ");
|
||||
}
|
||||
OS_Printf("\n");
|
||||
}
|
||||
{ // ROM_HEADER_BUFFの内容を書き出し
|
||||
int i,j;
|
||||
u32 *romhp = (u32 *)MB_CARD_ROM_HEADER_ADDRESS;
|
||||
OS_Printf("MB Card ROM Header Buff\n ");
|
||||
for(i = 0; i < 6; i++) {
|
||||
for(j = 0; j < 4; j++) OS_Printf(" 0x%8x", *romhp++);
|
||||
OS_Printf("\n ");
|
||||
}
|
||||
OS_Printf("\n");
|
||||
}
|
||||
#endif /* 0 */
|
||||
}
|
||||
#endif /* __SYSM_DEBUG */
|
||||
|
||||
|
||||
|
||||
#ifdef __DEBUG_SECURITY_CODE
|
||||
// セキュリティがきちんと働いているかを確認するデバッグコード
|
||||
static void DispSingleColorScreen( int mode )
|
||||
{
|
||||
( void )OS_DisableIrq();
|
||||
GX_LoadBGPltt ( &security_detection_color[ mode ], 0, sizeof(GXRgb) );
|
||||
GXS_LoadBGPltt ( &security_detection_color[ mode ], 0, sizeof(GXRgb) );
|
||||
GX_DispOn();
|
||||
GXS_DispOn();
|
||||
GX_SetGraphicsMode ( GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D );
|
||||
GXS_SetGraphicsMode( GX_BGMODE_0 );
|
||||
GX_SetMasterBrightness( 0 );
|
||||
GXS_SetMasterBrightness( 0 );
|
||||
GX_SetVisiblePlane ( GX_PLANEMASK_NONE );
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_NONE );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
@ -42,11 +42,11 @@ LINCLUDES = $(SRCDIR)/$(LOGO_DIR)
|
||||
#LLIBRARIES =
|
||||
#LDEPENDS_NEF =
|
||||
|
||||
LLIBRARIES += libnam$(TWL_LIBSUFFIX).a\
|
||||
libese$(TWL_LIBSUFFIX).a\
|
||||
libboot$(TWL_LIBSUFFIX).a
|
||||
LLIBRARIES += libnam$(TWL_LIBSUFFIX).a \
|
||||
libese$(TWL_LIBSUFFIX).a \
|
||||
libboot$(TWL_LIBSUFFIX).a
|
||||
|
||||
ADDRESS_DTCM = 0x0e000000
|
||||
ADDRESS_DTCM = 0x0e000000
|
||||
|
||||
DEFAULT_COMP_ARM7 = hyena
|
||||
DEFAULT_MAKEROM_ARM7_BASE = $(TWLIPL_ROOT)/components/$(DEFAULT_COMP_ARM7)/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7)
|
||||
|
||||
@ -41,65 +41,13 @@ static void DrawLauncher(u16 nowCsr, const MenuParam *pMenu);
|
||||
|
||||
// static variable -------------------------------------
|
||||
static int s_csr = 0; // メニューのカーソル位置
|
||||
static const u16 *s_pStrLauncher[ LAUNCHER_ELEMENT_NUM ]; // ロゴメニュー用文字テーブルへのポインタリスト
|
||||
|
||||
static u64 old_titleIdArray[TITLE_PROPERTY_NUM];
|
||||
static u64 old_titleIdArray[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
|
||||
// const data -----------------------------------------
|
||||
//===============================================
|
||||
// Launcher.c
|
||||
//===============================================
|
||||
static const u16 *const s_pStrLauncherElemTbl[ LAUNCHER_ELEMENT_NUM ][ TWL_LANG_CODE_MAX ] = {
|
||||
{
|
||||
(const u16 *)L"DSカード",
|
||||
(const u16 *)L"DS Card",
|
||||
(const u16 *)L"DS Card(F)",
|
||||
(const u16 *)L"DS Card(G)",
|
||||
(const u16 *)L"DS Card(I)",
|
||||
(const u16 *)L"DS Card(S)",
|
||||
},
|
||||
{
|
||||
(const u16 *)L"ピクトチャット",
|
||||
(const u16 *)L"PictoChat",
|
||||
(const u16 *)L"PictoChat(F)",
|
||||
(const u16 *)L"PictoChat(G)",
|
||||
(const u16 *)L"PictoChat(I)",
|
||||
(const u16 *)L"PictoChat(S)",
|
||||
},
|
||||
{
|
||||
(const u16 *)L"DSダウンロードプレイ",
|
||||
(const u16 *)L"DS Download Play",
|
||||
(const u16 *)L"DS Download Play(F)",
|
||||
(const u16 *)L"DS Download Play(G)",
|
||||
(const u16 *)L"DS Download Play(I)",
|
||||
(const u16 *)L"DS Download Play(S)",
|
||||
},
|
||||
{
|
||||
(const u16 *)L"本体設定",
|
||||
(const u16 *)L"Machine Settings",
|
||||
(const u16 *)L"Machine Settings(F)",
|
||||
(const u16 *)L"Machine Settings(G)",
|
||||
(const u16 *)L"Machine Settings(I)",
|
||||
(const u16 *)L"Machine Settings(S)",
|
||||
},
|
||||
};
|
||||
|
||||
static MenuPos s_launcherPos[] = {
|
||||
{ TRUE, 4 * 8, 8 * 8 },
|
||||
{ TRUE, 4 * 8, 10 * 8 },
|
||||
{ TRUE, 4 * 8, 12 * 8 },
|
||||
{ TRUE, 4 * 8, 14 * 8 },
|
||||
{ TRUE, 4 * 8, 16 * 8 },
|
||||
};
|
||||
|
||||
static const MenuParam s_launcherParam = {
|
||||
LAUNCHER_ELEMENT_NUM,
|
||||
TXT_COLOR_BLACK,
|
||||
TXT_COLOR_GREEN,
|
||||
TXT_COLOR_RED,
|
||||
&s_launcherPos[0],
|
||||
(const u16 **)&s_pStrLauncher,
|
||||
};
|
||||
|
||||
static const u16 *const str_backlight[] = {
|
||||
(const u16 *)L"BLT:ON ",
|
||||
@ -118,10 +66,10 @@ static BannerFile *empty_banner;
|
||||
static BannerFile *nobanner_banner;
|
||||
static BannerFile *card_banner;
|
||||
static BannerFile *download_banner;
|
||||
static u8 image_index_list[TITLE_PROPERTY_NUM];
|
||||
static u8 image_index_list[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
static const int MAX_SHOW_BANNER = 6;
|
||||
static GXOamAttr banner_oam_attr[MAX_SHOW_BANNER+10];// アフィンパラメータ埋める関係で少し大きめ
|
||||
static u8 *pbanner_image_list[TITLE_PROPERTY_NUM];
|
||||
static u8 *pbanner_image_list[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
static int banner_count = 0;
|
||||
|
||||
static void LoadBannerFiles()
|
||||
@ -195,7 +143,7 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
|
||||
*/
|
||||
|
||||
// TitleProperty弄り
|
||||
for(l=0;l<TITLE_PROPERTY_NUM;l++)
|
||||
for(l=0;l<LAUNCHER_TITLE_LIST_NUM;l++)
|
||||
{
|
||||
if(titleprop[l].titleID == 0) //IDがゼロの時はEmpty
|
||||
{
|
||||
@ -208,7 +156,7 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
|
||||
}
|
||||
|
||||
// TitlePropertyを見てVRAMにキャラクタデータをロード
|
||||
for(l=0;l<TITLE_PROPERTY_NUM;l++)
|
||||
for(l=0;l<LAUNCHER_TITLE_LIST_NUM;l++)
|
||||
{
|
||||
if(titleprop[l].titleID != old_titleIdArray[l])
|
||||
{
|
||||
@ -217,7 +165,7 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(l=0;l<TITLE_PROPERTY_NUM;l++)
|
||||
for(l=0;l<LAUNCHER_TITLE_LIST_NUM;l++)
|
||||
{
|
||||
u8 m;
|
||||
u8 *pban=((BannerFile *)titleprop[l].pBanner)->v1.image;
|
||||
@ -229,7 +177,7 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
|
||||
}
|
||||
if(m == banner_count)
|
||||
{
|
||||
if(banner_count<TITLE_PROPERTY_NUM-1){
|
||||
if(banner_count<LAUNCHER_TITLE_LIST_NUM-1){
|
||||
GX_LoadOBJ(pban, (u32)m*BNR_IMAGE_SIZE , BNR_IMAGE_SIZE);
|
||||
pbanner_image_list[m] = pban;
|
||||
banner_count++;
|
||||
@ -273,7 +221,7 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop)
|
||||
for (l=0;l<MAX_SHOW_BANNER;l++)
|
||||
{
|
||||
int num = cursor/CURSOR_PER_SELECT - 2 + l;
|
||||
if(-1 < num && num < TITLE_PROPERTY_NUM){
|
||||
if(-1 < num && num < LAUNCHER_TITLE_LIST_NUM){
|
||||
banner_oam_attr[l].charNo = image_index_list[num]*4;
|
||||
|
||||
if(l == 2 || l == 3)
|
||||
@ -309,7 +257,6 @@ void LauncherInit( TitleProperty *pTitleList )
|
||||
{
|
||||
#pragma unused( pTitleList )
|
||||
|
||||
int i;
|
||||
GX_DispOff();
|
||||
GXS_DispOff();
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
@ -318,17 +265,6 @@ void LauncherInit( TitleProperty *pTitleList )
|
||||
|
||||
PrintfSJIS( 0, 0, TXT_COLOR_BLUE, "TWL-SYSTEM MENU ver.%06x", SYSMENU_VER );
|
||||
|
||||
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
|
||||
for( i = 0; i < LAUNCHER_ELEMENT_NUM; i++ ) {
|
||||
s_pStrLauncher[ i ] = s_pStrLauncherElemTbl[ i ][ TSD_GetLanguage() ];
|
||||
}
|
||||
|
||||
if( !SYSM_IsNITROCard() ) {
|
||||
s_launcherPos[ 0 ].enable = FALSE; // DSカードが無い時は、先頭要素を無効にする。
|
||||
}
|
||||
|
||||
//DrawMenu( s_csr, &s_launcherParam );
|
||||
|
||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||
|
||||
InitGetAndDrawRtcData( RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y );
|
||||
@ -390,27 +326,18 @@ TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
||||
if(csr_v == 0) csr_v = -1;
|
||||
}
|
||||
s_csr += csr_v;
|
||||
if((TITLE_PROPERTY_NUM-1)*CURSOR_PER_SELECT < s_csr) s_csr = (TITLE_PROPERTY_NUM-1)*CURSOR_PER_SELECT;
|
||||
if((LAUNCHER_TITLE_LIST_NUM-1)*CURSOR_PER_SELECT < s_csr) s_csr = (LAUNCHER_TITLE_LIST_NUM-1)*CURSOR_PER_SELECT;
|
||||
if( s_csr < 0 ) s_csr = 0;
|
||||
if(s_csr%CURSOR_PER_SELECT == 0){
|
||||
csr_v = 0;
|
||||
selected = s_csr/CURSOR_PER_SELECT;
|
||||
}
|
||||
// tp_select = SelectMenuByTP( &s_csr, &s_launcherParam );
|
||||
|
||||
// DrawMenu( s_csr, &s_launcherParam );
|
||||
|
||||
#ifdef DBGBNR
|
||||
BannerDraw( s_csr, selected, pTitleList );
|
||||
#endif
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
||||
/*
|
||||
if( s_launcherPos[ 0 ].enable ) {
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
return NULL;
|
||||
}
|
||||
*/
|
||||
if(pTitleList[selected].titleID != 0)
|
||||
{
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
|
||||
@ -26,7 +26,6 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
#define TITLE_PROPERTY_NUM 40
|
||||
|
||||
// global variables--------------------------------------------------
|
||||
|
||||
|
||||
@ -38,14 +38,8 @@ static BannerFile banner; //
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
#if 1
|
||||
|
||||
typedef struct CardStatus {
|
||||
u16 primarySlot; // PULLOUT, DETECT, VALID, INVALID
|
||||
u16 secondarySlot; // 同上。
|
||||
}CardStatus;
|
||||
|
||||
|
||||
// メイン
|
||||
void TwlMain( void )
|
||||
{
|
||||
enum {
|
||||
@ -59,7 +53,7 @@ void TwlMain( void )
|
||||
};
|
||||
u32 state = START;
|
||||
TitleProperty *pBootTitle = NULL;
|
||||
TitleProperty pTitleList[TITLE_PROPERTY_NUM];
|
||||
TitleProperty pTitleList[ LAUNCHER_TITLE_LIST_NUM ];
|
||||
|
||||
OS_Init();
|
||||
|
||||
@ -101,7 +95,7 @@ void TwlMain( void )
|
||||
// FS_ReadSharedContentFile( ContentID );
|
||||
|
||||
// NANDアプリリストの取得----------
|
||||
(void)SYSM_GetNandTitleList( pTitleList, TITLE_PROPERTY_NUM );
|
||||
(void)SYSM_GetNandTitleList( pTitleList, LAUNCHER_TITLE_LIST_NUM );
|
||||
|
||||
while( 1 ) {
|
||||
OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち
|
||||
@ -132,12 +126,9 @@ void TwlMain( void )
|
||||
}
|
||||
break;
|
||||
case AUTHENTICATE:
|
||||
switch ( SYSM_LoadAndAuthenticateTitle( pBootTitle ) ) { // アプリロード&認証
|
||||
switch ( SYSM_LoadAndAuthenticateTitle( pBootTitle ) ) { // アプリロード&認証 成功時:never return
|
||||
case AUTH_PROCESSING:
|
||||
break;
|
||||
case AUTH_RESULT_SUCCEEDED:
|
||||
state = BOOT;
|
||||
break;
|
||||
case AUTH_RESULT_TITLE_POINTER_ERROR:
|
||||
case AUTH_RESULT_AUTHENTICATE_FAILED:
|
||||
case AUTH_RESULT_ENTRY_ADDRESS_ERROR:
|
||||
@ -145,171 +136,13 @@ void TwlMain( void )
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case BOOT:
|
||||
SYSM_Finalize(); // 終了処理
|
||||
return;
|
||||
case STOP: // 停止
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// function's description
|
||||
// ============================================================================
|
||||
/*
|
||||
void TwlMain(void)
|
||||
{
|
||||
typedef enum PrgState {
|
||||
STATE_START = 1,
|
||||
STATE_LOGO_DISP,
|
||||
STATE_LOGO_MENU,
|
||||
STATE_WAIT_BOOT
|
||||
}PrgState;
|
||||
|
||||
PrgState prg_state = STATE_START;
|
||||
BOOL boot_decision = FALSE;
|
||||
|
||||
// 初期化----------------------------------
|
||||
SYSM_Init(); // システムメニュー関連データの初期化(TwlMainの先頭でコールして下さい。)
|
||||
|
||||
OS_Init();
|
||||
|
||||
(void)OS_EnableIrq();
|
||||
(void)OS_EnableInterrupts();
|
||||
|
||||
FS_Init( FS_DMA_NOT_USE );
|
||||
GX_Init();
|
||||
GX_SetPower(GX_POWER_ALL); // 各ロジック パワーON
|
||||
|
||||
// 割り込み許可----------------------------
|
||||
(void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank);
|
||||
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
|
||||
(void)GX_VBlankIntr(TRUE);
|
||||
|
||||
// デバイス初期化-------------------------------
|
||||
#ifndef __TP_OFF
|
||||
TP_Init();
|
||||
#endif
|
||||
(void)RTC_Init();
|
||||
|
||||
// システムの初期化------------------
|
||||
InitAllocator( &g_allocator );
|
||||
CMN_InitFileSystem( &g_allocator );
|
||||
|
||||
// InitAllocSystem();
|
||||
|
||||
// ARM7初期化待ち--------------------------
|
||||
// if( SYSM_WaitARM7Init() ) { // ARM7側の初期化が終わるのを待ってからメインループ開始
|
||||
// return; // TRUEが返されたら、デバッガブートなのでリターン
|
||||
// }
|
||||
|
||||
// メインループ----------------------------
|
||||
while(1){
|
||||
OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち
|
||||
ReadKeyPad(); // キー入力の取得
|
||||
|
||||
if(SYSM_IsTPReadable()) {
|
||||
ReadTpData(); // TP入力の取得
|
||||
}
|
||||
|
||||
// if(SYSM_Main()) { // IPL2システムのメイン
|
||||
// return; // TRUEが帰ってきたらメインループからリターン(NITROゲーム起動等)
|
||||
// }
|
||||
|
||||
switch(prg_state) {
|
||||
case STATE_START:
|
||||
boot_decision = CheckBootStatus(); // ブート状態をチェックする。(ショートカット起動やコンパイルスイッチによる強制起動)
|
||||
// if( !SYSM_GetBannerFile( &banner ) ) { // バナーデータのリード
|
||||
// OS_Printf("ROM banner data read failed.\n");
|
||||
// }
|
||||
prg_state = STATE_LOGO_DISP;
|
||||
break;
|
||||
|
||||
//-----------------------------------
|
||||
// NITROロゴ表示
|
||||
//-----------------------------------
|
||||
case STATE_LOGO_DISP:
|
||||
if( LogoMain() ) { // ロゴ表示ルーチン(※BFLG_GAMEBOY_LOGO_OFFの時は即終了)
|
||||
InitBG(); // BG初期化
|
||||
LauncherInit(); // ブート未決定時のみロゴメニューを初期化する。
|
||||
|
||||
prg_state = STATE_LOGO_MENU;
|
||||
}
|
||||
break; // ※NITROカードが正当でない場合は、このまま無限ループ。
|
||||
|
||||
//-----------------------------------
|
||||
// ロゴメニューで起動モード選択
|
||||
//-----------------------------------
|
||||
case STATE_LOGO_MENU:
|
||||
{
|
||||
IPL2BootType command = LauncherMain( boot_decision );
|
||||
|
||||
switch(command) {
|
||||
case BOOT_TYPE_UNSOLVED:
|
||||
break;
|
||||
|
||||
case BOOT_TYPE_NITRO:
|
||||
// if( !SYSM_BootNITRO() ) {
|
||||
// (void)DrawStringSJIS( 4, 20, RED, (const u8 *)"This NITRO card is invalid!!");
|
||||
// }
|
||||
break;
|
||||
|
||||
case BOOT_TYPE_PICT_CHAT:
|
||||
// (void)SYSM_BootPictChat();
|
||||
break;
|
||||
|
||||
case BOOT_TYPE_WIRELESS_BOOT:
|
||||
// (void)SYSM_BootDSDownloadPlay();
|
||||
break;
|
||||
|
||||
case BOOT_TYPE_BMENU:
|
||||
// (void)SYSM_BootMachineSetting();
|
||||
break;
|
||||
|
||||
default:
|
||||
OS_Panic( "ERROR: boot code failed : %d\n", command );
|
||||
}
|
||||
if(command) {
|
||||
prg_state = STATE_WAIT_BOOT;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case STATE_WAIT_BOOT:
|
||||
// SYSM_PermitToBootSelectedTarget();
|
||||
break;
|
||||
}
|
||||
|
||||
if ( PAD_DetectFold() == TRUE ) { // スリープモードへの遷移
|
||||
// SYSM_FinalizeCardPulledOut();
|
||||
SYSM_GoSleepMode();
|
||||
// (void)SYSM_IsCardPulledOut(); // カード抜け検出コマンド発行
|
||||
// SYSM_FinalizeCardPulledOut();
|
||||
// カード抜け検出
|
||||
// if ( SYSM_IsCardPulledOut() ) {
|
||||
if ( 0 ) {
|
||||
(void)PM_ForceToPowerOff();
|
||||
}
|
||||
}
|
||||
|
||||
// if (SYSM_IsCardPulledOut()) { // カード抜け検出
|
||||
if ( 0 ) {
|
||||
OS_Printf("Card is pulled out.\n");
|
||||
OS_Terminate();
|
||||
}
|
||||
|
||||
OS_PrintServer(); // ARM7からのプリントデバッグを処理する
|
||||
|
||||
//---- BG-VRAMの更新
|
||||
// DC_FlushRange ( bgBakS, sizeof(bgBakS) );
|
||||
// MI_CpuCopyFast( bgBakS, (void*)(HW_DB_BG_VRAM+0xf000), sizeof(bgBakS) );
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
// アロケータの初期化
|
||||
static void InitAllocator( NNSFndAllocator* pAllocator )
|
||||
{
|
||||
@ -341,25 +174,6 @@ void Free( void *pBuffer )
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
// mallocシステムの初期化
|
||||
static void InitAllocSystem(void)
|
||||
{
|
||||
void* tempLo;
|
||||
OSHeapHandle hh;
|
||||
|
||||
tempLo = OS_InitAlloc(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi(), 16);
|
||||
OS_SetArenaLo(OS_ARENA_MAIN, tempLo);
|
||||
OS_TPrintf( "ArenaLo : %08x ArenaHi : %08x\n", OS_GetMainArenaLo(), OS_GetMainArenaHi() );
|
||||
|
||||
hh = OS_CreateHeap(OS_ARENA_MAIN, OS_GetMainArenaLo(), OS_GetMainArenaHi());
|
||||
if(hh < 0) {
|
||||
OS_Panic("ARM9: Fail to create heap...\n");
|
||||
}
|
||||
hh = OS_SetCurrentHeap(OS_ARENA_MAIN, hh);
|
||||
}
|
||||
#endif
|
||||
|
||||
// ブート状態を確認し、ロゴ表示有無を判断する-------
|
||||
static BOOL CheckBootStatus(void)
|
||||
{
|
||||
|
||||
@ -5,17 +5,17 @@ SystemMenu_RED
|
||||
|
||||
・ランチャー △
|
||||
・カードアプリ取得 ×
|
||||
・NANDアプリリスト取得 ○
|
||||
・TWLカード起動 ×
|
||||
・NTRカード(NTRモード)起動 ×
|
||||
・NANDアプリ起動 △ (制限あり)
|
||||
・カード活線挿抜処理 ×
|
||||
・NTRカード(NTRモード)起動 ×
|
||||
・NANDアプリリスト取得 ○
|
||||
・NANDアプリ起動 ○
|
||||
・ISデバッガ対応 ×
|
||||
・ファームウェアとして正規動作 ×
|
||||
・アプリ起動時のWRAM-MAP設定 ×
|
||||
・アプリ起動時のWRAM-MAP設定 ○
|
||||
・署名・暗号処理 ×
|
||||
・鍵管理 ×
|
||||
・メモリマップFIX ×
|
||||
・メモリマップFIX ○
|
||||
・NTRコンポーネントパッチ ×
|
||||
・本体設定 △
|
||||
・言語選択 ○
|
||||
@ -32,6 +32,8 @@ SystemMenu_RED
|
||||
・アプリ管理 ×
|
||||
・SDにコピーする際のファイルフォーマット×
|
||||
|
||||
・TWLバナー対応 ×
|
||||
・makebanner作成 ×
|
||||
・NANDファーム→ランチャーパラメータ引渡し ×
|
||||
・アドレスFIX ×
|
||||
・ランチャー⇔NANDアプリ間パラメータ引渡し ×
|
||||
@ -39,16 +41,16 @@ SystemMenu_RED
|
||||
・NAND,SDマウント情報(アクセス制限) ×
|
||||
・アプリからのHWリセット時パラメータ ×
|
||||
・DSダウンロードプレイの情報 ×
|
||||
・NAND内オーバーレイ&FS ×
|
||||
・NAND内オーバーレイ&FS △
|
||||
・共有リソースアクセス ×
|
||||
・タイトル外部リソースアクセス ×
|
||||
・NANDアプリデバッグ対応 × (現状カードアプリとしてデバッグ)
|
||||
|
||||
・NANDアプリインストール ○ (TwlSDKのNMenuを使用)
|
||||
・NANDフォーマット ○ (TwlSDKのdemos.TWL/fatfs/formatterを使用)
|
||||
・NANDフォーマット △ (TwlSDKのdemos.TWL/fatfs/formatterを使用)
|
||||
・起動できないランチャーを書いて起動しなくなった時の復旧は、GCDファーム形式のプログラムを作らないとダメ
|
||||
|
||||
・makerom.TWL対応
|
||||
・ヘッダをTwlSDKの共有に
|
||||
・TitleIDを入れる?
|
||||
・ファーム用ビルド(PKIを不使用、AES暗号範囲変更)に対応
|
||||
・TWLカードのノーマル領域をマニュアル設定できるように。
|
||||
|
||||
@ -30,6 +30,8 @@ extern "C" {
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
|
||||
#define LAUNCHER_TITLE_LIST_NUM 40 // ランチャーのタイトルリスト数
|
||||
|
||||
// タイトル情報
|
||||
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
|
||||
u64 titleID; // タイトルID
|
||||
@ -88,7 +90,7 @@ extern void SYSM_BootMachineSetting( void );
|
||||
extern BOOL SYSM_ReadBannerFile( BannerFile *banner );
|
||||
extern BOOL SYSM_IsTPReadable( void );
|
||||
|
||||
extern BOOL SYSM_CheckNinLogo( u16 *logo_cardp );
|
||||
extern BOOL SYSM_CheckNintendoLogo( u16 *logo_cardp );
|
||||
extern void SYSM_LoadNintendoLogo2D( u16 *ninLogoDatap, u16 *dstp, u16 color, u32 *tempBuffp ); // tempBuffpには0x700byte必要です。
|
||||
extern void SYSM_LoadNintendoLogo1D( u16 *ninLogoDatap, u16 *dstp, u16 color, u32 *tempBuffp ); // 同上。
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user