diff --git a/build/libraries_sysmenu/sharedFont/ARM9/Makefile b/build/libraries_sysmenu/sharedFont/ARM9/Makefile index 72e94693..9dfc02a6 100644 --- a/build/libraries_sysmenu/sharedFont/ARM9/Makefile +++ b/build/libraries_sysmenu/sharedFont/ARM9/Makefile @@ -24,15 +24,17 @@ TARGET_PLATFORM = TWL TWL_ARCHGEN = LIMITED TWL_PROC = ARM9 -SRCDIR = src -SRCS = sharedFont.c +SRCDIR = $(ROOT)/build/libraries/os/ARM9.TWL/src/ +SRCS = os_sharedFont.c -TARGET_LIB = libsharedfont$(TWL_LIBSUFFIX).a +TARGET_LIB = libsharedfont_launcher$(TWL_LIBSUFFIX).a LINCLUDES += $(SYSMENU_ROOT)/build/libraries_sysmenu/sysmenu/ARM9/include include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs +MACRO_FLAGS += -DUSE_FONT_WRAM_LOAD + INSTALL_TARGETS = $(TARGETS) INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR) diff --git a/build/libraries_sysmenu/sharedFont/ARM9/src/sharedFont.c b/build/libraries_sysmenu/sharedFont/ARM9/src/sharedFont.c deleted file mode 100644 index 5509e34c..00000000 --- a/build/libraries_sysmenu/sharedFont/ARM9/src/sharedFont.c +++ /dev/null @@ -1,318 +0,0 @@ -/*---------------------------------------------------------------------------* - Project: TwlIPL - File: sharedFont.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$ - *---------------------------------------------------------------------------*/ - -#include -#include -#include "fs_wram.h" - -// compile switch-------------------------------------------------------------- -//#define HASH_CHECK_OFF -#define USE_FONT_WRAM_LOAD -// extern data----------------------------------------------------------------- -// define data----------------------------------------------------------------- -#define WRAM_SLOT_FOR_FS 4 -#define WRAM_SIZE_FOR_FS MI_WRAM_SIZE_96KB - -#define SHARED_FONT_TABLE_PATH "nand:/sys/TWLFontTable.dat" -#define SHARED_FONT_FILE_NAME_LENGTH 0x20 -#define SHARED_FONT_SIGN_SIZE 0x80 - -typedef struct SFONTHeader { - u32 timestamp; - u16 fontNum; - u8 pad[ 6 ]; - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; -}SFONTHeader; - -typedef struct SFONTInfo { - u8 fileName[ SHARED_FONT_FILE_NAME_LENGTH ]; - u8 pad[ 4 ]; - u32 offset; - u32 length; - u8 digest[ SVC_SHA1_DIGEST_SIZE ]; -}SFONTInfo; - -typedef struct SFONTWork { - SFONTHeader header; - SFONTInfo *pInfoTable; -}SFONTWork; - -typedef struct CalcSHA1CallbackArg -{ - SVCSHA1Context ctx; - u32 hash_length; -} CalcSHA1CallbackArg; - -// function's prototype------------------------------------------------------- -static void CalcSHA1Callback(const void* addr, const void* orig_addr, u32 len, MIWramPos wram, s32 slot, void* arg); - -// global variable------------------------------------------------------------- -// static variable------------------------------------------------------------- -static SFONTWork s_work; -static BOOL s_isInitialized = FALSE; - -// const data------------------------------------------------------------------ -static const u8 s_sharedFontPubKey[] = { - 0x9f, 0x80, 0xbc, 0x5f, 0xb6, 0xb6, 0x1d, 0x2a, 0x46, 0x02, 0x52, 0x64, 0xb2, 0xa3, 0x86, 0xce, - 0xe6, 0x54, 0xd3, 0xa9, 0x70, 0x5b, 0xe3, 0xc2, 0x10, 0xa9, 0xb5, 0x2f, 0x38, 0xc5, 0x51, 0xfb, - 0xb5, 0xd1, 0x80, 0xfd, 0xff, 0x20, 0x65, 0xc1, 0x28, 0x4d, 0x56, 0xbe, 0xfb, 0xbd, 0x3f, 0xe4, - 0xba, 0xf7, 0x9c, 0x3a, 0x33, 0x74, 0x74, 0x9d, 0xdb, 0xdd, 0x9e, 0x86, 0x05, 0x2c, 0xad, 0xfc, - 0x93, 0xfa, 0xfb, 0x08, 0xea, 0x71, 0x18, 0x36, 0xc5, 0xdc, 0x4c, 0x06, 0x34, 0x57, 0xa7, 0x8f, - 0x4e, 0x82, 0xf7, 0xb3, 0xe2, 0x9c, 0xe4, 0x72, 0xe3, 0xdc, 0x60, 0xaf, 0xcc, 0x18, 0xe2, 0xd4, - 0xef, 0xd2, 0x76, 0x47, 0x31, 0xe6, 0x14, 0x0e, 0x1d, 0x26, 0xb5, 0x85, 0x97, 0xbc, 0xc6, 0xb6, - 0xd8, 0xe7, 0x69, 0x2d, 0x2c, 0x26, 0xfb, 0x5f, 0x70, 0x9e, 0x19, 0x9c, 0x6b, 0x02, 0x6d, 0x97 -}; - -// 共有フォント初期化 -BOOL SFONT_Init( void ) -{ - FSFile file[1]; - u8 signature[ SHARED_FONT_SIGN_SIZE ]; - - if( s_isInitialized ) { - return TRUE; - } - - MI_CpuClear32( &s_work, sizeof(s_work) ); - - if( !FS_OpenFileEx( file, SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - - // 署名リード - if( FS_ReadFile( file, signature, SHARED_FONT_SIGN_SIZE ) != SHARED_FONT_SIGN_SIZE ){ - goto ERROR; - } - - // ヘッダリード - if( FS_ReadFile( file, &s_work.header, sizeof(SFONTHeader) ) != sizeof(SFONTHeader) ){ - goto ERROR; - } - - FS_CloseFile( file ); - -#ifndef HASH_CHECK_OFF - // ヘッダ署名チェック - { - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - u8 sign_digest[ SVC_SHA1_DIGEST_SIZE ]; - static u32 heap[ 4096 / sizeof(u32) ]; - - SVCSignHeapContext acmemoryPool; - SVC_CalcSHA1( calc_digest, &s_work.header, sizeof(SFONTHeader) ); - SVC_InitSignHeap( &acmemoryPool, heap, 4096 ); - if( !SVC_DecryptSign( &acmemoryPool, sign_digest, signature, s_sharedFontPubKey ) ) { - return FALSE; - } - if( !SVC_CompareSHA1( calc_digest, sign_digest ) ) { - return FALSE; - } - } -#endif - -#ifdef USE_FONT_WRAM_LOAD - // WRAM利用Read関数の準備、WRAMCの後半だけ解放しておく - FS_InitWramTransfer(3); - MI_FreeWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); - MI_FreeWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); - MI_FreeWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); - MI_CancelWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM7 ); - MI_CancelWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_ARM9 ); - MI_CancelWramSlot_C( WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, MI_WRAM_DSP ); -#endif // USE_FONT_WRAM_LOAD - - s_isInitialized = TRUE; - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -// 共有フォント テーブルサイズ取得 -int SFONT_GetInfoTableSize( void ) -{ - if( s_isInitialized ) { - return (int)( s_work.header.fontNum * sizeof(SFONTInfo) ); - }else { - return -1; - } -} - - -// 共有フォント テーブルロード -BOOL SFONT_LoadInfoTable( void *pBuffer ) -{ - FSFile file[1]; - u32 tableLen = sizeof(SFONTInfo) * s_work.header.fontNum; - - if( ( !s_isInitialized ) || - ( s_work.header.fontNum == 0 ) || - ( pBuffer == NULL ) || - ( s_work.pInfoTable ) ) { - return FALSE; - } - - // フォントInfoテーブルリード - if( !FS_OpenFileEx( file, SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - if( !FS_SeekFile( file, SHARED_FONT_SIGN_SIZE + sizeof(SFONTHeader), FS_SEEK_SET ) ){ - goto ERROR; - } - if( FS_ReadFile( file, pBuffer, (int)tableLen ) != tableLen ){ - goto ERROR; - } - FS_CloseFile( file ); - -#ifndef HASH_CHECK_OFF - // フォントInfoテーブル ハッシュチェック - { - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - SVC_CalcSHA1( calc_digest, pBuffer, tableLen ); - if( !SVC_CompareSHA1( calc_digest, s_work.header.digest ) ) { - return FALSE; - } - } -#endif - - s_work.pInfoTable = pBuffer; - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -// 共有フォント フォントサイズ取得 -int SFONT_GetFontSize( SFONT_Index index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index >= SHARED_FONT_MAX ) ) { - return -1; - } - - return (int)s_work.pInfoTable[ index ].length; -} - - -// 共有フォント フォントネーム取得 -const u8 *SFONT_GetFontName( SFONT_Index index ) -{ - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index >= SHARED_FONT_MAX ) ) { - return NULL; - } - - return s_work.pInfoTable[ index ].fileName; -} - - -// 共有フォント タイムスタンプ取得 -u32 SFONT_GetFontTimestamp( void ) -{ - if( ( s_isInitialized == NULL ) ) { - return 0; - } - return s_work.header.timestamp; -} - - -// 共有フォント フォントロード -BOOL SFONT_LoadFont( SFONT_Index index, void *pBuffer ) -{ - FSFile file[1]; - SFONTInfo *pInfo = &s_work.pInfoTable[ index ]; - u8 calc_digest[ SVC_SHA1_DIGEST_SIZE ]; - - if( ( s_isInitialized == NULL ) || - ( s_work.pInfoTable == NULL ) || - ( index >= s_work.header.fontNum ) || - ( index >= SHARED_FONT_MAX ) ) { - return FALSE; - } - - // フォント リード - if( !FS_OpenFileEx( file, SHARED_FONT_TABLE_PATH, FS_FILEMODE_R ) ) { - return FALSE; - } - if( !FS_SeekFile( file, (int)pInfo->offset, FS_SEEK_SET ) ){ - goto ERROR; - } -#ifdef USE_FONT_WRAM_LOAD - { - CalcSHA1CallbackArg arg; - SVC_SHA1Init( &arg.ctx ); - arg.hash_length = pInfo->length; - if( !FS_ReadFileViaWram( file, pBuffer, (s32)MATH_ROUNDUP( pInfo->length, 0x20 ), MI_WRAM_C, - WRAM_SLOT_FOR_FS, WRAM_SIZE_FOR_FS, -#ifndef HASH_CHECK_OFF - CalcSHA1Callback, -#else - NULL, -#endif // HASH_CHECK_OFF - &arg ) ) { - goto ERROR; - } - SVC_SHA1GetHash( &arg.ctx, &calc_digest ); - } -#else - if( FS_ReadFile( file, pBuffer, (int)pInfo->length ) != pInfo->length ){ - goto ERROR; - } -#ifndef HASH_CHECK_OFF - SVC_CalcSHA1( calc_digest, pBuffer, pInfo->length ); -#endif // HASH_CHECK_OFF -#endif // USE_FONT_WRAM_LOAD - - FS_CloseFile( file ); - -#ifndef HASH_CHECK_OFF - // フォント ハッシュチェック - if( !SVC_CompareSHA1( calc_digest, pInfo->digest ) ) { - return FALSE; - } -#endif // HASH_CHECK_OFF - - return TRUE; - -ERROR: - FS_CloseFile( file ); - return FALSE; -} - - -#ifdef USE_FONT_WRAM_LOAD -// FS-WRAM転送時のSHA1計算コールバック -static void CalcSHA1Callback(const void* addr, const void* orig_addr, u32 len, MIWramPos wram, s32 slot, void* arg) -{ -#pragma unused(orig_addr) -#pragma unused(wram) -#pragma unused(slot) - CalcSHA1CallbackArg *cba = (CalcSHA1CallbackArg *)arg; - u32 calc_len = ( cba->hash_length < len ? cba->hash_length : len ); - if( calc_len == 0 ) return; - cba->hash_length -= calc_len; - SVC_SHA1Update( &cba->ctx, addr, calc_len ); -} -#endif // USE_FONT_WRAM_LOAD diff --git a/build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lcf.template b/build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lcf.template new file mode 100644 index 00000000..bdc95bb6 --- /dev/null +++ b/build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lcf.template @@ -0,0 +1,1048 @@ +#--------------------------------------------------------------------------- +# Project: TwlSDK - include +# File: ARM9-TS.lcf.template +# +# 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$ +#--------------------------------------------------------------------------- +MEMORY +{ + (RWX) : ORIGIN = , LENGTH = 0x0 > + + + (RWX) : ORIGIN = , LENGTH = 0x0 >> + + binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> + binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> + + F (RW) : ORIGIN = 0, LENGTH = 0x0 > + F (RW) : ORIGIN = 0, LENGTH = 0x0 > + + (RWXO): ORIGIN = , LENGTH = 0x0 > + + + dummy.MAIN_EX.NITRO (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0 + arena.MAIN.NITRO (RW) : ORIGIN = AFTER(,), LENGTH = 0x0 + arena.MAIN_EX.NITRO (RW) : ORIGIN = AFTER(dummy.MAIN_EX.NITRO,), LENGTH = 0x0 + arena.ITCM (RW) : ORIGIN = AFTER(ITCM,), LENGTH = 0x0 + arena.DTCM (RW) : ORIGIN = AFTER(DTCM,), LENGTH = 0x0 + + check.ITCM (RW) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check + check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check + check.MAIN.NITRO (RW) : ORIGIN = 0x02000000, LENGTH = 0x0f80000 > main.nitro.check + + binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > + + (RWX) : ORIGIN = , LENGTH = 0x0 >> + + binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> + + L (RW) : ORIGIN = 0, LENGTH = 0x0 > + L (RW) : ORIGIN = 0, LENGTH = 0x0 > + + (RWXO): ORIGIN = , LENGTH = 0x0 > + + + dummy.MAIN_EX.TWL (RW) : ORIGIN = 0x0d000000, LENGTH = 0x0 + arena.MAIN.TWL (RW) : ORIGIN = AFTER(,,LTDMAIN,), LENGTH = 0x0 + arena.MAIN_EX.TWL (RW) : ORIGIN = AFTER(dummy.MAIN_EX.TWL,,,LTDMAIN,), LENGTH = 0x0 + + check.MAIN.TWL (RW) : ORIGIN = 0x02000000, LENGTH = 0x0f80000 > main.twl.check + + binary.MODULE_FILES (RW) : ORIGIN = 0, LENGTH = 0x0 > component.files +} + +FORCE_ACTIVE +{ + SVC_SoftReset +} + +KEEP_SECTION +{ + .sinit +} + +SECTIONS +{ + ############################ STATIC ################################# + .: + { + ALIGNALL(4); + . = ALIGN(32); # Fit to cache line + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # TEXT BLOCK: READ ONLY + # + SDK_STATIC_START =.; + SDK_STATIC_TEXT_START =.; + #:::::::::: text/rodata + libsyscall.a (.text) + OBJECT(_start,*) + crt0.FLX.TWL.o (.text) + crt0.FLX.TWL.o (.rodata) + # + # .version セクションを追加しています。 + # このセクションに含まれる情報はロットチェックの際に + # 必要となりますので、必ずこの位置に残すようにして下さい。 + # + * (.version) + OBJECT(TwlMain,*) + + + + + + + * (.exception) + . = ALIGN(4); + SDK_STATIC_ETABLE_START =.; + __exception_table_start__ =.; + EXCEPTION + __exception_table_end__ =.; + SDK_STATIC_ETABLE_END =.; + + + + + + + + + + + + + . = ALIGN(4); + SDK_STATIC_SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_STATIC_SINIT_END =.; + #:::::::::: text/rodata + SDK_STATIC_TEXT_END =.; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(32); # Fit to cache line + SDK_STATIC_DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + . = ALIGN(4); + + SDK_LTDOVERLAYTABLE_DIGEST =.; + . = . + 20; + SDK_LTDOVERLAYTABLE_DIGEST_END =.; + SDK_OVERLAYTABLE_DIGEST =.; + . = . + 20; + SDK_OVERLAYTABLE_DIGEST_END =.; + SDK_OVERLAY_DIGEST =.; + . = . + * 20; + . = . + * 20; + SDK_OVERLAY_DIGEST_END =.; + #:::::::::: data + . = ALIGN(32); + SDK_STATIC_DATA_END =.; + SDK_STATIC_END =.; + + SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; + SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; + SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; + __sinit__ = SDK_STATIC_SINIT_START; # for static initializer + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(32); # Fit to cache line + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_STATIC_BSS_START =.; + #:::::::::: bss + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(32); + SDK_STATIC_BSS_END = .; + + SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; + + } >> + + + ############################ AUTOLOADS ############################## + SDK_AUTOLOAD.ITCM.START = 0x01ff8000; + SDK_AUTOLOAD.ITCM.END = SDK_AUTOLOAD.ITCM.START; + SDK_AUTOLOAD.ITCM.BSS_END = SDK_AUTOLOAD.ITCM.START; + SDK_AUTOLOAD.ITCM.SIZE = 0; + SDK_AUTOLOAD.ITCM.BSS_SIZE = 0; + SDK_AUTOLOAD.DTCM.START = 0x02fe0000; + SDK_AUTOLOAD.DTCM.END = SDK_AUTOLOAD.DTCM.START; + SDK_AUTOLOAD.DTCM.BSS_END = SDK_AUTOLOAD.DTCM.START; + SDK_AUTOLOAD.DTCM.SIZE = 0; + SDK_AUTOLOAD.DTCM.BSS_SIZE = 0; + SDK_AUTOLOAD_START = SDK_STATIC_END; + SDK_AUTOLOAD_SIZE = 0; + SDK_AUTOLOAD_NUMBER = ; + + + .: + { + ALIGNALL(4); + . = ALIGN(32); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # TEXT BLOCK: READ ONLY + # + SDK_AUTOLOAD__ID =; + SDK_AUTOLOAD..ID =; + SDK_AUTOLOAD..START =.; + SDK_AUTOLOAD..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_AUTOLOAD..SINIT_START = .; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_AUTOLOAD..SINIT_END = .; + #:::::::::: text/rodata + SDK_AUTOLOAD..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE BLOCK + # + . = ALIGN(32); + SDK_AUTOLOAD..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + + + + + + + + + + + + + #:::::::::: data + SDK_AUTOLOAD..DATA_END =.; + . = ALIGN(32); + SDK_AUTOLOAD..END =.; + + SDK_AUTOLOAD..TEXT_SIZE = SDK_AUTOLOAD..TEXT_END - SDK_AUTOLOAD..TEXT_START; + SDK_AUTOLOAD..DATA_SIZE = SDK_AUTOLOAD..DATA_END - SDK_AUTOLOAD..DATA_START; + SDK_AUTOLOAD..SIZE = SDK_AUTOLOAD..END - SDK_AUTOLOAD..START; + SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD..SIZE; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(32); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL + + + # + # BSS BLOCK + # + SDK_AUTOLOAD..BSS_START = .; + #:::::::::: bss + + + + + + + + + + + + + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(32); + SDK_AUTOLOAD..BSS_END = .; + + SDK_AUTOLOAD..BSS_SIZE = SDK_AUTOLOAD..BSS_END - SDK_AUTOLOAD..BSS_START; + + } >> + + + + SDK_AUTOLOAD_ITCM_START = SDK_AUTOLOAD.ITCM.START; + SDK_AUTOLOAD_ITCM_END = SDK_AUTOLOAD.ITCM.END; + SDK_AUTOLOAD_ITCM_BSS_END = SDK_AUTOLOAD.ITCM.BSS_END; + SDK_AUTOLOAD_ITCM_SIZE = SDK_AUTOLOAD.ITCM.SIZE; + SDK_AUTOLOAD_ITCM_BSS_SIZE = SDK_AUTOLOAD.ITCM.BSS_SIZE; + SDK_AUTOLOAD_DTCM_START = SDK_AUTOLOAD.DTCM.START; + SDK_AUTOLOAD_DTCM_END = SDK_AUTOLOAD.DTCM.END; + SDK_AUTOLOAD_DTCM_BSS_END = SDK_AUTOLOAD.DTCM.BSS_END; + SDK_AUTOLOAD_DTCM_SIZE = SDK_AUTOLOAD.DTCM.SIZE; + SDK_AUTOLOAD_DTCM_BSS_SIZE = SDK_AUTOLOAD.DTCM.BSS_SIZE; + + ############################ AUTOLOAD_INFO ########################## + .binary.AUTOLOAD_INFO: + { + + WRITEW ADDR(.); + WRITEW SDK_AUTOLOAD..SIZE; + WRITEW SDK_AUTOLOAD..SINIT_START; + WRITEW SDK_AUTOLOAD..BSS_SIZE; + + + } > binary.AUTOLOAD_INFO + + SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; + SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); + SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); + + ############################ STATIC_FOOTER ########################## + .binary.STATIC_FOOTER: + { + WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE + WRITEW _start_ModuleParams - ADDR(.); + WRITEW SDK_OVERLAY_DIGEST - ADDR(.); + WRITEW _start_LtdModuleParams - ADDR(.); + } > binary.STATIC_FOOTER + + ############################ OVERLAYS ############################### + SDK_OVERLAY_NUMBER = ; + + + .: + { + ALIGNALL(4); + . = ALIGN(32); # Fit to cache line + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # TEXT BLOCK: READ ONLY + # + SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID + SDK_OVERLAY..ID =; + SDK_OVERLAY..START =.; + SDK_OVERLAY..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_OVERLAY..SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_OVERLAY..SINIT_END =.; + #:::::::::: text/rodata + SDK_OVERLAY..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(32); + SDK_OVERLAY..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + #:::::::::: data + SDK_OVERLAY..DATA_END =.; + . = ALIGN(32); + SDK_OVERLAY..END =.; + + SDK_OVERLAY..TEXT_SIZE = SDK_OVERLAY..TEXT_END - SDK_OVERLAY..TEXT_START; + SDK_OVERLAY..DATA_SIZE = SDK_OVERLAY..DATA_END - SDK_OVERLAY..DATA_START; + SDK_OVERLAY..SIZE = SDK_OVERLAY..END - SDK_OVERLAY..START; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(32); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_OVERLAY..BSS_START = .; + #:::::::::: bss + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(32); + SDK_OVERLAY..BSS_END = .; + + SDK_OVERLAY..BSS_SIZE = SDK_OVERLAY..BSS_END - SDK_OVERLAY..BSS_START; + + } >> + + + + ############################ OVERLAYDEFS ############################ + .F: + { + ### module information + WRITEW ADDR(.); # load address + WRITEW _start; # entry address + WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module + WRITEW _start_AutoloadDoneCallback; # callback autoload done + + ### overlay filename + + WRITES (""); # Overlay + + + } > F + + ############################ OVERLAYTABLE ########################### + .F: + { + + WRITEW ; # overlay ID + WRITEW ADDR(.); # load address + WRITEW SDK_OVERLAY..SIZE; # size of module + WRITEW SDK_OVERLAY..BSS_SIZE; # size of bss + WRITEW SDK_OVERLAY..SINIT_START; # start address of static init + WRITEW SDK_OVERLAY..SINIT_END; # end address of static init + WRITEW ; # ROM file ID + WRITEW 0; # compressed state + + + } > F + + ############################ ARENA ################################## + .dummy.MAIN_EX.NITRO: + { + . = ALIGN(32); + + } > dummy.MAIN_EX.NITRO + + .arena.MAIN.NITRO: + { + . = ALIGN(32); + SDK_SECTION_ARENA_START =.; + + } > arena.MAIN.NITRO + + .arena.MAIN_EX.NITRO: + { + . = ALIGN(32); + SDK_SECTION_ARENA_EX_START =.; + + } > arena.MAIN_EX.NITRO + + .arena.ITCM: + { + . = ALIGN(32); + SDK_SECTION_ARENA_ITCM_START =.; + + } > arena.ITCM + + .arena.DTCM: + { + . = ALIGN(32); + SDK_SECTION_ARENA_DTCM_START =.; + + } > arena.DTCM + + ############################ OTHERS ################################# + SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START; + SDK_IRQ_STACKSIZE = ; # allocated in DTCM + SDK_SYS_STACKSIZE = ; # when 0 means all remains of DTCM + SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; + + .check.ITCM: + { + . = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE; + + . = . + SDK_OVERLAY..SIZE + SDK_OVERLAY..BSS_SIZE; + + + } > check.ITCM + + .check.DTCM: + { + . = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE; + + . = . + SDK_OVERLAY..SIZE + SDK_OVERLAY..BSS_SIZE; + + . = . + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; + } > check.DTCM + + .check.MAIN.NITRO: + { + . = SDK_SECTION_ARENA_START; + + } > check.MAIN.NITRO + + ########################### LTDAUTOLOADS ############################ + SDK_LTDAUTOLOAD.LTDMAIN.START = SDK_STATIC_BSS_END; + SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START; + SDK_LTDAUTOLOAD.LTDMAIN.BSS_EDN = SDK_LTDAUTOLOAD.LTDMAIN.START; + SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0; + SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0; + SDK_LTDAUTOLOAD_TOP_START = 0x02400000; + SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC 領域が無い代わりに 4 bytes のダミーがバイナリファイルの先頭に入る # + SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; + SDK_LTDAUTOLOAD_SIZE = 0; + SDK_LTDAUTOLOAD_NUMBER = ; + + .binary.LTDAUTOLOAD_TOP: + { + WRITEW 0; + + } > binary.LTDAUTOLOAD_TOP + + + .: + { + ALIGNALL(4); + . = ALIGN(32); # Fit to cache line + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + SDK_LTDAUTOLOAD__ID =; + SDK_LTDAUTOLOAD..ID =; + SDK_LTDAUTOLOAD..START =.; + # + # TEXT BLOCK: READ ONLY + # + SDK_LTDAUTOLOAD..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_LTDAUTOLOAD..SINIT_START = .; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_LTDAUTOLOAD..SINIT_END = .; + #:::::::::: text/rodata + SDK_LTDAUTOLOAD..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(32); + SDK_LTDAUTOLOAD..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + + + + + + + #:::::::::: data + SDK_LTDAUTOLOAD..DATA_END =.; + . = ALIGN(32); + SDK_LTDAUTOLOAD..END =.; + + SDK_LTDAUTOLOAD..TEXT_SIZE = SDK_LTDAUTOLOAD..TEXT_END - SDK_LTDAUTOLOAD..TEXT_START; + SDK_LTDAUTOLOAD..DATA_SIZE = SDK_LTDAUTOLOAD..DATA_END - SDK_LTDAUTOLOAD..DATA_START; + SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; + SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(32); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_LTDAUTOLOAD..BSS_START =.; + #:::::::::: bss + + + + + + + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(32); + SDK_LTDAUTOLOAD..BSS_END =.; + + SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; + + } >> + + + + SDK_LTDAUTOLOAD_LTDMAIN_START = SDK_LTDAUTOLOAD.LTDMAIN.START; + SDK_LTDAUTOLOAD_LTDMAIN_END = SDK_LTDAUTOLOAD.LTDMAIN.END; + SDK_LTDAUTOLOAD_LTDMAIN_BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; + SDK_LTDAUTOLOAD_LTDMAIN_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.SIZE; + SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE; + + ######################### LTDAUTOLOAD_INFO ########################## + .binary.LTDAUTOLOAD_INFO: + { + + WRITEW ADDR(.); + WRITEW SDK_LTDAUTOLOAD..SIZE; + WRITEW SDK_LTDAUTOLOAD..SINIT_START; + WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; + + + } > binary.LTDAUTOLOAD_INFO + + SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; + SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); + SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); + + ########################### LTDOVERLAYS ############################# + SDK_LTDOVERLAY_NUMBER = ; + + + .: + { + ALIGNALL(4); + . = ALIGN(32); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + SDK_LTDOVERLAY__ID =; + SDK_LTDOVERLAY..ID =; + SDK_LTDOVERLAY..START =.; + # + # TEXT BLOCK: READ ONLY + # + SDK_LTDOVERLAY..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_LTDOVERLAY..SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_LTDOVERLAY..SINIT_END =.; + #:::::::::: text/rodata + SDK_LTDOVERLAY..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(32); + SDK_LTDOVERLAY..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + #:::::::::: data + SDK_LTDOVERLAY..DATA_END =.; + . = ALIGN(32); + SDK_LTDOVERLAY..END =.; + + SDK_LTDOVERLAY..TEXT_SIZE = SDK_LTDOVERLAY..TEXT_END - SDK_LTDOVERLAY..TEXT_START; + SDK_LTDOVERLAY..DATA_SIZE = SDK_LTDOVERLAY..DATA_END - SDK_LTDOVERLAY..DATA_START; + SDK_LTDOVERLAY..SIZE = SDK_LTDOVERLAY..END - SDK_LTDOVERLAY..START; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(32); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_LTDOVERLAY..BSS_START =.; + #:::::::::: bss + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(32); + SDK_LTDOVERLAY..BSS_END =.; + + SDK_LTDOVERLAY..BSS_SIZE = SDK_LTDOVERLAY..BSS_END - SDK_LTDOVERLAY..BSS_START; + + } >> + + + + ########################## LTDOVERLAYDEFS ########################### + .L: + { + ### TWL limited extended static module information + WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address + WRITEW 0; # padding + WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module + WRITEW 0; # padding + + ### TWL limited overlay filename + + WRITES (""); + + + } > L + + ######################### LTDOVERLAYTABLE ########################### + .L: + { + + WRITEW ; # overlay ID + WRITEW ADDR(.); # load address + WRITEW SDK_LTDOVERLAY..SIZE; # size of module + WRITEW SDK_LTDOVERLAY..BSS_SIZE; # size of bss + WRITEW SDK_LTDOVERLAY..SINIT_START; # start address of static init + WRITEW SDK_LTDOVERLAY..SINIT_END; # end address of static init + WRITEW ; # ROM file ID + WRITEW 0; # compressed state + + + } > L + + ############################ ARENA ################################## + .dummy.MAIN_EX.TWL: + { + . = ALIGN(32); + + } > dummy.MAIN_EX.TWL + + .arena.MAIN.TWL: + { + . = ALIGN(32); + SDK_LTDMAIN_ARENA_LO =.; + + } > arena.MAIN.TWL + + .arena.MAIN_EX.TWL: + { + . = ALIGN(32); + SDK_LTDMAIN_EX_ARENA_LO =.; + + } > arena.MAIN_EX.TWL + + .check.MAIN.TWL: + { + . = SDK_LTDMAIN_ARENA_LO; + + } > check.MAIN.TWL + + ############################ OTHERS ################################# + # Module filelist + .binary.MODULE_FILES: + { + WRITES (""); + WRITES (""); + WRITES (""); + WRITES (""); + WRITES (""); + WRITES (""); + + } > binary.MODULE_FILES + +} diff --git a/build/systemMenu_RED/Launcher/ARM9/Makefile b/build/systemMenu_RED/Launcher/ARM9/Makefile index e9a2da7a..7e433f78 100644 --- a/build/systemMenu_RED/Launcher/ARM9/Makefile +++ b/build/systemMenu_RED/Launcher/ARM9/Makefile @@ -69,7 +69,7 @@ TARGET_TAD = $(BINDIR)/$(TITLEID_LO).$(TWL_BUILD_DIR)$(CODEGEN_ARCH).tad TARGET_BIN = main.srl LCFILE_SPEC = ARM9-TS.lsf -#LCFILE_TEMPLATE = ARM9-TS.lcf.template +LCFILE_TEMPLATE = ARM9-TS.lcf.template ROM_SPEC = main.rsf LOGO_DIR = Logo @@ -95,7 +95,7 @@ LLIBRARIES += libes$(TWL_LIBSUFFIX).a \ libsea$(TWL_LIBSUFFIX).a \ libreloc_info$(TWL_LIBSUFFIX).a \ libnamut$(TWL_LIBSUFFIX).a \ - libsharedfont$(TWL_LIBSUFFIX).a \ + libsharedfont_launcher$(TWL_LIBSUFFIX).a \ WDS$(TWL_LIBSUFFIX).a ADDRESS_DTCM = 0x0e000000 @@ -148,6 +148,9 @@ endif include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs include $(TWLSDK_ROOT)/build/libraries/reboot/commondefs.reboot +# ローカルでビルドしたlibsharedfont_launcherを使用するので、SDKのlibsharedfontは除外する。 +GLIBRARIES := $(filter-out libsharedfont$(TWL_LIBSUFFIX).a,$(GLIBRARIES)) + MAKEROM = $(SYSMENU_TOOLSDIR)/bin/makerom.TWL.launcher.exe LDIRT_CLEAN = $(TARGET_TAD) diff --git a/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.c b/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.c index 0808de66..5f5f59a2 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.c @@ -58,13 +58,13 @@ BOOL LoadSharedFontInit( void ) THREAD_STACK_SIZE, FONT_LOAD_THREAD_PRIO); // フォントロード準備 - if( !SFONT_Init() ) { - OS_TPrintf( "SFONT_LoadInfoTable failed.\n" ); + if( !OS_InitSharedFont() ) { + OS_TPrintf( "OS_InitSharedFont failed.\n" ); return FALSE; } - size = SFONT_GetInfoTableSize(); + size = OS_GetSharedFontTableSize(); if( size < 0 ) { - OS_TPrintf( "SFONT_GetInfoTableSize failed.\n" ); + OS_TPrintf( "OS_GetSharedTableSize failed.\n" ); return FALSE; } @@ -73,8 +73,8 @@ BOOL LoadSharedFontInit( void ) OS_TPrintf( "malloc failed.\n" ); return FALSE; } - if( !SFONT_LoadInfoTable( pBuffer ) ) { - OS_TPrintf( "SFONT_LoadInfoTable failed.\n" ); + if( !OS_LoadSharedFontTable( pBuffer ) ) { + OS_TPrintf( "OS_LoadSharedTable failed.\n" ); return FALSE; } @@ -89,16 +89,16 @@ void LoadSharedFontThread( void *arg ) { #pragma unused(arg) BOOL retval = TRUE; - SFONT_Index i; + OSSharedFontIndex i; - for( i = SHARED_FONT_WW_S; i < SHARED_FONT_MAX; i++ ) { + for( i = OS_SHARED_FONT_WW_S; i < OS_SHARED_FONT_MAX; i++ ) { int size; - OS_TPrintf( "%s read.\n", SFONT_GetFontName( i ) ); + OS_TPrintf( "%s read.\n", OS_GetSharedFontName( i ) ); - size = SFONT_GetFontSize( i ); + size = OS_GetSharedFontSize( i ); if( size < 0 ) { - OS_TPrintf( "SFONT_GetFontSize failed.\n" ); + OS_TPrintf( "OS_GetSharedFontSize failed.\n" ); retval = FALSE; break; } @@ -113,8 +113,8 @@ void LoadSharedFontThread( void *arg ) break; } - if( !SFONT_LoadFont( i, s_pFontBuffer[ i ] ) ) { - OS_TPrintf( "SFONT_LoadFont failed.\n" ); + if( !OS_LoadSharedFont( i, s_pFontBuffer[ i ] ) ) { + OS_TPrintf( "OS_LoadSharedFont failed.\n" ); retval = FALSE; break; } diff --git a/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.h b/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.h index 68aae71d..53c6a6ec 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.h +++ b/build/systemMenu_RED/Launcher/ARM9/src/loadSharedFont.h @@ -19,6 +19,7 @@ #define __LOAD_SHARED_FONT_H__ #include +#include #include #ifdef __cplusplus diff --git a/build/systemMenu_RED/Launcher/ARM9/src/main.c b/build/systemMenu_RED/Launcher/ARM9/src/main.c index f971bdb9..98c7ebba 100644 --- a/build/systemMenu_RED/Launcher/ARM9/src/main.c +++ b/build/systemMenu_RED/Launcher/ARM9/src/main.c @@ -162,7 +162,7 @@ void TwlMain( void ) if( !LoadSharedFontInit() ) { // 共有フォントのロード SYSM_SetFatalError( TRUE ); } - timestamp = SFONT_GetFontTimestamp(); + timestamp = OS_GetSharedFontTimestamp(); if( timestamp > 0 ) OS_TPrintf( "SharedFont timestamp : %08x\n", timestamp ); }