diff --git a/Makefile b/Makefile index 616dacb0..be8c7060 100644 --- a/Makefile +++ b/Makefile @@ -21,9 +21,7 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs #---------------------------------------------------------------------------- -SUBDIRS = $(TWLSDK_ROOT)/build/libraries/ese \ - $(TWLSDK_ROOT)/build/libraries/nam \ - build +SUBDIRS = build #---------------------------------------------------------------------------- diff --git a/Makefile.sysmenu b/Makefile.sysmenu new file mode 100644 index 00000000..59f6ec12 --- /dev/null +++ b/Makefile.sysmenu @@ -0,0 +1,34 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlFirm - build +# File: Makefile +# +# Copyright 2007 Nintendo. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev:$ +# $Author:$ +#---------------------------------------------------------------------------- + +include $(TWLIPL_ROOT)/build/buildtools/commondefs + + +#---------------------------------------------------------------------------- + +SUBDIRS = \ + build/libraries_sysmenu\ + build/components \ + build/systemmenu_RED + +#---------------------------------------------------------------------------- + +include $(TWLIPL_ROOT)/build/buildtools/modulerules + + +#===== End of Makefile ===== diff --git a/build/libraries_sysmenu/boot/ARM7/src/boot.c b/build/libraries_sysmenu/boot/ARM7/src/boot.c index f84a4e96..35f0d237 100644 --- a/build/libraries_sysmenu/boot/ARM7/src/boot.c +++ b/build/libraries_sysmenu/boot/ARM7/src/boot.c @@ -17,7 +17,7 @@ #include #include -#include +#include //#include "loader.h" //#include "mb_child.h" @@ -111,7 +111,7 @@ static asm void ClearBankREG_Stack( void ) bl CpuClear32Byte #endif // ISDBG_MB_CHILD_ - sub r0, r2, #( HW_PRV_WRAM_END - RETURN_FROM_MAIN_ARM7_FUNCP ) + sub r0, r2, #( HW_PRV_WRAM_END - BOOTCORE_ARM7_ADDR ) ldr r1, = ClearMemory bl CpuClear32Byte diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/gameBoot.c b/build/libraries_sysmenu/sysmenu/ARM9/src/gameBoot.c index 558b3284..81593dd1 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/gameBoot.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/gameBoot.c @@ -16,7 +16,7 @@ *---------------------------------------------------------------------------*/ #include -#include +#include // define data------------------------------------------------------- #define C1_DTCM_ENABLE 0x00010000 // データTCM イネーブル diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c b/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c index cb4387aa..d0c811e4 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/ninLogoFunc.c @@ -16,20 +16,20 @@ *---------------------------------------------------------------------------*/ #include -#include #include +#include // define data----------------------------------------------------------- // extern data----------------------------------------------------------- // function's prototype-------------------------------------------------- -static void UnCompNintendoLogo2(u16 *NintendoLogoDatap, u16 *dstp, u32 *temp); -static void SVC_DiffUnFilter16_16_2(u16 *srcp,u16 *dstp); -static s32 MEMBm_InitFunc(const u8 *devicep, void *ramp, const void *paramp); -static s32 MEMBm_TerminateFunc(const u8 *devicep); -static u8 MEMBm_ByteStreamFunc(const u8 *devicep); -static u32 MEMBm_WordStreamFunc(const u8 *devicep); +static void UnCompNintendoLogo2(u16 *pLogoData, u16 *pDst, u32 *pTemp ); +static void SVC_DiffUnFilter16_16_2( u16 *pSrc, u16 *pDst ); +static s32 MEMBm_InitFunc( const u8 *pDevice, void *pRAM, const void *pParam ); +static s32 MEMBm_TerminateFunc( const u8 *pDevice ); +static u8 MEMBm_ByteStreamFunc( const u8 *pDevice ); +static u32 MEMBm_WordStreamFunc( const u8 *pDevice ); // global variable------------------------------------------------------- @@ -56,26 +56,41 @@ const MIReadStreamCallbacks memb_ifp2={ // function's description-------------------------------------------- -// Nintendoロゴデータの展開ルーチン(OBJ2Dマップモードで展開) -// ※tempBuffpには、0x700byte必要です。 -void SYSM_LoadNintendoLogo2D( u16 *ninLogoDatap, u16 *dstp, u16 color, u32 *tempBuffp ) +// Nintendoロゴチェック 「リターン 1:Nintendoロゴ認識成功 0:失敗」 +BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ) { - u32 work[ 0x100 / sizeof(u32) ]; + u16 *pLogoOrg = (u16 *)SYSROM9_NINLOGO_ADR; // ARM9のシステムROMのロゴデータとカートリッジ内のものを比較 + u16 length = NINTENDO_LOGO_DATA_LENGTH >> 1; - Nin_UnPackBitsParam2.destOffset = color - 1; - UnCompNintendoLogo2( ninLogoDatap, (u16 *)tempBuffp, work ); - MI_CpuCopyFast( (u16 *)( (u32)tempBuffp + 0 ), dstp + 0x0000 / sizeof(u16), 0x1a0 ); - MI_CpuCopyFast( (u16 *)( (u32)tempBuffp + 0x1a0), dstp + 0x0400 / sizeof(u16), 0x1a0 ); + while( length-- ) { + if( *pLogoOrg++ != *pLogoData++ ) { + return FALSE; + } + } + return TRUE; } -void SYSM_LoadNintendoLogo1D( u16 *ninLogoDatap, u16 *dstp, u16 color, u32 *tempBuffp ) +// Nintendoロゴデータの展開ルーチン(OBJ2Dマップモードで展開) +// ※tempBuffpには、0x700byte必要です。 +void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ) { u32 work[ 0x100 / sizeof(u32) ]; Nin_UnPackBitsParam2.destOffset = color - 1; - UnCompNintendoLogo2( ninLogoDatap, (u16 *)tempBuffp, work ); - MI_CpuCopyFast( (u16 *)tempBuffp, dstp, 0x340 ); + UnCompNintendoLogo2( pLogoData, (u16 *)pTempBuffer, work ); + MI_CpuCopyFast( (u16 *)( (u32)pTempBuffer + 0 ), pDst + 0x0000 / sizeof(u16), 0x1a0 ); + MI_CpuCopyFast( (u16 *)( (u32)pTempBuffer + 0x1a0), pDst + 0x0400 / sizeof(u16), 0x1a0 ); +} + + +void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ) +{ + u32 work[ 0x100 / sizeof(u32) ]; + + Nin_UnPackBitsParam2.destOffset = color - 1; + UnCompNintendoLogo2( pLogoData, (u16 *)pTempBuffer, work ); + MI_CpuCopyFast( (u16 *)pTempBuffer, pDst, 0x340 ); } /* UnCompNintendoLogo2ワーク内訳 @@ -92,7 +107,7 @@ void SYSM_LoadNintendoLogo1D( u16 *ninLogoDatap, u16 *dstp, u16 color, u32 *temp // Nintendoロゴ展開ルーチン (r0=ロゴ圧縮データ r1=展開先アドレス) #include -static asm void UnCompNintendoLogo2(u16 *NintendoLogoDatap, u16 *dstp, u32 *temp) +static asm void UnCompNintendoLogo2( u16 *pLogoData, u16 *pDst, u32 *pTemp ) { push {r0-r2,r4, lr} @@ -105,7 +120,7 @@ static asm void UnCompNintendoLogo2(u16 *NintendoLogoDatap, u16 *dstp, u32 *temp ldr r0, [sp, #0] // r0 <- NintendoLogoDatap mov r2, #36 add r1, r4, r2 // r1 <- temp + 36 - mov r2, #NINTENDO_LOGO_LENGTH + mov r2, #NINTENDO_LOGO_DATA_LENGTH bl MIi_CpuCopy16 // NintendoLogoDatapからNintendoロゴデータ本体をコピーしてくる mov r0, r4 // r0 <- temp @@ -133,7 +148,7 @@ static asm void UnCompNintendoLogo2(u16 *NintendoLogoDatap, u16 *dstp, u32 *temp // 差分フィルタ展開システムコール(16Bit→16Bit) (r0=Srcp, r1=Destp) -static asm void SVC_DiffUnFilter16_16_2(u16 *srcp,u16 *dstp) +static asm void SVC_DiffUnFilter16_16_2( u16 *pSrc, u16 *pDst ) { swi 24 bx lr @@ -144,25 +159,25 @@ static asm void SVC_DiffUnFilter16_16_2(u16 *srcp,u16 *dstp) // ============================================================================ // バイトアクセス可能メモリ用アクセスルーチン群 // ============================================================================ -static s32 MEMBm_InitFunc(const u8 *devicep, void *ramp, const void *paramp) +static s32 MEMBm_InitFunc( const u8 *pDevice, void *pRAM, const void *pParam ) { - #pragma unused(ramp) - if(paramp) return (s32)MEMBm_WordStreamFunc(devicep); + #pragma unused(pRAM) + if(pParam) return (s32)MEMBm_WordStreamFunc(pDevice); else return 0; } -static s32 MEMBm_TerminateFunc(const u8 *devicep) +static s32 MEMBm_TerminateFunc( const u8 *pDevice ) { - #pragma unused(devicep) + #pragma unused(pDevice) return 0; } -static u8 MEMBm_ByteStreamFunc(const u8 *devicep) +static u8 MEMBm_ByteStreamFunc( const u8 *pDevice ) { - return *devicep; + return *pDevice; } -static u32 MEMBm_WordStreamFunc(const u8 *devicep) +static u32 MEMBm_WordStreamFunc( const u8 *pDevice ) { - return *(u32 *)devicep; + return *(u32 *)pDevice; } diff --git a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c index 9453c61a..dfa6fa2e 100644 --- a/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c +++ b/build/libraries_sysmenu/sysmenu/ARM9/src/sysmenu_lib.c @@ -56,12 +56,12 @@ NitroConfigData *ncdp; // // static variable------------------------------------------------------------- static BOOL s_isBanner = FALSE; -static BannerFile s_bannerBuf; +static NTRBannerFile s_bannerBuf; static NAMTitleId old_titleIdArray[ LAUNCHER_TITLE_LIST_NUM ]; // const data------------------------------------------------------------------ -static BannerCheckParam s_bannerCheckList[ BNR_VER_MAX ] = { +static BannerCheckParam s_bannerCheckList[ NTR_BNR_VER_MAX ] = { { (u8 *)&s_bannerBuf.v1, sizeof( BannerFileV1 ) }, { (u8 *)&s_bannerBuf.v2, sizeof( BannerFileV2 ) }, { (u8 *)&s_bannerBuf.v3, sizeof( BannerFileV3 ) }, @@ -181,7 +181,7 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size) int l; int gotten; NAMTitleId titleIdArray[ LAUNCHER_TITLE_LIST_NUM ]; - static BannerFile bannerBuf[ LAUNCHER_TITLE_LIST_NUM ]; + static TWLBannerFile bannerBuf[ LAUNCHER_TITLE_LIST_NUM ]; gotten = NAM_GetTitleList(titleIdArray, LAUNCHER_TITLE_LIST_NUM ); // バナーの読み込み……別の関数に移すべきかも。 @@ -238,8 +238,8 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size) FS_CloseFile(file); return -1; } - readLen = ReadFile(file, &bannerBuf[l], (s32)sizeof(BannerFile)); - if( readLen != (s32)sizeof(BannerFile) ) + readLen = ReadFile(file, &bannerBuf[l], (s32)sizeof(TWLBannerFile)); + if( readLen != (s32)sizeof(TWLBannerFile) ) { OS_TPrintf("SYSM_GetNandTitleList failed: cant read file2\n"); FS_CloseFile(file); @@ -457,7 +457,7 @@ static BOOL SYSMi_IsDebuggerBannerViewMode( void ) #ifdef __IS_DEBUGGER_BUILD return ( GetSYSMWork()->isOnDebugger && SYSMi_ExistCard() && - GetRomHeaderAddr()->dbgRomSize == 0 ) ? TRUE : FALSE; + SYSM_GetCardRomHeader()->dbgRomSize == 0 ) ? TRUE : FALSE; #else return FALSE; #endif // __IS_DEBUGGER_BUILD @@ -468,7 +468,7 @@ static BOOL SYSMi_IsDebuggerBannerViewMode( void ) static void SYSMi_ReadCardBannerFile( void ) { s32 lockCardID; - BannerFile *pBanner = &s_bannerBuf; + NTRBannerFile *pBanner = &s_bannerBuf; if( ( !SYSMi_ExistCard() ) || ( *(void** )BANNER_ROM_OFFSET == NULL ) ) { s_isBanner = FALSE; @@ -478,8 +478,8 @@ static void SYSMi_ReadCardBannerFile( void ) // ROMカードからのバナーデータのリード if ( ( lockCardID = OS_GetLockID() ) > 0 ) { ( void )OS_LockCard( (u16 )lockCardID ); - DC_FlushRange( pBanner, sizeof(BannerFile) ); - SYSM_ReadCard(*(void** )BANNER_ROM_OFFSET, pBanner, sizeof(BannerFile) ); + DC_FlushRange( pBanner, sizeof(NTRBannerFile) ); + SYSM_ReadCard(*(void** )BANNER_ROM_OFFSET, pBanner, sizeof(NTRBannerFile) ); ( void )OS_UnLockCard( (u16 )lockCardID ); OS_ReleaseLockID( (u16 )lockCardID ); } @@ -493,7 +493,7 @@ static void SYSMi_ReadCardBannerFile( void ) s_isBanner = TRUE; - for( i = 0; i < BNR_VER_MAX; i++ ) { + for( i = 0; i < NTR_BNR_VER_MAX; i++ ) { if( i < pBanner->h.version ) { calc_crc = SVC_GetCRC16( calc_crc, chkp->srcp, chkp->size ); if( calc_crc != *hd_crcp++ ) { @@ -506,7 +506,7 @@ static void SYSMi_ReadCardBannerFile( void ) chkp++; } if( !s_isBanner ) { - MI_CpuClear16( &s_bannerBuf, sizeof(BannerFile) ); + MI_CpuClear16( &s_bannerBuf, sizeof(NTRBannerFile) ); } } } @@ -553,8 +553,8 @@ static void SYSMi_WriteAdjustRTC( void ) // NTR,TWLカード存在チェック 「リターン 1:カード認識 0:カードなし」 static int SYSMi_ExistCard( void ) { - if( ( GetRomHeaderAddr()->nintendo_logo_crc16 == 0xcf56 ) && - ( GetRomHeaderAddr()->header_crc16 == GetSYSMWork()->cardHeaderCrc16) ) { + if( ( SYSM_GetCardRomHeader()->nintendo_logo_crc16 == 0xcf56 ) && + ( SYSM_GetCardRomHeader()->header_crc16 == GetSYSMWork()->cardHeaderCrc16) ) { return TRUE; // NTR,TWLカードあり(NintendoロゴCRC、カードヘッダCRCが正しい場合) // ※Nintendoロゴデータのチェックは、特許の都合上、ロゴ表示ルーチン起動後に行います。 }else { @@ -588,29 +588,16 @@ void SYSM_SetBackLightBrightness( void ) // 各種チェック //====================================================================== -// Nintendoロゴチェック 「リターン 1:Nintendoロゴ認識成功 0:失敗」 -BOOL SYSM_CheckNintendoLogo(u16 *logo_cardp) -{ - u16 *logo_orgp = (u16 *)SYSROM9_NINLOGO_ADR; // ARM9のシステムROMのロゴデータとカートリッジ内のものを比較 - u16 length = NINTENDO_LOGO_LENGTH >> 1; - - while(length--) { - if(*logo_orgp++ != *logo_cardp++) return FALSE; - } - return TRUE; -} - - // エントリアドレスの正当性チェック static BOOL SYSMi_CheckEntryAddress( void ) { // エントリアドレスがROM内登録エリアかAGBカートリッジエリアなら、無限ループに入る。 - if( !( ( (u32)GetRomHeaderAddr()->main_entry_address >= HW_MAIN_MEM ) - && ( (u32)GetRomHeaderAddr()->main_entry_address < SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT ) ) - || !( ( ( (u32)GetRomHeaderAddr()->sub_entry_address >= HW_MAIN_MEM ) - && ( (u32)GetRomHeaderAddr()->sub_entry_address < SYSM_ARM7_LOAD_MMEM_LAST_ADDR ) ) - || ( ( (u32)GetRomHeaderAddr()->sub_entry_address >= HW_WRAM ) - && ( (u32)GetRomHeaderAddr()->sub_entry_address < SYSM_ARM7_LOAD_WRAM_LAST_ADDR ) ) ) ) + if( !( ( (u32)SYSM_GetCardRomHeader()->main_entry_address >= HW_MAIN_MEM ) + && ( (u32)SYSM_GetCardRomHeader()->main_entry_address < SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT ) ) + || !( ( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_MAIN_MEM ) + && ( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_MMEM_LAST_ADDR ) ) + || ( ( (u32)SYSM_GetCardRomHeader()->sub_entry_address >= HW_WRAM ) + && ( (u32)SYSM_GetCardRomHeader()->sub_entry_address < SYSM_ARM7_LOAD_WRAM_LAST_ADDR ) ) ) ) { OS_TPrintf("entry address invalid.\n"); #ifdef __DEBUG_SECURITY_CODE @@ -628,7 +615,7 @@ static void SYSMi_CheckCardCloneBoot( void ) { s32 lockCardID; u8 *buffp = (u8 *)&s_bannerBuf; // バナー用バッファをテンポラリとして使用 - u32 total_rom_size = GetRomHeaderAddr()->total_rom_size ? GetRomHeaderAddr()->total_rom_size : 0x01000000; + u32 total_rom_size = SYSM_GetCardRomHeader()->rom_valid_size ? SYSM_GetCardRomHeader()->rom_valid_size : 0x01000000; u32 file_offset = total_rom_size & 0xFFFFFE00; if( !SYSMi_ExistCard() ) { diff --git a/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c b/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c index 13d9abb4..34796a76 100644 --- a/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c +++ b/build/systemMenu_RED/DS_DownloadPlay/ARM9/src/DS_DownloadPlay.c @@ -665,7 +665,7 @@ static int SEQ_DSDL_Download(void) // 親機からのブート要求受信により、起動可否チェックを行う。(Nintendoロゴ表示&チェック) case PSEQ_BOOT_READY: if( DispNintendoLogo() ) { - if( SYSM_CheckNinLogo( (u16 *)GetRomHeaderAddr()->nintendo_logo ) ) { + if( SYSM_CheckNinLogo( (u16 *)SYSM_GetCardRomHeader()->nintendo_logo ) ) { prgSeq = PSEQ_BOOT_START; }else { SetDispMessage( RED, (const u8 *)"Illegal game data."); @@ -1352,7 +1352,7 @@ static void InitDispNintendoLogo( void ) #ifdef NINLOGO_LOAD_1D_CHAR // 1Dマッピングでのロード&表示 GX_SetOBJVRamModeChar( GX_OBJVRAMMODE_CHAR_1D_32K ); - SYSM_LoadNintendoLogo1D( (u16 *)GetRomHeaderAddr()->nintendo_logo, (u16 *)( HW_OBJ_VRAM + 0x40 ), 1, ninLogoBuff ); + SYSM_LoadNintendoLogo1D( (u16 *)SYSM_GetCardRomHeader()->nintendo_logo, (u16 *)( HW_OBJ_VRAM + 0x40 ), 1, ninLogoBuff ); // SYSM_LoadNintendoLogo1D( (u16 *)SYSROM9_NINLOGO_ADR, (u16 *)( HW_OBJ_VRAM + 0x40 ), 1, ninLogoBuff ); for ( i = 0; i < 3; i++ ) { @@ -1414,7 +1414,7 @@ static void InitDispNintendoLogo( void ) #else // 2Dマッピングでのロード&表示 GX_SetOBJVRamModeChar( GX_OBJVRAMMODE_CHAR_2D ); - SYSM_LoadNintendoLogo2D( (u16 *)GetRomHeaderAddr()->nintendo_logo, (u16 *)( HW_OBJ_VRAM + 0x40 ), 1, ninLogoBuff ); + SYSM_LoadNintendoLogo2D( (u16 *)SYSM_GetCardRomHeader()->nintendo_logo, (u16 *)( HW_OBJ_VRAM + 0x40 ), 1, ninLogoBuff ); // SYSM_LoadNintendoLogo2D( (u16 *)SYSROM9_NINLOGO_ADR, (u16 *)( HW_OBJ_VRAM + 0x40 ), 1, ninLogoBuff ); for ( i = 0; i < 4; i++ ) { diff --git a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c index 510b5d3a..8f630d19 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/launcher.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/launcher.c @@ -62,17 +62,17 @@ static const u16 *const str_backlight[] = { #define DBGBNR #ifdef DBGBNR -static BannerFile *empty_banner; -static BannerFile *nobanner_banner; -static BannerFile *card_banner; -static BannerFile *download_banner; +static NTRBannerFile *empty_banner; +static NTRBannerFile *nobanner_banner; +static NTRBannerFile *card_banner; +static NTRBannerFile *download_banner; 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[ LAUNCHER_TITLE_LIST_NUM ]; static int banner_count = 0; -static void LoadBannerFiles() +static void LoadNTRBannerFiles() { // ファイル読み込み部分。多分emptyバナーだけ読み込む事になる。本来、アプリ系は外部から取得 // 最後に解放しないと駄目。だが、どこで解放すればいいのやら…… @@ -87,10 +87,10 @@ static void LoadBannerFiles() } // パレットの読み込みやOBJ関係の初期化 -static void BannerInit() +static void NTRBannerInit() { int l; - LoadBannerFiles(); + LoadNTRBannerFiles(); MI_CpuClearFast(old_titleIdArray, sizeof(old_titleIdArray) ); MI_DmaFill32(3, banner_oam_attr, 192, sizeof(banner_oam_attr)); // let out of the screen if not display @@ -124,7 +124,7 @@ static void BannerInit() } // 活線挿抜対応のため、毎回VRAMへのイメージデータロード判定をしている -static void BannerDraw(int cursor, int selected, TitleProperty *titleprop) +static void NTRBannerDraw(int cursor, int selected, TitleProperty *titleprop) { static int count = 0; @@ -168,7 +168,7 @@ static void BannerDraw(int cursor, int selected, TitleProperty *titleprop) for(l=0;lv1.image; + u8 *pban=((NTRBannerFile *)titleprop[l].pBanner)->v1.image; for(m=0;mv1.gameName[ TSD_GetLanguage() ]; + NNSG2dChar *str = ((NTRBannerFile *)titleprop[selected].pBanner)->v1.comment[ TSD_GetLanguage() ]; int width = NNS_G2dTextCanvasGetStringWidth(&gTextCanvas, str, NULL); PutStringUTF16( (256-width)/2, 48, TXT_COLOR_BLACK, str ); } @@ -274,7 +274,7 @@ void LauncherInit( TitleProperty *pTitleList ) GXS_DispOn(); #ifdef DBGBNR - BannerInit(); + NTRBannerInit(); #endif } @@ -334,7 +334,7 @@ TitleProperty *LauncherMain( TitleProperty *pTitleList ) } #ifdef DBGBNR - BannerDraw( s_csr, selected, pTitleList ); + NTRBannerDraw( s_csr, selected, pTitleList ); #endif if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐 diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index ffac2f23..9ad50602 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -34,7 +34,6 @@ static void INTR_VBlank( void ); NNSFndAllocator g_allocator; // static variable------------------------------------------------------------- -static BannerFile banner; // バナーデータ // const data------------------------------------------------------------------ @@ -79,7 +78,7 @@ void TwlMain( void ) SYSM_Init( Alloc, Free ); // OS_Initの後でコール。 // リセットパラメータの取得-------- - if( SYSM_GetResetParam()->isLogoSkip ) { + if( SYSM_GetResetParam()->flags.isLogoSkip ) { if( SYSM_GetResetParam()->bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動 pBootTitle = (TitleProperty *)SYSM_GetResetParam(); state = AUTHENTICATE; diff --git a/include/firm/gcd/gcd.h b/include/firm/gcd/gcd.h index c9106759..30102608 100644 --- a/include/firm/gcd/gcd.h +++ b/include/firm/gcd/gcd.h @@ -751,7 +751,7 @@ void GCDi_DecryptObjectFileDS( GCDSlot slot ); void GCD_SetInterrupt( GCDSlot slot, u32 romp, void *ramp, s32 size, GCDWork *wp ); -void* GCDi_GetRomHeaderAddr( GCDSlot slot ); +void* GCDi_SYSM_GetCardRomHeader( GCDSlot slot ); extern u32 GCDi_HeaderBuf[2][ GCD_ROM_HEADER_SIZE/sizeof(u32) ]; diff --git a/include/sysmenu.h b/include/sysmenu.h index a9fe2f06..3f365844 100644 --- a/include/sysmenu.h +++ b/include/sysmenu.h @@ -18,12 +18,12 @@ #define SYSMENU_H_ #include +#include -#include #include #include #include -#include +#include #include #include diff --git a/include/sysmenu/banner.h b/include/sysmenu/banner.h index 3479150d..7879d90a 100644 --- a/include/sysmenu/banner.h +++ b/include/sysmenu/banner.h @@ -19,90 +19,13 @@ #define BANNER_H_ #include +#include +#include #ifdef __cplusplus extern "C" { #endif - -#ifndef BANNER_ROM_OFFSET -#define BANNER_ROM_OFFSET (HW_ROM_HEADER_BUF + 0x68) -#endif - -#define BNR_VER_MIN 1 -#define BNR_VER_MAX 3 -#define BNR_HEADER_RSV_SIZE 24 - -#define BNR_CHINESE_SUPPORT_VER 2 -#define BNR_HANGUL_SUPPORT_VER 3 - -typedef enum -{ - BNR_JAPANESE = 0, - BNR_ENGLISH = 1, - BNR_FRENCH = 2, - BNR_GERMAN = 3, - BNR_ITALIAN = 4, - BNR_SPANISH = 5, - BNR_CHINESE = 6, - BNR_HANGUL = 7, - BNR_LANG_NUM -} BannerFileLangIdx; - -#define BNR_LANG_NUM_V1 6 -#define BNR_LANG_NUM_V2 1 -#define BNR_LANG_NUM_V3 1 - - -#define BNR_HEADER_SIZE 32 -#define BNR_VER_OFFSET 0 -#define BNR_V1_CRC16_OFFSET 2 -#define BNR_IMAGE_OFFSET BNR_HEADER_SIZE -#define BNR_IMAGE_SIZE (32 * 32 / (8/4)) -#define BNR_PLTT_OFFSET (BNR_IMAGE_OFFSET + BANNER_IMAGE_SIZE) -#define BNR_PLTT_NUM 16 -#define BNR_PLTT_SIZE (BNR_PLTT_NUM * 2) -#define BNR_LANG_OFFSET (BNR_PLTT_OFFSET + BANNER_PLTT_SIZE) -#define BNR_LANG_LENGTH 128 -#define BNR_LANG_SIZE (BNR_LANG_LENGTH * 2) - -typedef struct -{ - u8 version; - u8 reserved_A; - u16 crc16_v1; - u16 crc16_v2; - u16 crc16_v3; - u8 reserved_B[BNR_HEADER_RSV_SIZE]; -} BannerHeader; - -typedef struct -{ - u8 image[BNR_IMAGE_SIZE]; - GXRgba pltt[BNR_PLTT_NUM]; - - u16 gameName[BNR_LANG_NUM_V1][BNR_LANG_LENGTH]; -} BannerFileV1; - -typedef struct -{ - u16 gameName[BNR_LANG_NUM_V2][BNR_LANG_LENGTH]; -} BannerFileV2; - -typedef struct -{ - u16 gameName[BNR_LANG_NUM_V3][BNR_LANG_LENGTH]; -} BannerFileV3; - -typedef struct -{ - BannerHeader h; - BannerFileV1 v1; - BannerFileV2 v2; - BannerFileV3 v3; -} BannerFile; - - #ifdef __cplusplus } /* extern "C" */ #endif diff --git a/include/sysmenu/banner/common/NTRBanner.h b/include/sysmenu/banner/common/NTRBanner.h new file mode 100644 index 00000000..51af555d --- /dev/null +++ b/include/sysmenu/banner/common/NTRBanner.h @@ -0,0 +1,104 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: NTRBanner.c + + Copyright 2007 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#ifndef NTR_BANNER_H_ +#define NTR_BANNER_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + +#ifndef BANNER_ROM_OFFSET +#define BANNER_ROM_OFFSET ( HW_TWL_ROM_HEADER_BUF + 0x68 ) +#endif + +#define NTR_BNR_VER_MIN 0x01 +#define NTR_BNR_VER_MAX 0x03 +#define BNR_CHINESE_SUPPORT_VER 2 +#define BNR_HANGUL_SUPPORT_VER 3 + +#define BNR_LANG_MAX 16 +#define BNR_LANG_NUM_V1 6 +#define BNR_LANG_NUM_V2 1 +#define BNR_LANG_NUM_V3 1 + +#define BNR_HEADER_SIZE 32 +#define BNR_HEADER_RSV_SIZE 24 +#define BNR_IMAGE_SIZE ( 32 * 32 / (8/4) ) +#define BNR_PLTT_NUM 16 +#define BNR_PLTT_SIZE ( BNR_PLTT_NUM * 2 ) +#define BNR_LANG_LENGTH 128 +#define BNR_LANG_SIZE ( BNR_LANG_LENGTH * 2 ) + + +typedef enum NTRBannerLangCode { + NTR_BNR_JAPANESE = 0, + NTR_BNR_ENGLISH = 1, + NTR_BNR_FRENCH = 2, + NTR_BNR_GERMAN = 3, + NTR_BNR_ITALIAN = 4, + NTR_BNR_SPANISH = 5, + NTR_BNR_CHINESE = 6, + NTR_BNR_HANGUL = 7, + NTR_BNR_LANG_NUM +}NTRBannerLangCode; + + +typedef struct NTRBannerHeader { + u8 version; + u8 reserved_A; + u16 crc16_v1; + u16 crc16_v2; + u16 crc16_v3; + u8 reserved_B[ BNR_HEADER_RSV_SIZE ]; +}NTRBannerHeader; + + +typedef struct BannerFileV1 { + u8 image[ BNR_IMAGE_SIZE ]; + GXRgba pltt [ BNR_PLTT_NUM ]; + u16 comment[ BNR_LANG_NUM_V1 ][ BNR_LANG_LENGTH ]; +}BannerFileV1; + + +typedef struct BannerFileV2{ + u16 comment[ BNR_LANG_NUM_V2 ][ BNR_LANG_LENGTH ]; +}BannerFileV2; + + +typedef struct BannerFileV3{ + u16 comment[ BNR_LANG_NUM_V3 ][ BNR_LANG_LENGTH ]; +}BannerFileV3; + + +typedef struct NTRBannerFile { + NTRBannerHeader h; + BannerFileV1 v1; + BannerFileV2 v2; + BannerFileV3 v3; +}NTRBannerFile; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* NTR_BANNER_H_ */ +#endif diff --git a/include/sysmenu/banner/common/TWLBanner.h b/include/sysmenu/banner/common/TWLBanner.h new file mode 100644 index 00000000..9302de6a --- /dev/null +++ b/include/sysmenu/banner/common/TWLBanner.h @@ -0,0 +1,82 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: TWLBanner.c + + Copyright 2007 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#ifndef TWL_BANNER_H_ +#define TWL_BANNER_H_ + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define TWL_BNR_VER_MIN 0x80 +#define TWL_BNR_VER_MAX 0x80 +#define TWL_BNR_ICON_NUM 8 +#define TWL_BNR_ICON_DISP_FRAME_MAX 60 +#define TWL_BNR_HEADER_RSV_SIZE ( BNR_HEADER_RSV_SIZE - sizeof(BannerAnimeCtrl) ) + + +typedef enum BannerAnimeLoopType { + BNR_ANIME_LOOP_NORMAL = 1, + BNR_ANIME_LOOP_BACK = 2 +}BannerAnimeLoopType; + + +typedef struct BannerAnimeCtrl { + BannerAnimeLoopType loopType; + u8 dispFrameCount[ TWL_BNR_ICON_NUM ]; +}BannerAnimeCtrl; + + +typedef struct TWLBannerHeader { + u8 version; + u8 reserved_A; + u16 crc16_v1; + u16 crc16_v2; + u16 crc16_v3; + u8 reserved_B[ TWL_BNR_HEADER_RSV_SIZE ]; + BannerAnimeCtrl anime; +}TWLBannerHeader; + + +typedef struct BannerIcon { + u8 image[ BNR_IMAGE_SIZE ]; + GXRgba pltt [ BNR_PLTT_NUM ]; +}BannerIcon; + +typedef struct BannerCommentRsv { + u16 comment[ BNR_LANG_MAX - NTR_BNR_LANG_NUM ][ BNR_LANG_LENGTH ]; +}BannerCommentRsv; + +typedef struct TWLBannerFile { + TWLBannerHeader h; + BannerFileV1 v1; + BannerFileV2 v2; + BannerFileV3 v3; + BannerCommentRsv rsv; + BannerIcon icon[ TWL_BNR_ICON_NUM - 1 ]; // 先頭の1個はBannerFileV1内にある。 +}TWLBannerFile; + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* TWL_BANNER_H_ */ +#endif diff --git a/include/sysmenu/boot/common/boot.h b/include/sysmenu/boot/common/boot.h index 252cb37a..a301245c 100644 --- a/include/sysmenu/boot/common/boot.h +++ b/include/sysmenu/boot/common/boot.h @@ -18,6 +18,8 @@ #if !defined(_SYSMENU_BOOT_H_) #define _SYSMENU_BOOT_H_ +#include + #ifdef __cplusplus extern "C" { #endif @@ -25,7 +27,6 @@ extern "C" { /*---------------------------------------------------------------------------* Type definition *---------------------------------------------------------------------------*/ -#define BOOTCORE_ARM7_ADDR 0x0380f100 /*---------------------------------------------------------------------------* functions diff --git a/include/sysmenu/hw/common/mmap.h b/include/sysmenu/hw/common/mmap.h new file mode 100644 index 00000000..9fbe4818 --- /dev/null +++ b/include/sysmenu/hw/common/mmap.h @@ -0,0 +1,42 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: mmap.c + + Copyright 2007 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#ifndef _SYSMENU_MMAP_H_ +#define _SYSMENU_MMAP_H_ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +// define data ------------------------------------ +#define BOOTCORE_ARM9_ADDR 0x02e7fc00 // ARM9最終ブートコードアドレス +#define BOOTCORE_ARM7_ADDR 0x0380f100 // ARM7最終ブートコードアドレス +#define SYSROM9_NINLOGO_ADR 0xffff0020 // ARM9システムROM内の任天堂ロゴ格納アドレス + +#define SYSM_ARM9_LOAD_MMEM_LAST_ADDR 0x02280000 // ロード可能なARM9 staticメインメモリ最終アドレス +#define SYSM_ARM7_LOAD_MMEM_LAST_ADDR 0x023c0000 // ロード可能なARM7 staticメインメモリ最終アドレス +#define SYSM_ARM7_LOAD_WRAM_LAST_ADDR BOOTCORE_ARM7_ADDR // ロード可能なARM7 staticメインメモリ最終アドレス +#define SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT SYSM_ARM9_LOAD_MMEM_LAST_ADDR + +#ifdef __cplusplus +} +#endif + +#endif // _SYSMENU_MMAP_H_ + diff --git a/include/sysmenu/mmap.h b/include/sysmenu/mmap.h deleted file mode 100644 index 9aab1562..00000000 --- a/include/sysmenu/mmap.h +++ /dev/null @@ -1,57 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: mmap.c - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef __MMAP_H__ -#define __MMAP_H__ - -#include - -#ifdef __cplusplus -extern "C" { -#endif - -// define data ------------------------------------ - -#define RETURN_FROM_MAIN_ARM9_FUNCP 0x023fee00 // NITROゲームブート時のARM9最終処理の動作アドレス -#define RETURN_FROM_MAIN_ARM7_FUNCP 0x0380f600 // NITROゲームブート時のARM7最終処理の動作アドレス - -#define SYSM_ADDR_TOP 0x02300000 // SYSMが配置される先頭アドレス -#define SYSM_ADDR_BOTTOM 0x023fe000 // SYSMが配置される最終アドレス - -#define SYSM_ARM9_MMEM_ENTRY_ADDR_LIMIT ( SYSM_ADDR_TOP - 0x80000 ) // 0x02800000 - -#define SYSM_ARM9_LOAD_MMEM_LAST_ADDR ( SYSM_ADDR_TOP - 0x80000 ) // SYSMがロード可能なNITROカード初期ブートコードのメインメモリ最終アドレス -#define SYSM_ARM7_LOAD_MMEM_LAST_ADDR ( SYSM_ADDR_BOTTOM ) // SYSMがロード可能なNITROカード初期ブートコードのメインメモリ最終アドレス -#define SYSM_ARM7_LOAD_WRAM_LAST_ADDR ( RETURN_FROM_MAIN_ARM7_FUNCP & ~0x0fff ) // SYSMがロード可能なNITROカード初期ブートコードのメインメモリ最終アドレス -#define SYSM_ARM7_LOAD_BUF_ADDR ( SYSM_ADDR_TOP - 0x40000 ) // SYSMがNITROカードARM7初期ブートコードのロードを行う際のロードバッファアドレス -#define SYSM_ARM7_LOAD_BUF_SIZE ( SYSM_ADDR_TOP - SYSM_ARM7_LOAD_BUF_ADDR ) // SYSMのNITROカードARM7コードロードバッファサイズ - -#define UNCOMP_TEMP_BUF ( SYSM_ARM7_LOAD_BUF_ADDR ) // 圧縮展開用データ一時格納バッファアドレス -#define UNCOMP_TEMP_BUF_SIZE ( SYSM_ARM7_LOAD_BUF_SIZE ) // 圧縮展開用データ一時格納バッファサイズ - -#define NITRO_CARD_SECURE_SIZE 0x4000 // NITROカードのセキュア領域サイズ(16Kbytes) - -#define SYSROM9_NINLOGO_ADR 0xffff0020 // ARM9システムROM内の任天堂ロゴ格納アドレス -#define AGB_CARTRIDGE_NIN_LOGO_DATA (HW_CTRDG_ROM + 4) // AGBカートリッジのNintendoロゴデータ格納アドレス - - -#ifdef __cplusplus -} -#endif - -#endif // __MMAP_H__ - diff --git a/include/sysmenu/rom_header.h b/include/sysmenu/rom_header.h deleted file mode 100644 index b09e1f21..00000000 --- a/include/sysmenu/rom_header.h +++ /dev/null @@ -1,175 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: rom_header.h - - Copyright 2007 Nintendo. All rights reserved. - - These coded instructions, statements, and computer programs contain - proprietary information of Nintendo of America Inc. and/or Nintendo - Company Ltd., and are protected by Federal copyright law. They may - not be disclosed to third parties or copied or duplicated in any form, - in whole or in part, without the prior written consent of Nintendo. - - $Date:: $ - $Rev$ - $Author$ - *---------------------------------------------------------------------------*/ - -#ifndef _ROM_HEADER_H_ -#define _ROM_HEADER_H_ - -#include - - -#ifdef __cplusplus -extern "C" { -#endif - -#define NINTENDO_LOGO_LENGTH 0x9c // Nintendoロゴデータサイズ - -//---------------------------------------------------------------------- -// ファイルネームテーブル -//---------------------------------------------------------------------- - -typedef struct ROM_FNT{ - char entry_name[FS_FILE_NAME_MAX]; // ファイル名 (終端 \0 は省く) -} ROM_FNT; - -//---------------------------------------------------------------------- -// ファイルアロケーションテーブル -//---------------------------------------------------------------------- -typedef struct { - void *top; // ファイルの先頭 ROM アドレス - void *bottom; // ファイルの最終 ROM アドレス -} ROM_FAT; - -//---------------------------------------------------------------------- -// オーバーレイテーブル -//---------------------------------------------------------------------- -typedef struct { - u32 id; // オーバーレイ ID - void *ram_address; // ロード先頭位置 - u32 ram_size; // ロードサイズ - u32 bss_size; // bss 領域サイズ - void *sinit_init; // static initializer 先頭アドレス - void *sinit_init_end; // static initializer 最終アドレス - u32 file_id; // オーバーレイファイルID - u32 rsv; // 予約。 -} ROM_OVT; - -//---------------------------------------------------------------------- -// ROMヘッダ -//---------------------------------------------------------------------- -typedef struct { - // - // 0x000 System Reserved - // - char title_name[12]; // Soft title name - u32 game_code; // Game code - - u16 maker_code; // Maker code - u8 machine_code; // Machine code - u8 rom_type; // Rom type - u8 rom_size; // Rom size - - u8 agbRomCycle1st; // 1セグのAGBRomアクセスサイクル1st. - u8 agbRomCycle2nd; // 1セグのAGBRomアクセスサイクル2nd. - u8 reserved_A[7]; // System Reserved A ( Set ALL 0 ) - - u8 soft_version; // Soft version - u8 comp_arm9_boot_area:1; // Compress arm9 boot area - u8 comp_arm7_boot_area:1; // Compress arm7 boot area - u8 inspectCard:1; // 検査カードフラグ - u8 disableClearMemoryPad:1; // IPL2メモリパッドクリア・ディセーブルフラグ - u8 enableAgbRomCycle:1; - u8 :2; - u8 disableDetectPullOut:1; // カード抜け検出ディセーブルフラグ - - // - // 0x020 for Static modules (Section:B) - // - // ARM9 - u32 main_rom_offset; // ROM offset - void* main_entry_address; // Entry point - void* main_ram_address; // RAM address - u32 main_size; // Module size - - // ARM7 - u32 sub_rom_offset; // ROM offset - void* sub_entry_address; // Entry point - void* sub_ram_address; // RAM address - u32 sub_size; // Module size - - // - // 0x040 for File Name Table[FNT] (Section:C) - // - ROM_FNT* fnt_offset; // ROM offset - u32 fnt_size; // Table size - - // - // 0x048 for File Allocation Table[FAT] (Section:E) - // - ROM_FAT* fat_offset; // ROM offset - u32 fat_size; // Table size - - // - // 0x050 for Overlay Tables[OVT] (Section:D) - // - // ARM9 - ROM_OVT* main_ovt_offset; // ROM offset - u32 main_ovt_size; // Table size - - // ARM7 - ROM_OVT* sub_ovt_offset; // ROM offset - u32 sub_ovt_size; // Table size - - // 0x060 for ROM control parameter - u32 game_cmd_param; // Game command parameter - u32 secure_cmd_param; // Secure command parameter - - u32 banner_offset; // Banner ROM offset - - u16 secure_area_crc16; // Secure area CRC-16 - u16 secure_cmd_latency; // Secure command latency ((param+2)*256 system cycles) - u8 ctrl_reserved_B[16]; // Ctrl Reserved B (Set 0) - - // 0x080 - 0x0C0 System Reserved - u32 total_rom_size; - u8 reserved_B[60]; // System Reserved B (Set 0) - - // 0x0C0 for NINTENDO logo data - u8 nintendo_logo[ NINTENDO_LOGO_LENGTH ]; // NINTENDO logo data - u16 nintendo_logo_crc16; // CRC-16 - - // 0x15E ROM header CRC-16 - u16 header_crc16; // ROM header CRC-16 - - // - // 0x0160 - 0x0180 System Reserved - // - u32 dbgRomAddr; // デバッガモニタROMアドレス - s32 dbgRomSize; // デバッガモニタROMサイズ - u32 dbgArm9RamAddr; // デバッガモニタARM9-RAMアドレス - u32 dbgArm7RamAddr; // デバッガモニタARM7-RAMアドレス - u8 reserved_C[16]; // Debugger Reserved (Set ALL 0) - -} RomHeader; - - -//---------------------------------------------------------------------- -// ROMヘッダアドレス獲得 -//---------------------------------------------------------------------- - -#define GetRomHeaderAddr() ((RomHeader *)HW_ROM_HEADER_BUF) - -//・ROMヘッダアドレスを獲得します。 - - -#ifdef __cplusplus - -#endif - -#endif // _ROM_HEADER_H_ - - - diff --git a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h index 2714be9f..2e5eb476 100644 --- a/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h +++ b/include/sysmenu/sysmenu_lib/ARM9/sysmenu_api.h @@ -19,7 +19,7 @@ #define __SYSM_LIB_H__ #include -#include +#include #include #include #include @@ -30,21 +30,39 @@ extern "C" { // define data---------------------------------------------------------- +#define CARD_SLOT_NUM 1 // カードスロット数 #define LAUNCHER_TITLE_LIST_NUM 40 // ランチャーのタイトルリスト数 +typedef enum PlatformCode { + PLATFORM_NTR = 0, + PLATFORM_TWL = 1 +}PlatformCode; + + +// タイトル情報フラグ +typedef struct TitleFlags { + u16 platform : 4; + u16 media : 4; + u16 isLogoSkip : 1; + u16 rsv : 7; +}TitleFlags; + + // タイトル情報 typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。 - u64 titleID; // タイトルID + u64 titleID; // タイトルID(TitleID_Hiで起動メディアは判定できる?) void *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。) - u32 rsv; + TitleFlags flags; + u8 rsv[ 2 ]; }TitleProperty; // リセットパラメータ typedef struct ResetParam { u64 bootTitleID; // 起動するタイトルがあるか?あるならそのタイトルID - u32 rsv; - BOOL isLogoSkip; // ロゴデモをスキップするか? + u32 rsv_A; + TitleFlags flags; + u8 rsv_B[ 2 ]; }ResetParam; @@ -63,66 +81,54 @@ extern void *(*SYSM_Alloc)( u32 size ); extern void (*SYSM_Free)( void *ptr ); // function------------------------------------------------------------- -extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); -//extern void SYSM_Init( void ); -extern void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ); -extern BOOL SYSM_IsLogoDemoSkip( void ); -extern void SYSM_CaribrateTP( void ); -extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ); -extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size ); -extern AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle ); -extern void SYSM_Finalize( void ); +// 初期化 +extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。OS_Initの前のへんでコールしてください。 +extern void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ); // SYSM_initで設定した場合は必要なし。 +extern void SYSM_ReadParameters( void ); // 本体設定データ、リセットパラメータなどを取得 -extern BOOL SYSM_ReadTWLSettingsFile( void ); -extern BOOL SYSM_WriteTWLSettingsFile( void ); +// アプリ情報取得 +extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card ); // カードアプリタイトルリストの取得 +extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int size ); // NAND アプリタイトルリストの取得 + +// アプリ起動 +extern AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyをロード&認証してブート + // 成功時は、never return. +// デバイス制御 +extern void SYSM_CaribrateTP( void ); // タッチパネルキャリブレーション +extern void SYSM_SetBackLightBrightness( void ); // バックライトを制御(本体設定データへの値セーブも行う) + +// 状態チェック +extern BOOL SYSM_IsExistCard( void ); // TWL/NTRカードが差さっているか?(アプリは未認証状態) +extern BOOL SYSM_IsInspectCard( void ); // 検査カードが差さっているか? +extern BOOL SYSM_IsTPReadable( void ); // TPリード可能か? +extern BOOL SYSM_IsLogoDemoSkip( void ); // ロゴデモ飛ばし状態か? +extern void SYSM_SetLogoDemoSkip( BOOL skip ); // ロゴデモ飛ばし状態を設定する。 + +// 本体設定データアクセス +extern BOOL SYSM_ReadTWLSettingsFile( void ); // TWL設定データのリード +extern BOOL SYSM_WriteTWLSettingsFile( void ); // TWL設定データのライト extern void SYSM_VerifyAndRecoveryNTRSettings( void ); -extern void SYSM_SetBackLightBrightness( void ); + +// Nintendoロゴ制御 +extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendoロゴデータのチェック +extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ); // NintendoロゴデータをOBJ_2D形式でロード(pTempBufferには0x700bytes必要) +extern void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, u16 color, u32 *pTempBuffer ); // NintendoロゴデータをOBJ_1D形式でロード(同上) + +// RTC制御 +extern BOOL SYSM_CheckRTCDate( RTCDate *pDate ); // 日付が正常かチェック +extern BOOL SYSM_CheckRTCTime( RTCTime *pTime ); // 時刻が正常かチェック +extern s64 SYSM_CalcRTCOffsetAndSetDateTime( RTCDate *pNewDate, RTCTime *pNewTime ); // RTCオフセット計算とRTCへの日付時刻チェックを行う +extern u32 SYSM_GetDayNum( u32 year, u32 month ); // 指定された年・月の日数を取得する +extern BOOL SYSM_IsLeapYear100( u32 year ); // 指定された年がうるう年か調べる -extern void SYSM_PermitToBootSelectedTarget( void ); -extern void SYSM_LoadSYSMData( void ); -extern BOOL SYSM_BootNITRO( void ); -extern void SYSM_BootPictChat( void ); -extern void SYSM_BootDSDownloadPlay( void ); -extern void SYSM_BootMachineSetting( void ); - -extern BOOL SYSM_ReadBannerFile( BannerFile *banner ); -extern BOOL SYSM_IsTPReadable( void ); - -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 ); // 同上。 - -extern void SYSM_SetBootFlag( u32 value ); -extern void SYSM_ClearBootFlag( u32 value ); - - -extern void SYSM_GoSleepMode( void ); - - -extern void NCD_ClearOwnerInfo( void ); // ニックネーム・誕生日・好きな色のクリア -extern BOOL SYSM_CheckRTCDate( RTCDate *datep ); -extern BOOL SYSM_CheckRTCTime( RTCTime *timep ); -extern s64 SYSM_CalcRTCOffsetAndSetDateTime( RTCDate *newDate, RTCTime *newTime ); -extern u32 SYSM_GetDayNum( u32 year, u32 month ); -extern BOOL SYSM_IsLeapYear100( u32 year ); - -// ※以下の関数は、SYSM_Mainがコールされた後に正しい値が取得できるようになります。 - -// NITROカードが差さっているか? -static inline BOOL SYSM_IsNITROCard( void ) +void SYSM_GoSleepMode( void ); +inline BOOL SYSM_IsNITROCard( void ) { - return (SYSM_GetBootFlag() & BFLG_EXIST_NITRO_CARD) ? TRUE : FALSE; + return TRUE; } -// 検査用NITROカードが差さっているか? -static inline BOOL SYSM_IsInspectNITROCard( void ) -{ - return ( (SYSM_IsNITROCard()) && (GetRomHeaderAddr()->inspectCard) ); -} - - #ifdef __cplusplus } #endif diff --git a/include/sysmenu/sysmenu_work.h b/include/sysmenu/sysmenu_work.h index 593f66ad..579e5817 100644 --- a/include/sysmenu/sysmenu_work.h +++ b/include/sysmenu/sysmenu_work.h @@ -193,6 +193,13 @@ typedef struct SYSM_work{ //・bootFlag値を獲得します。 +inline void SYSM_SetBootFlag( u32 flag ) +{ +#pragma unused( flag ) +} + +// カードROMヘッダワークの取得 +#define SYSM_GetCardRomHeader() ( (ROM_Header_Short *)HW_TWL_ROM_HEADER_BUF ) #ifdef __cplusplus }