Delete include directory

This commit is contained in:
Lillian Skinner 2024-05-03 19:44:46 -04:00 committed by GitHub
parent e6311bfa3e
commit b99406d56b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
97 changed files with 0 additions and 12507 deletions

View File

@ -1,33 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm
File: firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_H_
#define FIRM_H_
#include <twl.h>
#include <firm/memorymap.h>
#include <firm/os.h>
#include <firm/pxi.h>
#include <firm/mi.h>
#include <firm/pm.h>
#include <firm/aes.h>
#include <firm/fatfs.h>
#include <firm/fs.h>
#include <firm/nvram.h>
/* FIRM_H_ */
#endif

View File

@ -1,33 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - ACSIGN
File: acsign.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_ACSIGN_H_
#define FIRM_ACSIGN_H_
#include <firm/../../build/libraries/acsign/include/acsign.h>
#include <firm/../../build/libraries/acsign/include/acsign_mb.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_ACSIGN_H_ */
#endif

View File

@ -1,31 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - include - AES
File: aes.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_AES_H_
#define FIRM_AES_H_
#define PXI_FIFO_TAG_DATA PXI_FIFO_TAG_USER_0
#include <twl/aes/common/types.h>
#ifdef SDK_ARM7
#include <twl/aes/ARM7/hi.h>
#include <twl/aes/ARM7/lo.h>
#include <firm/aes/ARM7/aes_init.h>
#endif // !SDK_ARM7
/* FIRM_AES_H_ */
#endif

View File

@ -1,190 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - AES - include
File: aes_init.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef TWL_AES_AES_INIT_H_
#define TWL_AES_AES_INIT_H_
#include <twl/os/common/format_rom.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
Name: AESi_PreInitKeys
Description: reset IDs preset by bootrom.
you SHOULD NOT touch any ID registers after this call.
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void AESi_PreInitKeys( void );
/*---------------------------------------------------------------------------*
Name: AESi_InitKeysForApp
Description: set IDs depending on the application.
you SHOULD NOT touch any ID registers after this call.
Arguments: game_code game code
Returns: None
*---------------------------------------------------------------------------*/
void AESi_InitKeysForApp( u8 game_code[4] );
/*---------------------------------------------------------------------------*
Name: AESi_InitKeysForHard
Description: set IDs depending on the system hardware.
you SHOULD NOT use this for standard applications.
Arguments: fuse camouflaged fuse id
Returns: None
*---------------------------------------------------------------------------*/
void AESi_InitKeysForHard( u8 fuse[8] );
/*---------------------------------------------------------------------------*
Name: AESi_ResetAesKeyA
Description: set SEED/ID/KEYs filler data for slot-C
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static inline void AESi_ResetAesKeyA( void )
{
AES_Lock();
AES_WaitKey();
MI_CpuCopy32( (u32*)AESi_ResetAesKeyA + 0, (u32*)REG_AES_KEY_A1_ADDR, 40 );
AES_Unlock();
}
/*---------------------------------------------------------------------------*
Name: AESi_ResetAesKeyB
Description: set SEED/ID/KEYs filler data for slot-C
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static inline void AESi_ResetAesKeyB( void )
{
AES_Lock();
AES_WaitKey();
MI_CpuCopy32( (u32*)AESi_ResetAesKeyB + 1, (u32*)REG_AES_KEY_B1_ADDR, 40 );
AES_Unlock();
}
/*---------------------------------------------------------------------------*
Name: AESi_ResetAesKeyB
Description: set SEED/ID/KEYs filler data for slot-C
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static inline void AESi_ResetAesKeyC( void )
{
AES_Lock();
AES_WaitKey();
MI_CpuCopy32( (u32*)AESi_ResetAesKeyC + 2, (u32*)REG_AES_KEY_C1_ADDR, 40 );
AES_Unlock();
}
/*---------------------------------------------------------------------------*
Name: AESi_ResetAesKeyD
Description: set SEED/ID/KEYs filler data for slot-D
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
#if 0 // rebootライブラリに移動.
static inline void AESi_ResetAesKeyD( void )
{
AES_Lock();
AES_WaitKey();
MI_CpuCopy32( (u32*)AESi_ResetAesKeyD + 3, (u32*)REG_AES_KEY_D1_ADDR, 40 );
AES_Unlock();
}
#endif
/*---------------------------------------------------------------------------*
Name: AESi_InitKeysFIRM
Description: set IDs depending on the application.
you SHOULD NOT touch any ID registers after this call.
Arguments: game_code game code
Returns: None
*---------------------------------------------------------------------------*/
static inline void AESi_InitKeysFIRM( void )
{
AESi_InitKeysForApp( (u8*)((ROM_Header_Short*)HW_TWL_ROM_HEADER_BUF)->game_code );
// AESi_ResetAesKeyC();
// AESi_ResetAesKey();
}
/*---------------------------------------------------------------------------*
Name: AESi_InitSeedWithRomHeader
Description: set SEED/KEY from ROM header
Arguments: rom_header ROM header
Returns: None
*---------------------------------------------------------------------------*/
void AESi_InitSeedWithRomHeader( ROM_Header* rom_header );
/*---------------------------------------------------------------------------*
Name: AESi_InitSeedWithRomHeader
Description: set SEED/KEY from ROM header in HW_TWL_ROM_HEADER_BUF
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static inline void AESi_InitSeed( void )
{
AESi_InitSeedWithRomHeader( (ROM_Header*)HW_TWL_ROM_HEADER_BUF );
}
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_AES_AES_INIT_H_ */
#endif

View File

@ -1,30 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fatfs
File: fatfs.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FATFS_H_
#define FIRM_FATFS_H_
#ifdef SDK_ARM7
#include <firm/fatfs/ARM7/fatfs_loader.h>
#include <firm/fatfs/ARM7/fatfs_firm.h>
#else
#include <firm/fatfs/ARM9/fatfs_firm.h>
#endif // SDK_ARM7
/* FIRM_FATFS_H_ */
#endif

View File

@ -1,92 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fatfs
File: fatfs.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FATFS_FATFS_FIRM_H_
#define FIRM_FATFS_FATFS_FIRM_H_
#include <twl/types.h>
#include <twl/aes/ARM7/lo.h>
#include <twl/fatfs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FATFS_EnableAES
Description: enable AES data path
Arguments: counter initial counter value
Returns: None
*---------------------------------------------------------------------------*/
void FATFS_EnableAES( const AESCounter* pCounter );
/*---------------------------------------------------------------------------*
Name: FATFS_DisableAES
Description: bypass AES
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void FATFS_DisableAES( void );
/*---------------------------------------------------------------------------*
Name: FATFS_InitFIRM
Description: init file system
Arguments: nandContext : nand context to omit initialization (if any)
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_InitFIRM( void* nandContext );
/*---------------------------------------------------------------------------*
Name: FATFS_MountDriveFIRM
Description: mount nand partition
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_MountDriveFIRM( int driveno, FATFSMediaType media, int partition_no );
/*---------------------------------------------------------------------------*
Name: FATFS_UnmountDriveFIRM
Description: unmount specified partition
Arguments: driveno drive number "A:" is 0
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_UnmountDriveFIRM( int driveno );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FATFS_FATFS_FIRM_H_ */
#endif

View File

@ -1,175 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fatfs
File: fatfs_loader.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FATFS_FATFS_LOADER_H_
#define FIRM_FATFS_FATFS_LOADER_H_
#include <twl/types.h>
#include <twl/fatfs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FATFS_OpenRecentMenu
Description: open recent menu file
Arguments: driveno drive number ('A' is 0)
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_OpenRecentMenu( int driveno );
/*---------------------------------------------------------------------------*
Name: FATFS_OpenSpecifiedSrl
Description: open specified menu file
Arguments: menufile target filename
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_OpenSpecifiedSrl( const char* menufile );
/*---------------------------------------------------------------------------*
Name: FATFS_SaveSrlFilename
Description: store filename to HW_TWL_FS_BOOT_SRL_PATH_BUF
HW_TWL_FS_BOOT_SRL_PATH_BUFに書き込みます
Arguments: media media type
filename target filename
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_SaveSrlFilename( FATFSMediaType media, const char* filename );
/*---------------------------------------------------------------------------*
Name: FATFS_GetSrlDescriptor
Description: open specified menu file
IDをmenu_fdにセットします
Arguments: None
Returns: int
*---------------------------------------------------------------------------*/
int FATFS_GetSrlDescriptor( void );
/*---------------------------------------------------------------------------*
Name: FATFS_SetSrlDescriptor
Description: set current file descriptor that was opened outside
IDをmenu_fdにセットします
Arguments: None
Returns: int
*---------------------------------------------------------------------------*/
void FATFS_SetSrlDescriptor( int fd );
/*---------------------------------------------------------------------------*
Name: FATFS_LoadBuffer
Description: load data and pass to ARM9 via WRAM[B]
LoadBufferメカニズムでFAT中のファイルの内容をARM9に転送します
[LoadBufferメカニズム]
WRAM[B]ARM7,ARM9間のデータ転送を行います
WRAM[B]
1ARM9へ
FIRM_PXI_ID_LOAD_PIRIODを送信します
2使
使ARM9側に割り当てられているときはARM7側に
[使]
WRAM[B]ARM7側に倒しておくこと
[]
offsetとsizeはARM9に通知されません
SRLファイルを読み込む場合はROMヘッダを参照できれば十分です
(ROMヘッダ部分は元から知っているはず)
:
ARM7/ARM9側で歩調を合わせられることを
()
PXIコールバック
APIがデータをWRAMに格納した後
destとsizeを通知するという形でOKではないか
()
使po_readした方が速い
ARM9からデータ内容を触る予定がないならAPIを使わず
Arguments: offset offset of the file to load (512 bytes alignment)
size size to load
Returns: None
*---------------------------------------------------------------------------*/
BOOL FATFS_LoadBuffer(u32 offset, u32 size);
/*---------------------------------------------------------------------------*
Name: FATFS_LoadHeader
Description: load menu header
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FATFS_LoadHeader( void );
/*---------------------------------------------------------------------------*
Name: FATFS_LoadStatic
Description: load static binary
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FATFS_LoadStatic( void );
/*---------------------------------------------------------------------------*
Name: FATFS_Boot
Description: boot
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void FATFS_Boot( void );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FATFS_FATFS_LOADER_H_ */
#endif

View File

@ -1,44 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fatfs
File: fatfs_firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FATFS_FATFS_FIRM_H_
#define FIRM_FATFS_FATFS_FIRM_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FATFS_InitFIRM
Description: initialize fatfs for firm
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void FATFS_InitFIRM( void );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FATFS_FATFS_FIRM_H_ */
#endif

View File

@ -1,67 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - format - firm
File: firm_common.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FORMAT_FIRM_COMMON_H_
#define FIRM_FORMAT_FIRM_COMMON_H_
#include <firm/format/sign.h>
#include <firm/format/wram_regs.h>
#ifdef __cplusplus
extern "C" {
#endif
// 常駐モジュール情報
typedef struct
{
u32 rom_offset; /* 転送元 ROM オフセット */
u32 decomp_size; /* 展開サイズ */
void *ram_address; /* 転送先 RAM オフセット */
u32 size; /* 転送サイズ */
}
FIRMHeader_ModuleInfo;
// DS-IPL2ヘッダ
typedef struct
{
u16 reserved_0h[4];
u32 ds_key;
u16 ds_arm9_romAdr;
u16 ds_arm9_ramAdr;
u16 ds_arm7_romAdr;
u16 ds_arm7_ramAdr;
u16 ds_arm9_romOffsetUnit:3;
u16 ds_arm9_ramOffsetUnit:3;
u16 ds_arm7_romOffsetUnit:3;
u16 ds_arm7_ramOffsetUnit:3;
u16 :2;
u16 ds_header_ver:2;
u16 ds_data_romAdr;
u64 card_key;
u16 ncd_romAdr;
u16 reserved_24h[2];
u16 ds_data_crc16;
}
NORHeaderDS;
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif // FIRM_FORMAT_FIRM_COMMON_H_

View File

@ -1,103 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - format - from_brom
File: from_brom.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FORMAT_FROM_BROM_H_
#define FIRM_FORMAT_FROM_BROM_H_
#include <firm/gcd/blowfish.h>
#include <firm/format/sign.h>
#include <firm/format/norfirm.h>
#include <firm/format/nandfirm.h>
#include <firm/format/gcdfirm.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
#define RSA_PUBKEY_NUM_FROM_BROM 8
#define AESKEY_NUM_FROM_BROM 8
#else // SDK_ARM7
#define RSA_PUBKEY_NUM_FROM_BROM 4
#define AESKEY_NUM_FROM_BROM 4
#endif // SDK_ARM7
// sizeof(SDPortContext)
typedef struct SDportContextData
{
u32 data[17];
}
SDPortContextData;
/*
hash_table_hashは(0x00)
使()0x00
*/
typedef struct
{
union
{
NANDHeader nand;
NORHeader nor;
GCDHeader gcd;
u8 max[0x400];
}
header; // 1KB
u8 rsa_pubkey[RSA_PUBKEY_NUM_FROM_BROM][ACS_PUBKEY_LEN]; // 1KB
u8 aes_key[AESKEY_NUM_FROM_BROM][ACS_AES_LEN]; // 128B
u8 hash_table_hash[ACS_HASH_LEN]; // 20B
BLOWFISH_CTX ds_blowfish; // 4KB + α
BLOWFISH_CTX twl_blowfish; // 4KB + α
}
OSFromBrom9Buf;
typedef struct
{
union
{
NANDHeader nand;
NORHeader nor;
GCDHeader gcd;
u8 max[0x400];
}
header; // 1KB
u8 rsa_pubkey[RSA_PUBKEY_NUM_FROM_BROM][ACS_PUBKEY_LEN]; // 512B
u8 aes_key[AESKEY_NUM_FROM_BROM][ACS_AES_LEN]; // 64B
u8 hash_table_hash[ACS_HASH_LEN]; // 20B
BLOWFISH_CTX twl_blowfish[2]; // (4KB + α) * 2
SDPortContextData SDNandContext;
}
OSFromBrom7Buf;
#ifdef SDK_ARM9
typedef OSFromBrom9Buf OSFromBromBuf;
#else // SDK_ARM7
typedef OSFromBrom7Buf OSFromBromBuf;
#endif // SDK_ARM7
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif // FIRM_FORMAT_FROM_BROM_H_

View File

@ -1,72 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - format - from_firm
File: from_firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FORMAT_FROM_FIRM_H_
#define FIRM_FORMAT_FROM_FIRM_H_
#include <firm/gcd/blowfish.h>
#include <firm/format/sign.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
#define RSA_PUBKEY_NUM_FROM_FIRM 8
#define AESKEY_NUM_FROM_FIRM 8
#else // SDK_ARM7
#define RSA_PUBKEY_NUM_FROM_FIRM 4
#define AESKEY_NUM_FROM_FIRM 4
#endif // SDK_ARM7
/*
reservedは(0x00)
使()0x00
*/
typedef struct
{
u8 rsa_pubkey[RSA_PUBKEY_NUM_FROM_FIRM][ACS_PUBKEY_LEN]; // 1KB
u8 aes_key[AESKEY_NUM_FROM_FIRM][ACS_AES_LEN]; // 128B
u8 reserved[ACS_HASH_LEN]; // 20B
BLOWFISH_CTX ds_blowfish; // 4KB + α
BLOWFISH_CTX twl_blowfish; // 4KB + α
}
OSFromFirm9Buf;
typedef struct
{
u8 rsa_pubkey[RSA_PUBKEY_NUM_FROM_FIRM][ACS_PUBKEY_LEN]; // 512B
u8 aes_key[AESKEY_NUM_FROM_FIRM][ACS_AES_LEN]; // 64B
u8 reserved[ACS_HASH_LEN]; // 20B
BLOWFISH_CTX twl_blowfish[2]; // (4KB + α) * 2
}
OSFromFirm7Buf;
#ifdef SDK_ARM9
typedef OSFromFirm9Buf OSFromFirmBuf;
#else // SDK_ARM7
typedef OSFromFirm7Buf OSFromFirmBuf;
#endif // SDK_ARM7
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif // FIRM_FORMAT_FROM_FIRM_H_

View File

@ -1,118 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - format - gcdfirm
File: gcdfirm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FORMAT_GCDFIRM_H_
#define FIRM_FORMAT_GCDFIRM_H_
#include <firm/format/firm_common.h>
#include <firm/format/sign.h>
#include <firm/format/wram_regs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*===========================================================================*
* NOR FORMAT
*===========================================================================*/
//---------------------------------------------------------------------------
// Section A NOR HEADER
//---------------------------------------------------------------------------
// 常駐モジュール情報
typedef FIRMHeader_ModuleInfo GCDHeader_ModuleInfo;
// TWL-GCDファームヘッダ
typedef struct
{
/* 0x000-0x020 [システム予約領域] */
u8 reserved_0h[0x14];
u8 rom_size; // Rom size (2のrom_size乗 Mbit: ex. 128Mbitのときrom_size = 7)
u8 reserved_16h[0xb];
/* 0x020-0x040 [常駐モジュール用パラメータ] */
u32 main_rom_offset; /* ARM9 転送元 ROM オフセット */
u32 main_decomp_size; /* ARM9 展開サイズ */
void *main_ram_address; /* ARM9 転送先 RAM オフセット */
u32 main_size; /* ARM9 転送サイズ */
u32 sub_rom_offset; /* ARM7 転送元 ROM オフセット */
u32 sub_decomp_size; /* ARM9 展開サイズ */
void *sub_ram_address; /* ARM7 転送先 RAM オフセット */
u32 sub_size; /* ARM7 転送サイズ */
/* 0x040-0x080 [システム予約領域] */
u8 reserved_40h[0x40];
/* 0x080-0x090 [ファームバイナリ情報] */
u32 nandfirm_offset; // address of rom_valid_size
u32 nandfirm_size; // address of rom_header_size
u32 norfirm_offset; // address of main_module_param
u32 norfirm_size; // address of sub_module_param
/* 0x090-0x094 [TWL-ROMコントロール] */
u16 normal_area_offset;
u16 twl_area_offset;
/* 0x094-0x0b8 [システム予約領域] */
u8 reserved_98h[0x24];
/* 0x0b8-0x0c0 [追加データ] */
u32 append_offset;
u32 append_size;
/* 0x0c0-0x100 [DSカードNINTENDOロゴ重複領域] */
u8 reserved_C0h[0x3f];
u8 comp_arm9_boot_area:1; // Compress arm9 boot area
u8 comp_arm7_boot_area:1; // Compress arm7 boot area
u8 arm9_x2:1;
u8 :0;
}
GCDHeaderLow;
typedef struct
{
/* 0x180-0x1b0 [WRAMレジスタパラメータ] */
MIHeader_WramRegs w;
/* 0x1b0-0x200 [システム予約領域] */
u8 reserved_footer[0x50];
}
GCDHeaderHigh;
// GCDヘッダ
typedef struct
{
/* 0x000-0x100 */
GCDHeaderLow l;
/* 0x100-0x180 */
FIRMPaddedSign sign;
/* 0x180-0x200 */
GCDHeaderHigh h;
}
GCDHeader;
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif //FIRM_FORMAT_GCDFIRM_H_

View File

@ -1,131 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - format - nandfirm
File: nandfirm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FORMAT_NAND_H_
#define FIRM_FORMAT_NAND_H_
#include <firm/format/firm_common.h>
#include <firm/format/sign.h>
#include <firm/format/wram_regs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*===========================================================================*
* NAND FORMAT
*===========================================================================*/
//---------------------------------------------------------------------------
// Section A NAND HEADER
//---------------------------------------------------------------------------
// 常駐モジュール情報
typedef FIRMHeader_ModuleInfo NANDHeader_ModuleInfo;
// TWL-NANDファームヘッダ
typedef struct
{
/* 0x000-0x020 [システム予約領域] */
u8 reserved_0h[0x20]; /* システム予約 A */
/* 0x020-0x040 [常駐モジュール用パラメータ] */
u32 main_rom_offset; /* ARM9 転送元 ROM オフセット */
u32 main_decomp_size; /* ARM9 展開サイズ */
void *main_ram_address; /* ARM9 転送先 RAM オフセット */
u32 main_size; /* ARM9 転送サイズ */
u32 sub_rom_offset; /* ARM7 転送元 ROM オフセット */
u32 sub_decomp_size; /* ARM9 展開サイズ */
void *sub_ram_address; /* ARM7 転送先 RAM オフセット */
u32 sub_size; /* ARM7 転送サイズ */
/* 0x040-0x0c0 [システム予約領域] */
u8 reserved_40h[0x80];
/* 0x0c0-0x100 [DSカードNINTENDOロゴ重複領域] */
u8 reserved_C0h[0x3f];
u8 comp_arm9_boot_area:1; // Compress arm9 boot area
u8 comp_arm7_boot_area:1; // Compress arm7 boot area
u8 arm9_x2:1;
u8 arm9_decomp:1;
u8 :0;
}
NANDHeaderLow;
typedef struct
{
/* 0x180-0x1b0 [WRAMレジスタパラメータ] */
MIHeader_WramRegs w;
/* 0x1b0-0x200 [システム予約領域] */
u8 reserved_footer[0x50];
}
NANDHeaderHigh;
// NANDヘッダ
typedef struct
{
/* 0x000-0x028 [DS-NORヘッダ] */
NORHeaderDS d;
/* 0x028-0x200 [システム予約領域(署名外)] */
u8 reserved_mbr[512 - sizeof(NORHeaderDS)];
/* 0x200-0x300 */
NANDHeaderLow l;
/* 0x300-0x380 */
FIRMPaddedSign sign;
/* 0x380-0x400 */
NANDHeaderHigh h;
}
NANDHeader;
// 冗長化ヘッダ (冗長部分)
typedef struct
{
/* 0x400-0x500 *//* 0x600-0x700 */
NANDHeaderLow l;
/* 0x500-0x580 *//* 0x700-0x780 */
FIRMPaddedSign sign;
/* 0x580-0x600 *//* 0x780-0x800 */
NANDHeaderHigh h;
}
NANDHeaderCore;
// 冗長化ヘッダ (全体)
typedef struct
{
/* 0x000-0x400 [実際に使用されるヘッダ] */
NANDHeader g;
/* 0x400-0x600 [デフォルト位置イメージに対するヘッダ] */
NANDHeaderCore o;
/* 0x600-0x800 [一時待避位置イメージに対するヘッダ] */
NANDHeaderCore m;
}
NANDHeaderEx;
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif //FIRM_FORMAT_NAND_H_

View File

@ -1,108 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - format - norfirm
File: norfirm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FORMAT_NOR_H_
#define FIRM_FORMAT_NOR_H_
#include <firm/format/firm_common.h>
#include <firm/format/sign.h>
#include <firm/format/wram_regs.h>
#ifdef __cplusplus
extern "C" {
#endif
/*===========================================================================*
* NOR FORMAT
*===========================================================================*/
//---------------------------------------------------------------------------
// Section A NOR HEADER
//---------------------------------------------------------------------------
// 常駐モジュール情報
typedef FIRMHeader_ModuleInfo NORHeader_ModuleInfo;
// TWL-NORファームヘッダ
typedef struct
{
/* 0x000-0x020 [システム予約領域] */
u8 reserved_0h[0x20]; /* システム予約 A */
/* 0x020-0x040 [常駐モジュール用パラメータ] */
u32 main_rom_offset; /* ARM9 転送元 ROM オフセット */
u32 main_decomp_size; /* ARM9 展開サイズ */
void *main_ram_address; /* ARM9 転送先 RAM オフセット */
u32 main_size; /* ARM9 転送サイズ */
u32 sub_rom_offset; /* ARM7 転送元 ROM オフセット */
u32 sub_decomp_size; /* ARM9 展開サイズ */
void *sub_ram_address; /* ARM7 転送先 RAM オフセット */
u32 sub_size; /* ARM7 転送サイズ */
/* 0x040-0x0c0 [システム予約領域] */
u8 reserved_40h[0x80];
/* 0x0c0-0x100 [DSカードNINTENDOロゴ重複領域] */
u8 reserved_C0h[0x3f];
u8 comp_arm9_boot_area:1; // Compress arm9 boot area
u8 comp_arm7_boot_area:1; // Compress arm7 boot area
u8 arm9_x2:1;
u8 arm9_decomp:1;
u8 :2;
u8 baudrate:1;
u8 boot_nandfirm:1;
}
NORHeaderLow;
typedef struct
{
/* 0x180-0x1b0 [WRAMレジスタパラメータ] */
MIHeader_WramRegs w;
/* 0x1b0-0x200 [システム予約領域] */
u8 reserved_footer[0x50];
}
NORHeaderHigh;
// NORヘッダ
typedef struct
{
/* 0x000-0x028 */
NORHeaderDS d;
/* 0x028-0x200 */
u8 wl_params[472];
/* 0x200-0x300 */
NORHeaderLow l;
/* 0x300-0x380 */
FIRMPaddedSign sign;
/* 0x380-0x400 */
NORHeaderHigh h;
}
NORHeader;
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif //FIRM_FORMAT_NOR_H_

View File

@ -1,95 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - format - sign
File: sign.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FORMAT_SIGN_H_
#define FORMAT_SIGN_H_
#ifdef __cplusplus
extern "C" {
#endif
// signed hash index
typedef enum
{
FIRM_SIGNED_HASH_IDX_HEADER = 0,
FIRM_SIGNED_HASH_IDX_ARM9 = 1,
FIRM_SIGNED_HASH_IDX_ARM7 = 2,
FIRM_SIGNED_HASH_IDX_HASH_TABLE = 3,
FIRM_SIGNED_HASH_IDX_FINAL = 4,
FIRM_SIGNED_HASH_NUM = 5
}
FIRMSignedHashIndex;
#define ACS_BASE_BLOCK_SIZE 4096 // should be the multiple of 16
#define ACS_META_BLOCK_SIZE 5120 // should be the multiple of 16 and the multiple of 20
// would be the multiple of 512, then the mutilple of 2560
#define ACS_PUBKEY_LEN 128
#define ACS_HASH_LEN 20
#define ACS_AES_LEN 16
#define ACS_ENCRYPTED_HASH_LEN ACS_PUBKEY_LEN
#define ACS_DECRYPTED_HASH_LEN ACS_HASH_LEN
#define ACS_RSA_EXP 0x00010001
#define ACS_RSA_EXP_LEN 3
// DER format of RSA keys
#define ACS_RSA_PRVMOD_OFFSET 0x0B
#define ACS_RSA_PRVEXP_OFFSET 0x93
#define ACS_RSA_PRVMOD_LEN 128
#define ACS_RSA_PRVEXP_LEN 128
#define ACS_RSA_PUBMOD_OFFSET 0x1D
#define ACS_RSA_PUBEXP_OFFSET 0x93
#define ACS_RSA_PUBMOD_LEN 128
//#define ACS_RSA_PUBEXP_LEN ACS_RSA_EXP_LEN
#define FIRM_HEADER_2ND_HASH_AREA_LEN (sizeof(FIRMSignedContext) - ACS_HASH_LEN)
// <20><>¼ƒRƒ“ƒeƒLƒXƒg
typedef struct
{
unsigned char aes_key[ACS_AES_LEN];
unsigned char hash[FIRM_SIGNED_HASH_NUM][ACS_HASH_LEN];
}
FIRMSignedContext;
// <20><>¼
typedef union
{
struct
{
unsigned char prePad[(ACS_ENCRYPTED_HASH_LEN - sizeof(FIRMSignedContext))-1];
FIRMSignedContext c;
unsigned char postPad[1];
}
e;
unsigned int raw[ACS_ENCRYPTED_HASH_LEN/4];
}
FIRMPaddedSign;
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif //FORMAT_SIGN_H_

View File

@ -1,85 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - MI - include
File: wram_regs.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FORMAT_WRAM_REGS_H_
#define FIRM_FORMAT_WRAM_REGS_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef enum
{
MI_WRAM_A_OFFSET_0KB = 0,
MI_WRAM_A_OFFSET_64KB = 1,
MI_WRAM_A_OFFSET_128KB = 2,
MI_WRAM_A_OFFSET_192KB = 3
} MIWramAOffset;
typedef enum
{
MI_WRAM_BC_OFFSET_0KB = 0,
MI_WRAM_BC_OFFSET_32KB = 1,
MI_WRAM_BC_OFFSET_64KB = 2,
MI_WRAM_BC_OFFSET_96KB = 3,
MI_WRAM_BC_OFFSET_128KB = 4,
MI_WRAM_BC_OFFSET_160KB = 5,
MI_WRAM_BC_OFFSET_192KB = 6,
MI_WRAM_BC_OFFSET_224KB = 7
} MIWramBCOffset;
#define MI_WRAM_MAP_NULL HW_WRAM_AREA
#define REG_WRAM_MAP_CONV_ADDR( regno, abc, border, addr ) \
( \
((((addr) - HW_WRAM_AREA) / MI_WRAM_##abc##_SLOT_SIZE) & \
(REG_MI_MBK##regno##_W##abc##_##border##_MASK >> \
REG_MI_MBK##regno##_W##abc##_##border##_SHIFT)) \
)
// WRAMƒ}ƒbƒsƒ“ƒOƒŒƒWƒXƒ^
typedef struct
{
u8 main_wrambnk_a[4]; // ARM9 SCFG_MBK1
u8 main_wrambnk_b[8]; // ARM9 SCFG_MBK2-3
u8 main_wrambnk_c[8]; // ARM9 SCFG_MBK4-5
u32 main_wrammap_a; // ARM9 SCFG_MBK6
u32 main_wrammap_b; // ARM9 SCFG_MBK7
u32 main_wrammap_c; // ARM9 SCFG_MBK8
u32 sub_wrammap_a; // ARM7 SCFG_MBK6
u32 sub_wrammap_b; // ARM7 SCFG_MBK7
u32 sub_wrammap_c; // ARM7 SCFG_MBK8
u8 sub_wramlock[3]; // ARM7 SCFG_MBK9
u8 main_wrambnk_01:2; // ARM9 RBKCNT1_H
u8 main_vrambnk_c:3; // ARM9 RBKCNT0_H
u8 main_vrambnk_d:3; // ARM9 RBKCNT0_H
}
MIHeader_WramRegs;
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FORMAT_WRAM_REGS_H_ */
#endif

View File

@ -1,32 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fs
File: fs.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FS_H_
#define FIRM_FS_H_
#ifdef SDK_ARM7
#include <firm/fs/ARM7/fs_firm.h>
#include <firm/fs/ARM7/fs_firm_ex.h>
#include <firm/fs/ARM7/fs_loader.h>
#else
#include <firm/fs/ARM9/fs_firm.h>
#include <firm/fs/ARM9/fs_loader.h>
#endif // SDK_ARM7
/* FIRM_FS_H_ */
#endif

View File

@ -1,55 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fs
File: fs_firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FS_FS_FIRM_H_
#define FIRM_FS_FS_FIRM_H_
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FS_InitMountInfo
Description: set mount info for firm
Arguments: nand TRUE if set nand entry
sdmc TRUE if set sdmc entry
Returns: None
*---------------------------------------------------------------------------*/
void FS_InitMountInfo( BOOL nand, BOOL sdmc );
/*---------------------------------------------------------------------------*
Name: FS_OpenSrl
Description: open srl file named in HW_TWL_FS_BOOT_SRL_PATH_BUF
Arguments: None
Returns: file discriptor
*---------------------------------------------------------------------------*/
int FS_OpenSrl( void );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FS_FS_FIRM_H_ */
#endif

View File

@ -1,42 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fs
File: fs_firm_ex.h
Copyright 2008 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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FS_FS_FIRM_EX_H_
#define FIRM_FS_FS_FIRM_EX_H_
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FS_SetMountInfoForSrl
Description: set mount info for srl file
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void FS_SetMountInfoForSrl( void );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FS_FS_FIRM_EX_H_ */
#endif

View File

@ -1,85 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fs
File: fs.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FS_FS_LOADER_H_
#define FIRM_FS_FS_LOADER_H_
#include <twl/types.h>
#include <twl/aes/ARM7/lo.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FS_LoadBuffer
Description: load data in file and pass to ARM9 via WRAM-B
Arguments: fd file discriptor to read
offset offset to start to read in bytes
size total length to read in bytes
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadBuffer( int fd, u32 offset, u32 size );
/*---------------------------------------------------------------------------*
Name: FS_LoadModule
Description: load data in file and pass to ARM9 via WRAM-B in view of AES
settings in the ROM header at HW_TWL_ROM_HEADER_BUF
Arguments: fd file discriptor to read
offset offset to start to read in bytes
size total length to read in bytes
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadModule( int fd, u32 offset, u32 size );
/*---------------------------------------------------------------------------*
Name: FS_LoadHeader
Description: load ROM header in the head of file and pass to ARM9 via WRAM-B
Arguments: fd file discriptor to read
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadHeader( int fd );
/*---------------------------------------------------------------------------*
Name: FS_LoadStatic
Description: load static regions in file and pass to ARM9 via WRAM-B
specified by ROM header at HW_TWL_ROM_HEADER_BUF
Arguments: fd file discriptor to read
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadStatic( int fd );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FS_FS_LOADER_H_ */
#endif

View File

@ -1,96 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fs
File: fs_firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FS_FS_FIRM_H_
#define FIRM_FS_FS_FIRM_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FS_InitFIRM
Description: initialize FS/FATFS for firm
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void FS_InitFIRM( void );
/*---------------------------------------------------------------------------*
Name: FS_GetTitleBootContentPathFast
Description: NAND
Arguments: buf:
FS_ENTRY_LONGNAME_MAX
titleId: Title ID
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL FS_GetTitleBootContentPathFast(char* buf, OSTitleId titleId);
/*---------------------------------------------------------------------------*
Name: FS_ResolveSrl
Description: resolve srl filename and store to HW_TWL_FS_BOOT_SRL_PATH_BUF
Arguments: titleId title id for srl file
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_ResolveSrl( OSTitleId titleId );
/*---------------------------------------------------------------------------*
Name: FS_ResolveSrlList
Description: resolve srl filename with list and store to
HW_TWL_FS_BOOT_SRL_PATH_BUF
Arguments: titleIdList pointer to title id array for srl file
nums number of title id
Returns: -1 if failed, otherwise succeeded titile id number
*---------------------------------------------------------------------------*/
int FS_ResolveSrlList( const OSTitleId* titleIdList, u32 nums );
/*---------------------------------------------------------------------------*
Name: FS_ResolveSrlUnsecured
Description: resolve srl filename and store to HW_TWL_FS_BOOT_SRL_PATH_BUF
without almost security check
Arguments: titleId title id for srl file
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_ResolveSrlUnsecured( OSTitleId titleId );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FS_FS_FIRM_H_ */
#endif

View File

@ -1,94 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - fs
File: fs_loader.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_FS_FS_LOADER_H_
#define FIRM_FS_FS_LOADER_H_
#include <twl/types.h>
#include <twl/aes/common/types.h>
#include <twl/os/common/systemCall.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: FS_LoadBuffer
Description: receive data from ARM7 via WRAM-B and store in destination address,
calculate SHA1 in parallel if ctx is specified
Arguments: dest destination address to read
size total length to read in bytes
ctx pointer to SHA1 context or NULL
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadBuffer( u8* dest, u32 size, SVCSHA1Context *ctx );
/*---------------------------------------------------------------------------*
Name: FS_LoadModule
Description: receive data from ARM7 via WRAM-B and store in destination address
in view of AES settings in the ROM header at HW_TWL_ROM_HEADER_BUF,
then verify the digest
Arguments: dest destination address to read
offset file offset to start to read in bytes
size total length to read in bytes
digest digest to verify
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadModule( u8* dest, u32 offset, u32 size, const u8 digest[SVC_SHA1_BLOCK_SIZE] );
/*---------------------------------------------------------------------------*
Name: FS_LoadHeader
Description: receive ROM header, store to HW_TWL_ROM_HEADER_BUF,
and verify signature
Arguments: pool heap context to call SVC_DecryptSign
rsa_key_user public key to verify the signature for user application
rsa_key_sys public key to verify the signature for system application
rsa_key_secure public key to verify the signature for secure application
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key_user, const void* rsa_key_sys, const void* rsa_key_secure );
/*---------------------------------------------------------------------------*
Name: FS_LoadStatic
Description: receive static regions from ARM6 via WRAM-B and store them
specified by ROM header at HW_TWL_ROM_HEADER_BUF
Arguments: digestKey pointer to key for HMAC-SHA1
if NULL, use default key
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL FS_LoadStatic( const u8* digestKey );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_FS_FS_LOADER_H_ */
#endif

View File

@ -1,42 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - GCD - include
File: blowfish.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_GCD_BLOWFISH_H
#define FIRM_GCD_BLOWFISH_H
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct {
u32 P[16 + 2];
u32 S[4][256];
} BLOWFISH_CTX;
void InitBlowfish(BLOWFISH_CTX *ctx, const unsigned char *key, int keyLen);
void EncryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr);
void DecryptByBlowfish(const BLOWFISH_CTX *ctx, u32 *xl, u32 *xr);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif // FIRM_GCD_BLOWFISH_H

View File

@ -1,61 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - HW - include
File: mmap_firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_HW_MMAP_FIRM_H_
#define FIRM_HW_MMAP_FIRM_H_
#ifdef __cplusplus
extern "C" {
#endif
//------------------------------------- FIRM_SVC_STACK
#define HW_FIRM_SVC_STACK (HW_FIRM_SVC_STACK_END-HW_FIRM_SVC_STACK_SIZE)
#define HW_FIRM_SVC_STACK_END (HW_WRAM_AREA_END - HW_PRV_WRAM_SYSRV_SIZE)
#define HW_FIRM_SVC_STACK_SIZE HW_SVC_STACK_SIZE
//------------------------------------- FIRM_IRQ_STACK
#define HW_FIRM_IRQ_STACK (HW_FIRM_IRQ_STACK_END-HW_FIRM_IRQ_STACK_SIZE)
#define HW_FIRM_IRQ_STACK_END HW_FIRM_SVC_STACK
#define HW_FIRM_IRQ_STACK_SIZE SDK_IRQ_STACKSIZE
//------------------------------------- FIRM_FROM_BROM_BUF
#define HW_FIRM_FROM_BROM_BUF (HW_FIRM_FROM_BROM_BUF_END - HW_FIRM_FROM_BROM_BUF_SIZE)
#define HW_FIRM_FROM_BROM_BUF_END (HW_WRAM_AREA_END - 0x1000) // END - 4KB
#define HW_FIRM_FROM_BROM_BUF_SIZE 0x3000 // 12KB
//------------------------------------- FIRM_FROM_FIRM_BUF
#define HW_FIRM_FROM_FIRM_BUF (HW_FIRM_FROM_FIRM_BUF_END - HW_FIRM_FROM_FIRM_BUF_SIZE)
#define HW_FIRM_FROM_FIRM_BUF_END (HW_WRAM_AREA_END - 0x1000) // END - 4KB
#define HW_FIRM_FROM_FIRM_BUF_SIZE 0x2C00 // 11KB
//------------------------------------- FIRM_MOUNT_INFO_BUF
extern void SDK_MOUNT_INFO_TABLE(void);
#define HW_FIRM_MOUNT_INFO_BUF (u32)SDK_MOUNT_INFO_TABLE
#define HW_FIRM_MOUNT_INFO_BUF_END (HW_FIRM_MOUNT_INFO_BUF + HW_FIRM_MOUNT_INFO_BUF_SIZE)
#define HW_FIRM_MOUNT_INFO_BUF_SIZE 0x3C0
//------------------------------------- FIRM_BOOT_SRL_PATH_BUF
#define HW_FIRM_BOOT_SRL_PATH_BUF HW_FIRM_MOUNT_INFO_BUF_END
#define HW_FIRM_BOOT_SRL_PATH_BUF_END (HW_FIRM_BOOT_SRL_PATH_BUF + HW_FIRM_BOOT_SRL_PATH_BUF_SIZE)
#define HW_FIRM_BOOT_SRL_PATH_BUF_SIZE FS_ENTRY_LONGNAME_MAX
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_HW_MMAP_FIRM_H_ */
#endif

View File

@ -1,56 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - HW - include
File: mmap_firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_HW_MMAP_FIRM_H_
#define FIRM_HW_MMAP_FIRM_H_
#ifdef __cplusplus
extern "C" {
#endif
//------------------------------------- FIRM_RESET_BUF
#define HW_FIRM_RESET_BUF HW_MAIN_MEM
#define HW_FIRM_RESET_BUF_END (HW_FIRM_RESET_BUF + HW_FIRM_RESET_BUF_SIZE)
//#define HW_FIRM_RESET_BUF_SIZE 0x400 // 12KB
#define HW_FIRM_RESET_BUF_SIZE 0x800000 // 8MB
//------------------------------------- FIRM_RSA_BUF
#define HW_FIRM_RSA_BUF (HW_FIRM_RSA_BUF_END - HW_FIRM_RSA_BUF_SIZE)
#define HW_FIRM_RSA_BUF_END HW_FIRM_ES_BUF
#define HW_FIRM_RSA_BUF_SIZE 0x3000 // 12KB
//------------------------------------- FIRM_ES_BUF
#define HW_FIRM_ES_BUF (HW_FIRM_ES_BUF_END - HW_FIRM_ES_BUF_SIZE)
#define HW_FIRM_ES_BUF_END HW_FIRM_FROM_BROM_BUF
#define HW_FIRM_ES_BUF_SIZE 0x1000 // 4KB
//------------------------------------- FIRM_FROM_BROM_BUF
#define HW_FIRM_FROM_BROM_BUF (HW_FIRM_FROM_BROM_BUF_END - HW_FIRM_FROM_BROM_BUF_SIZE)
#define HW_FIRM_FROM_BROM_BUF_END (HW_ITCM_END - 0x1000) // END - 4KB
#define HW_FIRM_FROM_BROM_BUF_SIZE 0x3000 // 12KB
//------------------------------------- FIRM_FROM_FIRM_BUF
#define HW_FIRM_FROM_FIRM_BUF (HW_FIRM_FROM_FIRM_BUF_END - HW_FIRM_FROM_FIRM_BUF_SIZE)
#define HW_FIRM_FROM_FIRM_BUF_END (HW_ITCM_END - 0x1000) // END - 4KB
#define HW_FIRM_FROM_FIRM_BUF_SIZE 0x2C00 // 11KB
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_HW_MMAP_FIRM_H_ */
#endif

View File

@ -1,65 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - HW - include
File: mmap_firm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_HW_COMMON_MMAP_FIRM_H_
#define FIRM_HW_COMMON_MMAP_FIRM_H_
#include <nitro/fs/api.h>
#include <twl/fatfs/common/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#define HW_FIRM_ROUNDUP32(x) ( ((x) + 31) & -32 )
//------------------------------------- *_LoadBuffer
#define HW_FIRM_LOAD_BUFFER_BASE HW_WRAM_AREA
#define HW_FIRM_LOAD_BUFFER_UNIT_SIZE 0x8000
#define HW_FIRM_LOAD_BUFFER_UNIT_NUMS 7
#define HW_FIRM_LOAD_BUFFER_SIZE (HW_FIRM_LOAD_BUFFER_UNIT_SIZE * HW_FIRM_LOAD_BUFFER_UNIT_NUMS)
#define HW_FIRM_LOAD_BUFFER_END (HW_FIRM_LOAD_BUFFER_BASE + HW_FIRM_LOAD_BUFFER_SIZE)
//------------------------------------- FS/FATFS
#define HW_FIRM_FS_MOUNT_INFO_BUF_SIZE (HW_TWL_FS_BOOT_SRL_PATH_BUF - HW_TWL_FS_MOUNT_INFO_BUF)
#define HW_FIRM_FS_BOOT_SRL_PATH_BUF_SIZE (HW_TWL_ROM_HEADER_BUF - HW_TWL_FS_BOOT_SRL_PATH_BUF)
#define HW_FIRM_FATFS_ARCHNAME_LIST (HW_FIRM_FATFS_ARCHNAME_LIST_END - HW_FIRM_FATFS_ARCHNAME_LIST_SIZE) // 0x02fee120
#define HW_FIRM_FATFS_ARCHNAME_LIST_SIZE MATH_ROUNDUP(OS_MOUNT_ARCHIVE_NAME_LEN * OS_MOUNT_INFO_MAX + 1, 32) // 0xc0
#define HW_FIRM_FATFS_ARCHNAME_LIST_END HW_FIRM_FATFS_COMMAND_BUFFER // 0x2fee1e0
#define HW_FIRM_FATFS_COMMAND_BUFFER (HW_FIRM_FATFS_COMMAND_BUFFER_END - HW_FIRM_FATFS_COMMAND_BUFFER_SIZE)
#define HW_FIRM_FATFS_COMMAND_BUFFER_SIZE FATFS_COMMAND_BUFFER_MAX // 0x1000
#define HW_FIRM_FATFS_COMMAND_BUFFER_END HW_FIRM_FS_FATFS_DRIVE // 0x2fef1e0
#define HW_FIRM_FS_FATFS_DRIVE (HW_FIRM_FS_FATFS_DRIVE_END - HW_FIRM_FS_FATFS_DRIVE_SIZE)
#define HW_FIRM_FS_FATFS_DRIVE_SIZE HW_FIRM_ROUNDUP32(sizeof(FSFATFSArchiveContext[FS_MOUNTDRIVE_MAX])) // 0x1cc0
#define HW_FIRM_FS_FATFS_DRIVE_END HW_FIRM_FS_FATFS_ASYNC_REQUEST // 0x02ff0ea0
#define HW_FIRM_FS_FATFS_ASYNC_REQUEST (HW_FIRM_FS_FATFS_ASYNC_REQUEST_END - HW_FIRM_FS_FATFS_ASYNC_REQUEST_SIZE)
#define HW_FIRM_FS_FATFS_ASYNC_REQUEST_SIZE HW_FIRM_ROUNDUP32(sizeof(FATFSRequestBuffer[FS_MOUNTDRIVE_MAX])) // 0x5960
#define HW_FIRM_FS_FATFS_ASYNC_REQUEST_END HW_FIRM_FS_TEMP_BUFFER // 0x02ff6800
#define HW_FIRM_FS_TEMP_BUFFER (HW_FIRM_FS_TEMP_BUFFER_END - HW_FIRM_FS_TEMP_BUFFER_SIZE)
#define HW_FIRM_FS_TEMP_BUFFER_SIZE FS_TEMPORARY_BUFFER_MAX // 0x5800
#define HW_FIRM_FS_TEMP_BUFFER_END HW_TWL_MAIN_MEM_SHARED // 0x02ffc000
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_HW_COMMON_MMAP_FIRM_H_ */
#endif

View File

@ -1,30 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - include - HW
File: memorymap.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_MEMORYMAP_H_
#define FIRM_MEMORYMAP_H_
#include <twl/memorymap.h>
#include <firm/hw/common/mmap_firm.h>
#ifdef SDK_ARM9
#include <firm/hw/ARM9/mmap_firm.h>
#else //SDK_ARM7
#include <firm/hw/ARM7/mmap_firm.h>
#endif
/* FIRM_MEMORYMAP_H_ */
#endif

View File

@ -1,30 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - include - MI
File: mi.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_MI_H_
#define FIRM_MI_H_
#include <twl/mi.h>
#include <firm/mi/exDma.h>
#include <firm/mi/mainMemory.h>
#ifdef SDK_ARM9
#include <firm/mi/ARM9/mi_loader.h>
#endif
/* FIRM_MI_H_ */
#endif

View File

@ -1,109 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - mi
File: mi_loader.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_MI_LOADER_H_
#define FIRM_MI_LOADER_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: MIi_LoadBuffer
Description: receive data from ARM7 and store(move) via WRAM[B]
LoadBufferメカニズムでARM7から受け取ります
SVCSHA1Contextを指定していた場合SHA1の
[LoadBufferメカニズム]
WRAM[B]ARM7,ARM9間のデータ転送を行います
WRAM[B]
1ARM7から
FIRM_PXI_ID_LOAD_PIRIODを受信します
ARM9は受信後にそのスロットの使用権をARM9に変更してデータを
()使
ARM7に戻します
[使]
WRAM[B]ARM7側に倒しておくこと
[]
offsetとsizeはARM7から通知されません
SRLファイルを読み込む場合はROMヘッダを参照できれば十分です
(ROMヘッダ部分は元から知っているはず)
:
ARM7/ARM9側で歩調を合わせられることを
()
PXIコールバック
APIがデータをWRAMに格納した後
destとsizeを通知するという形でOKではないか
()
Arguments: dest destination address for received data
size size to load
ctx context for SHA1 if execute SVC_SHA1Update
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL MI_LoadBuffer(u8* dest, u32 size, SVCSHA1Context *ctx);
/*---------------------------------------------------------------------------*
Name: MI_LoadHeader
Description: load header
Arguments: pool pointer to the pool info for SVCSignHeapContext
rsa_key key address
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL MI_LoadHeader( SVCSignHeapContext* pool, const void* rsa_key );
/*---------------------------------------------------------------------------*
Name: MI_LoadStatic
Description: load static binary
Arguments: None
Returns: TRUE if success
*---------------------------------------------------------------------------*/
BOOL MI_LoadStatic( void );
/*---------------------------------------------------------------------------*
Name: MI_Boot
Description: boot
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void MI_Boot( void );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_MI_LOADER_H_ */
#endif

View File

@ -1,203 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - libraries - mi
File: exDma.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 TWL_MI_EXDMA_H_
#define TWL_MI_EXDMA_H_
#include <twl/misc.h>
#include <twl/types.h>
#include <twl/memorymap.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------
//---- registers
typedef struct
{
const void * src;
void * dest;
u32 totalCount;
u32 wordCount;
u32 blockInterval;
u32 fillData;
u32 ctrl;
}
t_MIExDmaChanRegs;
typedef volatile t_MIExDmaChanRegs MIExDmaChanRegs;
//================================================================================
// DMA control definition
//================================================================================
//---- DMA channel No.
#define MI_EXDMA_CH_MIN 4
#define MI_EXDMA_CH_MAX 7
#define MI_EXDMA_CH_NUM 4
//================================================================================
// DMA WAIT
//================================================================================
/*---------------------------------------------------------------------------*
Name: MIi_IsExDmaBusy
Description: check whether extended DMA is busy or not
Arguments: dmaNo : DMA channel No.
Returns: TRUE if extended DMA is busy, FALSE if not
*---------------------------------------------------------------------------*/
BOOL MIi_IsExDmaBusy( u32 dmaNo );
/*---------------------------------------------------------------------------*
Name: MIi_WaitExDma
Description: wait while extended DMA is busy
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_WaitExDma( u32 dmaNo );
/*---------------------------------------------------------------------------*
Name: MIi_StopExDma
Description: stop extended DMA
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_StopExDma( u32 dmaNo );
/*---------------------------------------------------------------------------*
Name: MIi_StopDmaAsync
Description: stop extended DMA
async version
Arguments: dmaNo : DMA channel No.
Returns: None
*---------------------------------------------------------------------------*/
void MIi_StopExDmaAsync( u32 dmaNo );
//================================================================================
// memory operation using DMA
//================================================================================
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaSendAsync
Description: send data with DMA
sync version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaSendAsync( u32 dmaNo, const void *src, void *dest, u32 size );
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaRecvAsync
Description: receive data with DMA
sync version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaRecvAsync( u32 dmaNo, const void *src, void *dest, u32 size );
//----------------- internel functions -------------------
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaSendAsyncCore
Description: send data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaSendAsyncCore( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing );
/*---------------------------------------------------------------------------*
Name: MIi_ExDmaRecvAsyncCore
Description: receive data with DMA
async version
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_ExDmaRecvAsyncCore( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing );
/*---------------------------------------------------------------------------*
Name: MIi_SetExDmaParams
Description: set DMA
Arguments: dmaNo : DMA channel No.
dest : destination address
src : source address
size : size (byte)
blockSize : block size
Returns: None
*---------------------------------------------------------------------------*/
void MIi_SetExDmaParams( u32 dmaNo, const void *src, void *dest, u32 size, u32 oneShotSize,
u32 blockSize, u32 interval, u32 prescale,
u32 continuous, u32 srcRld, u32 destRld,
u32 timing,
u32 fillData, u32 srcDir, u32 destDir);
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_MI_EXDMA_H_ */
#endif

View File

@ -1,145 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - include - MI
File: mainMemory.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_MI_MAINMEMORY_H_
#define FIRM_MI_MAINMEMORY_H_
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
u16 cr0;
u16 cr1;
u16 cr2;
}
MIMmemCR;
//----------------------------------------------------------------------
// メインメモリ CRコマンド
//----------------------------------------------------------------------
// for DS-PSRAM
// CR0
#define MMEM_DCR0_PARTIAL_REFRESH_NONE 0x0003 // パーシャルリフレッシュ無し
#define MMEM_DCR0_BURST_CONTINUOUS 0x001c // 連続バースト(224バイト)
#define MMEM_DCR0_BURST_MODE 0x0000 // バーストモード
#define MMEM_DCR0_PAGE_MODE 0x0020 // ページモード
#define MMEM_DCR0_SB1 0xffc0 // 1固定
// CR1
#define MMEM_DCR1_1ST_R4_W3 0x0002 //
#define MMEM_DCR1_BURST_WRITE 0x0000 // バーストライト
#define MMEM_DCR1_CLOCK_TRIGGER_UP 0x0100 // クロック立上り
#define MMEM_DCR1_BURST_LINER 0x0200 // バーストリニア・シーケンス
#define MMEM_DCR1_SB1 0xe430 // 1固定
// CR2
#define MMEM_DCR2_SB1 0x004003fe // 1固定
#define MMEM_DCR2_CLOCK_TRIGGER_UP 0x00000400 // クロック立上り
#define MMEM_DCR2_BURST_WRITE 0x00000000 // バーストライト
#define MMEM_DCR2_BURST_LINER 0x00001000 // バーストリニア・シーケンス
#define MMEM_DCR2_1ST_R4_W3 0x00004000 //
#define MMEM_DCR2_BURST_MODE 0x00000000 // バーストモード
#define MMEM_DCR2_PAGE_MODE 0x00010000 // ページモード
#define MMEM_DCR2_BURST_CONTINUOUS 0x000e0000 // 連続バースト(224バイト)
#define MMEM_DCR2_PARTIAL_REFRESH_NONE 0x00300000 // パーシャルリフレッシュ無し
// for TWL-PSRAM
// CR0
#define MMEM_TCR0_SET 0x0001 // セット
#define MMEM_TCR0_VERIFY 0x0000 // ベリファイ
#define MMEM_TCR0_SB1 0xfffe // 1固定
#define MMEM_TCR0 (MMEM_TCR0_SET | \
MMEM_TCR0_SB1) // 0xFFFF
#define MMEM_TCR0_R (MMEM_TCR0_VERIFY | \
MMEM_TCR0_SB1) // 0xFFFE
// CR1
#define MMEM_TCR1_PARTIAL_REFRESH_8MB 0x0002 // パーシャルリフレッシュ先頭8MB
#define MMEM_TCR1_PARTIAL_REFRESH_NONE 0x0003 // パーシャルリフレッシュなしDSモード時
#define MMEM_TCR1_BURST_CONTINUOUS 0x001c // 連続バースト(224バイト)
#define MMEM_TCR1_BURST_MODE 0x0000 // バーストモード
#define MMEM_TCR1_DRV_SZ_CENTER 0x00c0 // ドライバーサイズ=中心
#define MMEM_TCR1_SB1 0xff00 // 1固定
#define MMEM_TCR1 (MMEM_TCR1_PARTIAL_REFRESH_8MB | \
MMEM_TCR1_BURST_CONTINUOUS | \
MMEM_TCR1_BURST_MODE | \
MMEM_TCR1_DRV_SZ_CENTER | \
MMEM_TCR1_SB1) // 0xFFDE
#define MMEM_TCR1_DS (MMEM_TCR1 | MMEM_TCR1_PARTIAL_REFRESH_NONE) // 0xFFDF
// CR2
#define MMEM_TCR2_1ST_R4_W3 0x0002 //
#define MMEM_TCR2_REMAIN_PRV_MODE 0x0040 // 前モード保持
#define MMEM_TCR2_WE_LEVEL 0x0080 // WEレベルコントロール
#define MMEM_TCR2_SB1 0xff28 // 1固定
#define MMEM_TCR2 (MMEM_TCR2_1ST_R4_W3 | \
MMEM_TCR2_REMAIN_PRV_MODE | \
MMEM_TCR2_WE_LEVEL | \
MMEM_TCR2_SB1) // 0xFFEA
/*---------------------------------------------------------------------------*
Name: MIi_InitMainMemCR
Description: change main memory into the burst mode
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void MIi_InitMainMemCR( BOOL setCR );
void MIi_GetMainMemCR( MIMmemCR* dest );
/*---------------------------------------------------------------------------*
Name: MIi_IsMainMemoryInitialized
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
BOOL MIi_IsMainMemoryInitialized( void );
/*---------------------------------------------------------------------------*
Name: MIi_WaitMainMemoryInitialize
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void MIi_WaitMainMemoryInitialize( void );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_MI_MAINMEMORY_H_ */
#endif

View File

@ -1,33 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - include -
File: misc.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_MISC_H_
#define FIRM_MISC_H_
#include <nitro/misc.h>
#ifdef __cplusplus
extern "C" {
#endif
#define offsetof(t, memb) ((size_t)(&(((t *)0)->memb)))
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_MISC_H_ */
#endif

View File

@ -1,43 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - NVRAM
File: nvram.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_NVRAM_H_
#define FIRM_NVRAM_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
#else // SDK_ARM7
/*---------------------------------------------------------------------------*
ŠÖ<EFBFBD>è`
*---------------------------------------------------------------------------*/
void NVRAMi_Read(u32 address, void *buf, u32 size);
void NVRAMi_Write(u32 address, void *buf, u32 size);
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_NVRAM_H_ */
#endif

View File

@ -1,36 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - OS
File: os.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_OS_H_
#define FIRM_OS_H_
#include <firm/misc.h>
#include <firm/os/common/init.h>
#include <firm/os/common/tick_brom.h>
#include <firm/os/common/boot.h>
#include <firm/os/common/system.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_OS_H_ */
#endif

View File

@ -1,151 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - OS - include
File: os_cache_tag.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 TWL_OS_CACHE_TAG_H_
#define TWL_OS_CACHE_TAG_H_
#ifdef __cplusplus
extern "C" {
#endif
#include <twl/misc.h>
#include <twl/types.h>
//===========================================================================
// DATA CACHE (for specified range)
//===========================================================================
/*---------------------------------------------------------------------------*
Name: DC_ClearTagAll
Description: clear tag in data cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void DC_ClearTagAll( void );
/*---------------------------------------------------------------------------*
Name: DC_ClearDataAll
Description: clear data in data cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void DC_ClearDataAll( void );
/*---------------------------------------------------------------------------*
Name: DC_FillTagAll
Description: clear tag in data cache
Arguments: data : fill data
Returns: None.
*---------------------------------------------------------------------------*/
void DC_FillTagAll( u32 data );
/*---------------------------------------------------------------------------*
Name: DC_FillDataAll
Description: fill data in data cache
Arguments: data : fill data
Returns: None.
*---------------------------------------------------------------------------*/
void DC_FillDataAll( u32 data );
/*---------------------------------------------------------------------------*
Name: DC_GetTagAndDataAll
Description: get tag and data in data cache
Arguments: tag tag address
data data address
Returns: None.
*---------------------------------------------------------------------------*/
void DC_GetTagAndDataAll( void* tag, void* data );
//===========================================================================
// INSTRUCTION CACHE
//===========================================================================
/*---------------------------------------------------------------------------*
Name: IC_ClearTagAll
Description: clear tag in instruction cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void IC_ClearTagAll( void );
/*---------------------------------------------------------------------------*
Name: IC_ClearInstructionAll
Description: clear instruction in instruction cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void IC_ClearInstructionAll( void );
/*---------------------------------------------------------------------------*
Name: IC_FillTagAll
Description: fill tag in instruction cache
Arguments: None
Returns: None.
*---------------------------------------------------------------------------*/
void IC_FillTagAll( u32 data );
/*---------------------------------------------------------------------------*
Name: IC_FillInstructionAll
Description: fill instruction in instruction cache
Arguments: data : fill data
Returns: None.
*---------------------------------------------------------------------------*/
void IC_FillInstructionAll( u32 data );
/*---------------------------------------------------------------------------*
Name: IC_GetTagAndInstructionAll
Description: get tag and instruction in instruction cache
Arguments: tag tag address
inst instruction address
Returns: None.
*---------------------------------------------------------------------------*/
void IC_GetTagAndInstructionAll( void* tag, void* inst );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_OS_CACHE_TAG_H_ */
#endif

View File

@ -1,98 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - OS - include
File: boot.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_OS_BOOT_H_
#define FIRM_OS_BOOT_H_
#include <firm.h>
#include <firm/format/from_brom.h>
#include <firm/format/from_firm.h>
#include <twl/os/common/format_rom.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: OS_BootWithRomHeaderFromFIRM
Description: boot with ROM header
Arguments: rom_header : ROM header
Returns: None
*---------------------------------------------------------------------------*/
void OS_BootWithRomHeaderFromFIRM( ROM_Header* rom_header );
/*---------------------------------------------------------------------------*
Name: OS_BootFromFIRM
Description: boot system menu using ROM_Header in HW_TWL_ROM_HEADER_BUF
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
static inline void OS_BootFromFIRM( void )
{
OS_BootWithRomHeaderFromFIRM( (ROM_Header*)HW_TWL_ROM_HEADER_BUF );
}
/*---------------------------------------------------------------------------*
Name: OSi_FromBromToMenu
Description: convert OSFromBromBuf to OSFromFirmBuf
Arguments: None
Returns: FALSE if FromBrom is broken
*---------------------------------------------------------------------------*/
BOOL OSi_FromBromToMenu( void );
/*---------------------------------------------------------------------------*
Name: OSi_GetFromBromAddr
Description: data address from bootrom to firm
Arguments: None
Returns: address
*---------------------------------------------------------------------------*/
static inline OSFromBromBuf* const OSi_GetFromBromAddr( void )
{
return (OSFromBromBuf*)HW_FIRM_FROM_BROM_BUF;
}
/*---------------------------------------------------------------------------*
Name: OSi_GetFromFirmAddr
Description: data address from firm to menu
Arguments: None
Returns: address
*---------------------------------------------------------------------------*/
static inline OSFromFirmBuf* const OSi_GetFromFirmAddr( void )
{
return (OSFromFirmBuf*)HW_FIRM_FROM_FIRM_BUF;
}
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_OS_BOOT_H_ */
#endif

View File

@ -1,43 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - OS - include
File: init.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_OS_INIT_H_
#define FIRM_OS_INIT_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: OS_InitFIRM
Description: initialize sdk os for firm
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void OS_InitFIRM(void);
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_OS_INIT_H_ */
#endif

View File

@ -1,53 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - OS - include
File: system.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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef TWL_FIRM_OS_SYSTEM_H_
#define TWL_FIRM_OS_SYSTEM_H_
#include <twl/misc.h>
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------------
typedef u32 OSCpuCycle;
#define OS_CPU_CLOCK HW_CPU_CLOCK
//---- sec to cpu cycle
// 150nsec - 30sec
#define OS_SEC_TO_CPUCYC( sec ) ((OSCpuCycle)( ( OS_CPU_CLOCK * (u32)(sec)) ))
#define OS_MSEC_TO_CPUCYC( msec ) ((OSCpuCycle)( ((OS_CPU_CLOCK/1000) * (u32)(msec)) ))
#define OS_USEC_TO_CPUCYC( usec ) ((OSCpuCycle)( ((OS_CPU_CLOCK/1000) * (u32)(usec)) / 1000 ))
#define OS_NSEC_TO_CPUCYC( nsec ) ((OSCpuCycle)( ((OS_CPU_CLOCK/1000) * (u32)(nsec)) / (1000 * 1000) ))
//---- cpu cycle to sec
// 150nsec - 30sec
#define OS_CPUCYC_TO_SEC( cyc ) ( ((u32)(cyc) ) / OS_CPU_CLOCK )
#define OS_CPUCYC_TO_MSEC( cyc ) ( ((u32)(cyc) ) / (OS_CPU_CLOCK/1000) )
#define OS_CPUCYC_TO_USEC( cyc ) ( ((u32)(cyc) * 1000) / (OS_CPU_CLOCK/1000) )
#define OS_CPUCYC_TO_NSEC( cyc ) ( ((u32)(cyc) * 1000 * 1000) / (OS_CPU_CLOCK/1000) )
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_FIRM_OS_SYSTEM_H_ */
#endif

View File

@ -1,51 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlBromSDK - OS - include
File: tick_addin.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FRIM_OS_TICK_BROM_H_
#define FRIM_OS_TICK_BROM_H_
#ifdef __cplusplus
extern "C" {
#endif
//---- sec to tick
#define OS_MicroSecondsToTicksBROM( usec ) ((OSTick)( ((OS_SYSTEM_CLOCK/1000) * (u64)(usec)) / 1024 / 1000 ))
#define OS_MicroSecondsToTicksBROM32( usec ) ((OSTick)( ((OS_SYSTEM_CLOCK/1000) * (u32)(usec)) / 1024 / 1000 ))
#define OS_MilliSecondsToTicksBROM( msec ) ((OSTick)( ((OS_SYSTEM_CLOCK/1000) * (u64)(msec)) / 1024 ))
#define OS_MilliSecondsToTicksBROM32( msec ) ((OSTick)( ((OS_SYSTEM_CLOCK/1000) * (u32)(msec)) / 1024 ))
#define OS_SecondsToTicksBROM( sec ) ((OSTick)( (OS_SYSTEM_CLOCK * (u64)(sec)) / 1024 ))
#define OS_SecondsToTicksBROM32( sec ) ((OSTick)( (OS_SYSTEM_CLOCK * (u32)(sec)) / 1024 ))
//---- tick to sec
#define OS_TicksToMicroSecondsBROM( tick ) ( ((u64)(tick) * 1024 * 1000) / (OS_SYSTEM_CLOCK/1000) )
#define OS_TicksToMicroSecondsBROM32( tick ) ( ((u32)(tick) * 1024 * 1000) / (OS_SYSTEM_CLOCK/1000) )
#define OS_TicksToMilliSecondsBROM( tick ) ( ((u64)(tick) * 1024) / (OS_SYSTEM_CLOCK/1000) )
#define OS_TicksToMilliSecondsBROM32( tick ) ( ((u32)(tick) * 1024) / (OS_SYSTEM_CLOCK/1000) )
#define OS_TicksToSecondsBROM( tick ) ( ((u64)(tick) * 1024) / OS_SYSTEM_CLOCK )
#define OS_TicksToSecondsBROM32( tick ) ( ((u32)(tick) * 1024) / OS_SYSTEM_CLOCK )
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FRIM_OS_TICK_BROM_H_ */
#endif

View File

@ -1,27 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - pm
File: pm.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_PM_H_
#define FIRM_PM_H_
#ifdef SDK_ARM7
#include <firm/pm/ARM7/pm_pmic_ex.h>
#include <firm/pm/ARM7/pm_init.h>
#endif // SDK_ARM7
/* FIRM_PM_H_ */
#endif

View File

@ -1,64 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - pm
File: pm_init.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_PM_ARM7_PM_INIT_H_
#define FIRM_PM_ARM7_PM_INIT_H_
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Name: PM_InitFIRM
Description: power B/L on
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void PM_InitFIRM( void );
/*---------------------------------------------------------------------------*
Name: PM_BackLightOn
Description: power B/L on if not set yet
Arguments: force TRUE: wait until valid condition
FALSE not set unless valid condition
Returns: None
*---------------------------------------------------------------------------*/
void PM_BackLightOn( BOOL force );
/*---------------------------------------------------------------------------*
Name: PM_Shutdown
Description: shutdown
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
void PM_Shutdown( void );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_PM_ARM7_PM_INIT_H_ */
#endif

View File

@ -1,73 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - pm
File: pm_pmic_ex.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_PM_PMIC_EX_H_
#define FIRM_PM_PMIC_EX_H_
#include <firm/misc.h>
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
//================================================================================
// PMIC ACCESS
//================================================================================
/*---------------------------------------------------------------------------*
Name: PMi_SetParams
Description: set control bit to device register
Arguments: reg : device register
setBits : bits to set
maskBits : bits to mask
Returns: None
*---------------------------------------------------------------------------*/
void PMi_SetParams( u8 reg, u8 setBits, u8 maskBits );
/*---------------------------------------------------------------------------*
Name: PMi_SetFlags
Description: set control bit to device register
Arguments: reg : device register
setBits : bits to set
Returns: None
*---------------------------------------------------------------------------*/
void PMi_SetFlags( u8 reg, u8 setBits );
/*---------------------------------------------------------------------------*
Name: PMi_ResetFlags
Description: clear control bit to device register
Arguments: reg : device register
clrBits : bits to set
Returns: None
*---------------------------------------------------------------------------*/
void PMi_ResetFlags( u8 reg, u8 clrBits );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_PM_PMIC_EX_H_ */
#endif

View File

@ -1,27 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - include - PXI
File: pxi.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef FIRM_PXI_H_
#define FIRM_PXI_H_
#include <nitro/pxi.h>
#include <firm/pxi/common/regname_ex.h>
#include <firm/pxi/common/pxi_firm.h>
/* FIRM_PXI_H_ */
#endif

View File

@ -1,224 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - -include - PXI
File: misc.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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef FIRM_PXI_COMMON_MISC_H_
#define FIRM_PXI_COMMON_MISC_H_
#include <firm/pxi.h>
#include <twl/memorymap.h>
#ifdef __cplusplus
extern "C" {
#endif
// PXI sync ID for bootrom
typedef enum
{
// from ARM7
FIRM_PXI_ID_COLDBOOT = 1, // _start
FIRM_PXI_ID_WARMBOOT = 2, // _start
FIRM_PXI_ID_INIT_ARM7 = 7, // PXI_InitFifoFIRM
FIRM_PXI_ID_LOAD_HEADER = 6, // FATFS_LoadHeader
FIRM_PXI_ID_LOAD_STATIC = 5, // FATFS_LoadStatic
FIRM_PXI_ID_LOAD_PIRIOD = 1, // *_LoadBuffer
// from ARM9
FIRM_PXI_ID_INIT_MMEM = 3, // _start
FIRM_PXI_ID_INIT_ARM9 = 9, // PXI_InitFifoFIRM
FIRM_PXI_ID_AUTH_HEADER = 10, // MI_LoadHeader
FIRM_PXI_ID_AUTH_STATIC = 11, // MI_LoadStatic
FIRM_PXI_ID_SET_PATH = 4, // main (nandfirm)
FIRM_PXI_ID_DONE_HEADER = 5, // main (nandfirm)
FIRM_PXI_ID_DONE_STATIC = 6, // main (nandfirm)
// from both of ARM9 and ARM7
FIRM_PXI_ID_NULL = 0,
FIRM_PXI_ID_ERR = 0xF
}
FIRMPxiID;
/*---------------------------------------------------------------------------*
Name: PXI_InitFifoFIRM
Description: initialize FIFO system for bootrom
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void PXI_InitFifoFIRM(void);
/*---------------------------------------------------------------------------*
Name: PXI_NotifyID
Description: send 4bit id to other processor
Arguments: id notifying id
Returns: None
*---------------------------------------------------------------------------*/
void PXI_NotifyID( u32 id );
/*---------------------------------------------------------------------------*
Name: PXI_WaitID
Description: Wait 4bit id from the other processor
Arguments: id waiting id
Returns: None
*---------------------------------------------------------------------------*/
void PXI_WaitID( u32 id );
/*---------------------------------------------------------------------------*
Name: PXI_RecvID
Description: Receive 4bit id from the other processor
Arguments: None
Returns: id
*---------------------------------------------------------------------------*/
u8 PXI_RecvID( void );
/*---------------------------------------------------------------------------*
Name: PXI_SendIDByIntf
Description: send 4bit id to other processor
Arguments: id notifying id
Returns: None
*---------------------------------------------------------------------------*/
void PXI_SendIDByIntf( u32 id );
/*---------------------------------------------------------------------------*
Name: PXI_RecvIDByIntf
Description: receive 4bit id from the other processor
Arguments: None
Returns: received id
*---------------------------------------------------------------------------*/
u32 PXI_RecvIDByIntf( void );
/*---------------------------------------------------------------------------*
Name: PXI_WaitIDByIntf
Description: Wait 4bit id from the other processor
Arguments: id waiting id
Returns: None
*---------------------------------------------------------------------------*/
void PXI_WaitIDByIntf( u32 id );
/*---------------------------------------------------------------------------*
Name: PXI_SendIDByFifo
Description: Send 32bit-word to another CPU via FIFO
Arguments:
Returns: None
*---------------------------------------------------------------------------*/
void PXI_SendIDByFifo(PXIFifoTag tag, u32 id);
/*---------------------------------------------------------------------------*
Name: PXI_RecvIDByFifo
Description: Recv 32bit-word from another CPU via FIFO
Arguments:
Returns: if error occured, returns minus value
*---------------------------------------------------------------------------*/
PXIFifoStatus PXI_RecvIDByFifo(PXIFifoTag tag, void* buf);
/*---------------------------------------------------------------------------*
Name: PXI_WaitIDByFifo
Description: Wait 32bit-word from another CPU via FIFO
Arguments: id waiting id
Returns: None
*---------------------------------------------------------------------------*/
void PXI_WaitIDByFifo(PXIFifoTag tag, u32 id);
/*---------------------------------------------------------------------------*
Name: PXI_SendDataByFifo
Description: Send 32bit-word to another CPU via FIFO
Arguments:
Returns: None
*---------------------------------------------------------------------------*/
void PXI_SendDataByFifo(PXIFifoTag tag, void* buf, int size);
/*---------------------------------------------------------------------------*
Name: PXI_RecvDataByFifo
Description: Recv 32bit-word to another CPU via FIFO
Arguments:
Returns: if error occured, returns minus value
*---------------------------------------------------------------------------*/
PXIFifoStatus PXI_RecvDataByFifo(PXIFifoTag tag, void* buf, int max_size);
/*---------------------------------------------------------------------------*
Name: PXI_IsSendFifoFull
Description: Check if send fifo is full?
Arguments: None.
Returns: if send fifo is full
*---------------------------------------------------------------------------*/
static inline BOOL PXI_IsSendFifoFull(void)
{
return (reg_PXI_FIFO_CNT & REG_PXI_FIFO_CNT_SEND_FULL_MASK) >> REG_PXI_FIFO_CNT_SEND_FULL_SHIFT;
}
/*---------------------------------------------------------------------------*
Name: PXI_IsRecvFifoEmpty
Description: Check if receive fifo is empty?
Arguments: None.
Returns: if receive fifo is empty
*---------------------------------------------------------------------------*/
static inline BOOL PXI_IsRecvFifoEmpty(void)
{
return (reg_PXI_FIFO_CNT & REG_PXI_FIFO_CNT_RECV_EMP_MASK) >> REG_PXI_FIFO_CNT_RECV_EMP_SHIFT;
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* FIRM_PXI_COMMON_MISC_H_ */

View File

@ -1,177 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlFirm - -include - PXI
File: pxi_firm.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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef FIRM_PXI_COMMON_FIRM_H_
#define FIRM_PXI_COMMON_FIRM_H_
#include <firm/pxi.h>
#include <twl/memorymap.h>
#ifdef __cplusplus
extern "C" {
#endif
// PXI sync ID for bootrom
typedef enum
{
// from ARM7
FIRM_PXI_ID_COLDBOOT = 1, // _start
FIRM_PXI_ID_WARMBOOT = 2, // _start
FIRM_PXI_ID_INIT_ARM7 = 7, // PXI_InitFifoFIRM
FIRM_PXI_ID_LOAD_HEADER = 6, // FATFS_LoadHeader
FIRM_PXI_ID_LOAD_STATIC = 5, // FATFS_LoadStatic
FIRM_PXI_ID_LOAD_BUFFER_SEMAPHORE = 1, // *_LoadBuffer
// from ARM9
FIRM_PXI_ID_INIT_MMEM = 3, // _start
FIRM_PXI_ID_INIT_ARM9 = 9, // PXI_InitFifoFIRM
FIRM_PXI_ID_AUTH_HEADER = 10, // MI_LoadHeader
FIRM_PXI_ID_AUTH_STATIC = 11, // MI_LoadStatic
FIRM_PXI_ID_SET_PATH = 4, // main (nandfirm)
FIRM_PXI_ID_DONE_HEADER = 5, // main (nandfirm)
FIRM_PXI_ID_DONE_STATIC = 6, // main (nandfirm)
// from both of ARM9 and ARM7
FIRM_PXI_ID_NULL = 0,
FIRM_PXI_ID_ERR = 0xF
}
FIRMPxiID;
/*---------------------------------------------------------------------------*
Name: PXI_InitFIRM
Description: initialize PXI for firm
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void PXI_InitFIRM(void);
/*---------------------------------------------------------------------------*
Name: PXI_SendStream
Description: Send data stream
Arguments: buf pointer to data buffer
size transfer size
Returns: None.
*---------------------------------------------------------------------------*/
void PXI_SendStream( const void* buf, int size );
/*---------------------------------------------------------------------------*
Name: PXI_RecvStream
Description: Receive data stream
Arguments: buf pointer to data buffer
size transfer size
Returns: None.
*---------------------------------------------------------------------------*/
void PXI_RecvStream( void* buf, int size );
/*---------------------------------------------------------------------------*
Name: PXI_NotifyID
Description: Send ID
Arguments: id id to send
Returns: None.
*---------------------------------------------------------------------------*/
void PXI_NotifyID( FIRMPxiID id );
/*---------------------------------------------------------------------------*
Name: PXI_RecvID
Description: Receive ID
Arguments: None
Returns: Received ID
*---------------------------------------------------------------------------*/
FIRMPxiID PXI_RecvID( void );
/*---------------------------------------------------------------------------*
Name: PXI_ReleaseLoadBufferSemaphore
Description: Release semaphore for *_LoadBuffer
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void PXI_ReleaseLoadBufferSemaphore( void );
/*---------------------------------------------------------------------------*
Name: PXI_AcquireLoadBufferSemaphore
Description: Acquire semaphore for *_LoadBuffer
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void PXI_AcquireLoadBufferSemaphore( void );
/*---------------------------------------------------------------------------*
Name: PXIi_SendIDByIntf
Description: send 4bit id to other processor
Arguments: id notifying id
Returns: None
*---------------------------------------------------------------------------*/
void PXIi_SendIDByIntf( u32 id );
/*---------------------------------------------------------------------------*
Name: PXIi_RecvIDByIntf
Description: receive 4bit id from the other processor
Arguments: None
Returns: received id
*---------------------------------------------------------------------------*/
u32 PXIi_RecvIDByIntf( void );
/*---------------------------------------------------------------------------*
Name: PXIi_WaitIDByIntf
Description: Wait 4bit id from the other processor
Arguments: id waiting id
Returns: None
*---------------------------------------------------------------------------*/
void PXIi_WaitIDByIntf( u32 id );
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* FIRM_PXI_COMMON_FIRM_H_ */

View File

@ -1,42 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - include - PXI
File: regname.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.
$Log: $
$NoKeywords: $
*---------------------------------------------------------------------------*/
#ifndef FIRM_PXI_COMMON_REGNAME_EX_H_
#define FIRM_PXI_COMMON_REGNAME_EX_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
#define REG_PXI_FIFO_CNT_SEND_FULL_SHIFT REG_PXI_SUBP_FIFO_CNT_SEND_FULL_SHIFT
#define REG_PXI_FIFO_CNT_RECV_EMP_SHIFT REG_PXI_SUBP_FIFO_CNT_RECV_EMP_SHIFT
#else // SDK_ARM7
#define REG_PXI_FIFO_CNT_SEND_FULL_SHIFT REG_PXI_MAINP_FIFO_CNT_SEND_FULL_SHIFT
#define REG_PXI_FIFO_CNT_RECV_EMP_SHIFT REG_PXI_MAINP_FIFO_CNT_RECV_EMP_SHIFT
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* FIRM_PXI_COMMON_REGNAME_EX_H_ */
#endif

View File

@ -1,507 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlFirm - tools - makelcf
# File: ARM7-BB-FIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x48000 > workram.check
}
KEEP_SECTION
{
.ctor
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(4); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0_firm.o (.text)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.wram>
<STATIC.OBJECT=.wram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.wram>
<STATIC.LIBRARY=.wram:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.MAIN.START = 0x02380000;
SDK_AUTOLOAD.MAIN.END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.BSS_END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.SIZE = 0;
SDK_AUTOLOAD.MAIN.BSS_SIZE = 0;
SDK_AUTOLOAD.WRAM.START = 0x037f8000;
SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.SIZE = 0;
SDK_AUTOLOAD.WRAM.BSS_SIZE = 0;
SDK_AUTOLOAD_START = SDK_STATIC_END;
SDK_AUTOLOAD_SIZE = 0;
SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>;
<FOREACH.AUTOLOADS>
.<AUTOLOAD.NAME>:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.AUTOLOAD.OBJECTS=.text>
<AUTOLOAD.OBJECT=.text:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.text>
<AUTOLOAD.LIBRARY=.text:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.wram>
<AUTOLOAD.OBJECT=.wram:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.wram>
<AUTOLOAD.LIBRARY=.wram:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
} > <AUTOLOAD.NAME>
.<AUTOLOAD.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
} >> <AUTOLOAD.NAME>
<END.AUTOLOADS>
SDK_AUTOLOAD_MAIN_START = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD_MAIN_END = SDK_AUTOLOAD.MAIN.END;
SDK_AUTOLOAD_MAIN_BSS_END = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_AUTOLOAD_MAIN_SIZE = SDK_AUTOLOAD.MAIN.SIZE;
SDK_AUTOLOAD_MAIN_BSS_SIZE = SDK_AUTOLOAD.MAIN.BSS_SIZE;
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > 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);
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID
SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>;
SDK_OVERLAY.<OVERLAY.NAME>.START =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.OVERLAY.OBJECTS=.text>
<OVERLAY.OBJECT=.text:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.text>
<OVERLAY.LIBRARY=.text:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.init>
<OVERLAY.OBJECT=.init:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.init>
<OVERLAY.LIBRARY=.init:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.OVERLAY.OBJECTS=.ctor>
<OVERLAY.OBJECT=.ctor:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.ctor>
<OVERLAY.LIBRARY=.ctor:t>
<END.OVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.OVERLAY.OBJECTS=.sdata>
<OVERLAY.OBJECT=.sdata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sdata>
<OVERLAY.LIBRARY=.sdata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
SDK_OVERLAY.<OVERLAY.NAME>.END =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START;
} > <OVERLAY.NAME>
.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.OVERLAY.OBJECTS=.bss>
<OVERLAY.OBJECT=.bss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.bss>
<OVERLAY.LIBRARY=.bss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .;
SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
} >> <OVERLAY.NAME>
<END.OVERLAYS>
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(4);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>
############################ OTHERS #################################
SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_WRAM_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
# work ram size checker
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM:
{
. = . + SDK_SECTION_ARENA_START - <STATIC.ADDRESS> + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.WORKRAM
}

View File

@ -1,28 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM7-BB-NORFIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x037f8000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
Object * (.wram)
StackSize 1024 512
}

View File

@ -1,507 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlFirm - tools - makelcf
# File: ARM7-BB-NORFIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x48000 > workram.check
}
KEEP_SECTION
{
.ctor
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(4); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0.o (.text)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.wram>
<STATIC.OBJECT=.wram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.wram>
<STATIC.LIBRARY=.wram:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.MAIN.START = 0x02380000;
SDK_AUTOLOAD.MAIN.END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.BSS_END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.SIZE = 0;
SDK_AUTOLOAD.MAIN.BSS_SIZE = 0;
SDK_AUTOLOAD.WRAM.START = 0x037f8000;
SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.SIZE = 0;
SDK_AUTOLOAD.WRAM.BSS_SIZE = 0;
SDK_AUTOLOAD_START = SDK_STATIC_END;
SDK_AUTOLOAD_SIZE = 0;
SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>;
<FOREACH.AUTOLOADS>
.<AUTOLOAD.NAME>:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.AUTOLOAD.OBJECTS=.text>
<AUTOLOAD.OBJECT=.text:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.text>
<AUTOLOAD.LIBRARY=.text:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.wram>
<AUTOLOAD.OBJECT=.wram:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.wram>
<AUTOLOAD.LIBRARY=.wram:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
} > <AUTOLOAD.NAME>
.<AUTOLOAD.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
} >> <AUTOLOAD.NAME>
<END.AUTOLOADS>
SDK_AUTOLOAD_MAIN_START = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD_MAIN_END = SDK_AUTOLOAD.MAIN.END;
SDK_AUTOLOAD_MAIN_BSS_END = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_AUTOLOAD_MAIN_SIZE = SDK_AUTOLOAD.MAIN.SIZE;
SDK_AUTOLOAD_MAIN_BSS_SIZE = SDK_AUTOLOAD.MAIN.BSS_SIZE;
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > 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);
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID
SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>;
SDK_OVERLAY.<OVERLAY.NAME>.START =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.OVERLAY.OBJECTS=.text>
<OVERLAY.OBJECT=.text:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.text>
<OVERLAY.LIBRARY=.text:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.init>
<OVERLAY.OBJECT=.init:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.init>
<OVERLAY.LIBRARY=.init:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.OVERLAY.OBJECTS=.ctor>
<OVERLAY.OBJECT=.ctor:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.ctor>
<OVERLAY.LIBRARY=.ctor:t>
<END.OVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.OVERLAY.OBJECTS=.sdata>
<OVERLAY.OBJECT=.sdata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sdata>
<OVERLAY.LIBRARY=.sdata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
SDK_OVERLAY.<OVERLAY.NAME>.END =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START;
} > <OVERLAY.NAME>
.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.OVERLAY.OBJECTS=.bss>
<OVERLAY.OBJECT=.bss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.bss>
<OVERLAY.LIBRARY=.bss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .;
SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
} >> <OVERLAY.NAME>
<END.OVERLAYS>
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(4);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>
############################ OTHERS #################################
SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_WRAM_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
# work ram size checker
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM:
{
. = . + SDK_SECTION_ARENA_START - <STATIC.ADDRESS> + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.WORKRAM
}

View File

@ -1,28 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM7-BB-NORFIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x037f8000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
Object * (.wram)
StackSize 1024 512
}

View File

@ -1,419 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlSDK - include
# File: ARM7-TS-FIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.FLXSUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYDEFS>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYTABLE>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.FLXSUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM_SHARED (RWX) : ORIGIN = 0x037b8000, LENGTH = 0x48000 > workram.check
# reached OSFromBrom7Buf before OS_BOOT_CODE_BUF
check.WORKRAM (RWX) : ORIGIN = 0x037b8000, LENGTH = 0x54000 > workram.check
binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.LTDSUFFIX>
<FOREACH.LTDAUTOLOADS>
<LTDAUTOLOAD.NAME> (RWX) : ORIGIN = <LTDAUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<END.LTDAUTOLOADS>
binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYDEFS>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYTABLE>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>
<FOREACH.LTDOVERLAYS>
<LTDOVERLAY.NAME> (RWXO): ORIGIN = <LTDOVERLAY.ADDRESS>, LENGTH = 0x0 > <LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>
<END.LTDOVERLAYS>
check.LTDMAIN (RWX) : ORIGIN = 0x02f88000, LENGTH = 0x74000 > ltdmain.check
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
SDK_STATIC_TEXT_END =.;
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
__exception_table_start__ =.;
EXCEPTION
__exception_table_end__ =.;
SDK_STATIC_ETABLE_END =.;
#
# DATA BLOCK: READ WRITE
#
. = ALIGN(4);
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.wram>
<STATIC.OBJECT=.wram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.wram>
<STATIC.LIBRARY=.wram:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdwram>
<STATIC.OBJECT=.ltdwram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdwram>
<STATIC.LIBRARY=.ltdwram:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.rsvwram>
<STATIC.OBJECT=.rsvwram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rsvwram>
<STATIC.LIBRARY=.rsvwram:t>
<END.STATIC.LIBRARIES>
#:::::::::: data
SDK_STATIC_DATA_END =.;
. = ALIGN(4);
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
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdwram>
<STATIC.OBJECT=.ltdwram.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdwram>
<STATIC.LIBRARY=.ltdwram.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.rsvwram>
<STATIC.OBJECT=.rsvwram.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rsvwram>
<STATIC.LIBRARY=.rsvwram.bss:t>
<END.STATIC.LIBRARIES>
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.WRAM.START = SDK_STATIC_BSS_END;
SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.SIZE = 0;
SDK_AUTOLOAD.WRAM.BSS_SIZE = 0;
SDK_AUTOLOAD_START = SDK_STATIC_END;
SDK_AUTOLOAD_SIZE = 0;
SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>;
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400;
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_START;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
} > 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(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
WRITEW _start_LtdModuleParams - ADDR(.<STATIC.NAME>);
} > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(4);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>F:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.FLXSUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>F
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>F:
{
<FOREACH.OVERLAYS>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>F
############################ OTHERS #################################
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM_SHARED:
{
. = SDK_STATIC_END;
} > check.WORKRAM_SHARED
.check.WORKRAM:
{
. = SDK_STATIC_BSS_END;
} > check.WORKRAM
########################### LTDAUTOLOADS ############################
SDK_LTDAUTOLOAD.LTDMAIN.START = 0x02f88000;
SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0;
SDK_LTDAUTOLOAD_TOP_START = 0x02e80000;
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 = <NUMBER.LTDAUTOLOADS>;
.binary.LTDAUTOLOAD_TOP:
{
WRITEW 0;
} > binary.LTDAUTOLOAD_TOP
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:
{
<FOREACH.LTDAUTOLOADS>
WRITEW ADDR(.<LTDAUTOLOAD.NAME>);
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE;
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_START;
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_SIZE;
<END.LTDAUTOLOADS>
} > 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 = <NUMBER.LTDOVERLAYS>;
########################## LTDOVERLAYDEFS ###########################
.<PROPERTY.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
<FOREACH.LTDOVERLAYS>
WRITES ("<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>");
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYDEFS>L
######################### LTDOVERLAYTABLE ###########################
.<PROPERTY.LTDOVERLAYTABLE>L:
{
<FOREACH.LTDOVERLAYS>
WRITES <LTDOVERLAY.ID> # overlay ID
WRITEW ADDR(.<LTDOVERLAY.NAME>); # load address
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <LTDOVERLAY.ID> # ROM file ID
WRITEW 0; # Reserved
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYTABLE>L
############################ OTHERS #################################
SDK_SUBPRIV_ARENA_LO = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END;
.check.LTDMAIN:
{
. = SDK_SUBPRIV_ARENA_LO;
} > check.LTDMAIN
}

View File

@ -1,43 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM7-TS-FIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x037b8000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
Object * (.etable)
Object * (.wram)
Object * (.rsvwram)
Object * (.ltdwram)
Object * (.ltdmain)
StackSize 1024 1024
}
#Autoload WRAM
#{
# Address $(ADDRESS_LTDWRAM)
#}
#Ltdautoload LTDMAIN
#{
## Address 0x02f88000
# Address 0x02380000
#}

View File

@ -1,507 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlFirm - tools - makelcf
# File: ARM7-TS-NORFIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x48000 > workram.check
}
KEEP_SECTION
{
.ctor
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(4); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0.o (.text)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.wram>
<STATIC.OBJECT=.wram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.wram>
<STATIC.LIBRARY=.wram:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.MAIN.START = 0x02380000;
SDK_AUTOLOAD.MAIN.END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.BSS_END = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD.MAIN.SIZE = 0;
SDK_AUTOLOAD.MAIN.BSS_SIZE = 0;
SDK_AUTOLOAD.WRAM.START = 0x037f8000;
SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.SIZE = 0;
SDK_AUTOLOAD.WRAM.BSS_SIZE = 0;
SDK_AUTOLOAD_START = SDK_STATIC_END;
SDK_AUTOLOAD_SIZE = 0;
SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>;
<FOREACH.AUTOLOADS>
.<AUTOLOAD.NAME>:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.AUTOLOAD.OBJECTS=.text>
<AUTOLOAD.OBJECT=.text:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.text>
<AUTOLOAD.LIBRARY=.text:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.wram>
<AUTOLOAD.OBJECT=.wram:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.wram>
<AUTOLOAD.LIBRARY=.wram:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
} > <AUTOLOAD.NAME>
.<AUTOLOAD.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
} >> <AUTOLOAD.NAME>
<END.AUTOLOADS>
SDK_AUTOLOAD_MAIN_START = SDK_AUTOLOAD.MAIN.START;
SDK_AUTOLOAD_MAIN_END = SDK_AUTOLOAD.MAIN.END;
SDK_AUTOLOAD_MAIN_BSS_END = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_AUTOLOAD_MAIN_SIZE = SDK_AUTOLOAD.MAIN.SIZE;
SDK_AUTOLOAD_MAIN_BSS_SIZE = SDK_AUTOLOAD.MAIN.BSS_SIZE;
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
SDK_AUTOLOAD_WRAM_BSS_END = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > 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);
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID
SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>;
SDK_OVERLAY.<OVERLAY.NAME>.START =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.OVERLAY.OBJECTS=.text>
<OVERLAY.OBJECT=.text:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.text>
<OVERLAY.LIBRARY=.text:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.init>
<OVERLAY.OBJECT=.init:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.init>
<OVERLAY.LIBRARY=.init:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.OVERLAY.OBJECTS=.ctor>
<OVERLAY.OBJECT=.ctor:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.ctor>
<OVERLAY.LIBRARY=.ctor:t>
<END.OVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.OVERLAY.OBJECTS=.sdata>
<OVERLAY.OBJECT=.sdata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sdata>
<OVERLAY.LIBRARY=.sdata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
SDK_OVERLAY.<OVERLAY.NAME>.END =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START;
} > <OVERLAY.NAME>
.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(4);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.OVERLAY.OBJECTS=.bss>
<OVERLAY.OBJECT=.bss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.bss>
<OVERLAY.LIBRARY=.bss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .;
SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
} >> <OVERLAY.NAME>
<END.OVERLAYS>
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(4);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>
############################ OTHERS #################################
SDK_SUBPRIV_ARENA_LO = SDK_AUTOLOAD.MAIN.BSS_END;
SDK_WRAM_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
# work ram size checker
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM:
{
. = . + SDK_SECTION_ARENA_START - <STATIC.ADDRESS> + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.WORKRAM
}

View File

@ -1,28 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM7-TS-NORFIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x037f8000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
Object * (.wram)
StackSize 1024 512
}

View File

@ -1,407 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlSDK - include
# File: ARM7-TS-FIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 #> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 #>> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
# binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYDEFS>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYTABLE>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.FLXSUFFIX>
<END.OVERLAYS>
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.WORKRAM_SHARED (RWX) : ORIGIN = 0x037b8000, LENGTH = 0x48000 > workram.check
# reached OSFromBrom7Buf before OS_BOOT_CODE_BUF
check.WORKRAM (RWX) : ORIGIN = 0x037b8000, LENGTH = 0x54000 > workram.check
# binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.LTDSUFFIX>
<FOREACH.LTDAUTOLOADS>
<LTDAUTOLOAD.NAME> (RWX) : ORIGIN = <LTDAUTOLOAD.ADDRESS>, LENGTH = 0x0 #>> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<END.LTDAUTOLOADS>
# binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYDEFS>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYTABLE>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>
<FOREACH.LTDOVERLAYS>
<LTDOVERLAY.NAME> (RWXO): ORIGIN = <LTDOVERLAY.ADDRESS>, LENGTH = 0x0 > <LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>
<END.LTDOVERLAYS>
check.LTDMAIN (RWX) : ORIGIN = 0x02f88000, LENGTH = 0x74000 > ltdmain.check
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
SDK_STATIC_TEXT_END =.;
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
__exception_table_start__ =.;
EXCEPTION
__exception_table_end__ =.;
SDK_STATIC_ETABLE_END =.;
#
# DATA BLOCK: READ WRITE
#
. = ALIGN(4);
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.wram>
<STATIC.OBJECT=.wram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.wram>
<STATIC.LIBRARY=.wram:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdwram>
<STATIC.OBJECT=.ltdwram:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdwram>
<STATIC.LIBRARY=.ltdwram:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain:t>
<END.STATIC.LIBRARIES>
#:::::::::: data
SDK_STATIC_DATA_END =.;
. = ALIGN(4);
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
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4);
. = ALIGN(4);
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdwram>
<STATIC.OBJECT=.ltdwram.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdwram>
<STATIC.LIBRARY=.ltdwram.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain.bss:t>
<END.STATIC.LIBRARIES>
#:::::::::: bss
. = ALIGN(4);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ AUTOLOADS ##############################
SDK_AUTOLOAD.WRAM.START = SDK_STATIC_BSS_END;
SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD.WRAM.SIZE = 0;
SDK_AUTOLOAD.WRAM.BSS_SIZE = 0;
SDK_AUTOLOAD_START = SDK_STATIC_END;
SDK_AUTOLOAD_SIZE = 0;
SDK_AUTOLOAD_NUMBER = <NUMBER.AUTOLOADS>;
SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START;
SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END;
SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END;
SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400;
SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE;
SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE;
############################ AUTOLOAD_INFO ##########################
.binary.AUTOLOAD_INFO:
{
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_START;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
} >> <STATIC.NAME> #> 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(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
WRITEW _start_LtdModuleParams - ADDR(.<STATIC.NAME>);
} >> <STATIC.NAME> #> binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(4);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>F:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.FLXSUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>F
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>F:
{
<FOREACH.OVERLAYS>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>F
############################ OTHERS #################################
SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # allocated in WRAM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.WORKRAM_SHARED:
{
. = SDK_STATIC_END;
} > check.WORKRAM_SHARED
.check.WORKRAM:
{
. = SDK_STATIC_BSS_END;
} > check.WORKRAM
########################### LTDAUTOLOADS ############################
SDK_LTDAUTOLOAD.LTDMAIN.START = 0x02f88000;
SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0;
SDK_LTDAUTOLOAD_TOP_START = 0x02e80000;
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 = <NUMBER.LTDAUTOLOADS>;
.binary.LTDAUTOLOAD_TOP:
{
WRITEW 0;
} >> <STATIC.NAME> #> binary.LTDAUTOLOAD_TOP
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:
{
<FOREACH.LTDAUTOLOADS>
WRITEW ADDR(.<LTDAUTOLOAD.NAME>);
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE;
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_START;
WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_SIZE;
<END.LTDAUTOLOADS>
} >> <STATIC.NAME> #> 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 = <NUMBER.LTDOVERLAYS>;
########################## LTDOVERLAYDEFS ###########################
.<PROPERTY.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
<FOREACH.LTDOVERLAYS>
WRITES ("<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>");
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYDEFS>L
######################### LTDOVERLAYTABLE ###########################
.<PROPERTY.LTDOVERLAYTABLE>L:
{
<FOREACH.LTDOVERLAYS>
WRITES <LTDOVERLAY.ID> # overlay ID
WRITEW ADDR(.<LTDOVERLAY.NAME>); # load address
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <LTDOVERLAY.ID> # ROM file ID
WRITEW 0; # Reserved
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYTABLE>L
############################ OTHERS #################################
SDK_SUBPRIV_ARENA_LO = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END;
.check.LTDMAIN:
{
. = SDK_SUBPRIV_ARENA_LO;
} > check.LTDMAIN
}

View File

@ -1,602 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlFirm - tools - makelcf
# File: ARM9-BB-FIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
# binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files
check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
}
FORCE_ACTIVE
{
SVC_SoftReset
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(32); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
crt0_firm.o (.text)
libsyscall.a (.text)
crt0_firm.o (.rodata)
#
# .version セクションを追加しています。
# このセクションに含まれる情報はロットチェックの際に
# 必要となりますので、必ずこの位置に残すようにして下さい。
#
* (.version)
OBJECT(TwlMain,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY_DIGEST =.;
# NO DIGEST
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ 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 = 0x027e0000;
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 = <NUMBER.AUTOLOADS>;
<FOREACH.AUTOLOADS>
.<AUTOLOAD.NAME>:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.AUTOLOAD.OBJECTS=.text>
<AUTOLOAD.OBJECT=.text:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.text>
<AUTOLOAD.LIBRARY=.text:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
} > <AUTOLOAD.NAME>
.<AUTOLOAD.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
} >> <AUTOLOAD.NAME>
<END.AUTOLOADS>
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:
{
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > 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(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
} >> <STATIC.NAME> # > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID
SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>;
SDK_OVERLAY.<OVERLAY.NAME>.START =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.OVERLAY.OBJECTS=.text>
<OVERLAY.OBJECT=.text:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.text>
<OVERLAY.LIBRARY=.text:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.init>
<OVERLAY.OBJECT=.init:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.init>
<OVERLAY.LIBRARY=.init:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.OVERLAY.OBJECTS=.ctor>
<OVERLAY.OBJECT=.ctor:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.ctor>
<OVERLAY.LIBRARY=.ctor:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.sinit>
<OVERLAY.OBJECT=.sinit:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sinit>
<OVERLAY.LIBRARY=.sinit:t>
<END.OVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.OVERLAY.OBJECTS=.sdata>
<OVERLAY.OBJECT=.sdata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sdata>
<OVERLAY.LIBRARY=.sdata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
SDK_OVERLAY.<OVERLAY.NAME>.END =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START;
} > <OVERLAY.NAME>
.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.OVERLAY.OBJECTS=.bss>
<OVERLAY.OBJECT=.bss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.bss>
<OVERLAY.LIBRARY=.bss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .;
SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
} >> <OVERLAY.NAME>
<END.OVERLAYS>
############################ MAIN EX ##################################
# MAIN EX Area
.dummy.MAIN_EX:
{
. = ALIGN(32);
} > dummy.MAIN_EX
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(32);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
.arena.MAIN_EX:
{
. = ALIGN(32);
SDK_SECTION_ARENA_EX_START =.;
} > arena.MAIN_EX
.arena.ITCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_ITCM_START =.;
} > arena.ITCM
.arena.DTCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_DTCM_START =.;
} > arena.DTCM
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>
############################ OTHERS #################################
SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in DTCM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # when 0 means all remains of DTCM
# Module filelist
.binary.MODULE_FILES:
{
WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>");
} > binary.MODULE_FILES
# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
.check.ITCM:
{
. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
} > check.ITCM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.DTCM:
{
. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.DTCM
}

View File

@ -1,42 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM9-BB-NORFIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x03800000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
}
Autoload ITCM
{
Address 0x01ff8000
Object * (.itcm)
Object $(OBJS_AUTOLOAD) (.text)
}
Autoload DTCM
{
Address 0x027e0000
Object * (.dtcm)
Object $(OBJS_AUTOLOAD) (.data)
Object $(OBJS_AUTOLOAD) (.bss)
}

View File

@ -1,602 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlFirm - tools - makelcf
# File: ARM9-BB-NORFIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
# binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files
check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
}
FORCE_ACTIVE
{
SVC_SoftReset
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(32); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
crt0.o (.text)
libsyscall.a (.text)
crt0.o (.rodata)
#
# .version セクションを追加しています。
# このセクションに含まれる情報はロットチェックの際に
# 必要となりますので、必ずこの位置に残すようにして下さい。
#
* (.version)
OBJECT(TwlMain,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY_DIGEST =.;
# NO DIGEST
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ 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 = 0x027e0000;
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 = <NUMBER.AUTOLOADS>;
<FOREACH.AUTOLOADS>
.<AUTOLOAD.NAME>:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.AUTOLOAD.OBJECTS=.text>
<AUTOLOAD.OBJECT=.text:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.text>
<AUTOLOAD.LIBRARY=.text:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
} > <AUTOLOAD.NAME>
.<AUTOLOAD.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
} >> <AUTOLOAD.NAME>
<END.AUTOLOADS>
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:
{
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > 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(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
} >> <STATIC.NAME> # > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID
SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>;
SDK_OVERLAY.<OVERLAY.NAME>.START =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.OVERLAY.OBJECTS=.text>
<OVERLAY.OBJECT=.text:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.text>
<OVERLAY.LIBRARY=.text:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.init>
<OVERLAY.OBJECT=.init:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.init>
<OVERLAY.LIBRARY=.init:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.OVERLAY.OBJECTS=.ctor>
<OVERLAY.OBJECT=.ctor:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.ctor>
<OVERLAY.LIBRARY=.ctor:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.sinit>
<OVERLAY.OBJECT=.sinit:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sinit>
<OVERLAY.LIBRARY=.sinit:t>
<END.OVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.OVERLAY.OBJECTS=.sdata>
<OVERLAY.OBJECT=.sdata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sdata>
<OVERLAY.LIBRARY=.sdata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
SDK_OVERLAY.<OVERLAY.NAME>.END =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START;
} > <OVERLAY.NAME>
.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.OVERLAY.OBJECTS=.bss>
<OVERLAY.OBJECT=.bss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.bss>
<OVERLAY.LIBRARY=.bss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .;
SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
} >> <OVERLAY.NAME>
<END.OVERLAYS>
############################ MAIN EX ##################################
# MAIN EX Area
.dummy.MAIN_EX:
{
. = ALIGN(32);
} > dummy.MAIN_EX
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(32);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
.arena.MAIN_EX:
{
. = ALIGN(32);
SDK_SECTION_ARENA_EX_START =.;
} > arena.MAIN_EX
.arena.ITCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_ITCM_START =.;
} > arena.ITCM
.arena.DTCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_DTCM_START =.;
} > arena.DTCM
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>
############################ OTHERS #################################
SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in DTCM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # when 0 means all remains of DTCM
# Module filelist
.binary.MODULE_FILES:
{
WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>");
} > binary.MODULE_FILES
# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
.check.ITCM:
{
. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
} > check.ITCM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.DTCM:
{
. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.DTCM
}

View File

@ -1,42 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM9-BB-NORFIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x03800000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
}
Autoload ITCM
{
Address 0x01ff8000
Object * (.itcm)
Object $(OBJS_AUTOLOAD) (.text)
}
Autoload DTCM
{
Address 0x027e0000
Object * (.dtcm)
Object $(OBJS_AUTOLOAD) (.data)
Object $(OBJS_AUTOLOAD) (.bss)
}

View File

@ -1,506 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlSDK - include
# File: ARM9-TS-FIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.FLXSUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<END.AUTOLOADS>
binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYDEFS>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYTABLE>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.FLXSUFFIX>
<END.OVERLAYS>
dummy.MAIN_EX.NITRO (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0
arena.MAIN.NITRO (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.MAIN_EX.NITRO (RW) : ORIGIN = AFTER(dummy.MAIN_EX.NITRO<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.ITCM (RW) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
check.WORKRAM (RWX) : ORIGIN = 0x037b8000, LENGTH = 0x48000 > workram.check
binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.LTDSUFFIX>
<FOREACH.LTDAUTOLOADS>
<LTDAUTOLOAD.NAME> (RWX) : ORIGIN = <LTDAUTOLOAD.ADDRESS>, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<END.LTDAUTOLOADS>
binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYDEFS>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYTABLE>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>
<FOREACH.LTDOVERLAYS>
<LTDOVERLAY.NAME> (RWXO): ORIGIN = <LTDOVERLAY.ADDRESS>, LENGTH = 0x0 > <LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>
<END.LTDOVERLAYS>
dummy.MAIN_EX.TWL (RW) : ORIGIN = 0x0d000000, LENGTH = 0x0
arena.WRAM.TWL (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>,LTDMAIN<FOREACH.LTDOVERLAYS=MAIN>,<LTDOVERLAY.NAME><END.LTDOVERLAYS>), LENGTH = 0x0
arena.MAIN.TWL (RW) : ORIGIN = 0x02000400, LENGTH = 0x0
arena.MAIN_EX.TWL (RW) : ORIGIN = AFTER(dummy.MAIN_EX.TWL,<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>,LTDMAIN<FOREACH.LTDOVERLAYS=MAIN>,<LTDOVERLAY.NAME><END.LTDOVERLAYS>), LENGTH = 0x0
binary.MODULE_FILES (RW) : ORIGIN = 0, LENGTH = 0x0 > component.files
}
FORCE_ACTIVE
{
SVC_SoftReset
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4);
. = ALIGN(32); # Fit to cache line
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0_firm.o (.text)
crt0_firm.o (.rodata)
libsyscall.a (.text)
#
# .version セクションを追加しています。
# このセクションに含まれる情報はロットチェックの際に
# 必要となりますので、必ずこの位置に残すようにして下さい。
#
* (.version)
OBJECT(TwlMain,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
__exception_table_start__ =.;
EXCEPTION
__exception_table_end__ =.;
SDK_STATIC_ETABLE_END =.;
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
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
<FOREACH.STATIC.OBJECTS=.itcm>
<STATIC.OBJECT=.itcm:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.itcm>
<STATIC.LIBRARY=.itcm:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.dtcm>
<STATIC.OBJECT=.dtcm:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.dtcm>
<STATIC.LIBRARY=.dtcm:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY_DIGEST =.;
# NO DIGEST
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
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4);
. = ALIGN(32); # Fit to cache line
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.itcm>
<STATIC.OBJECT=.itcm.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.itcm>
<STATIC.LIBRARY=.itcm.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.dtcm>
<STATIC.OBJECT=.dtcm.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.dtcm>
<STATIC.LIBRARY=.dtcm.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
#:::::::::: bss
. = ALIGN(32);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ 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 = <NUMBER.AUTOLOADS>;
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:
{
} > 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(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
WRITEW _start_LtdModuleParams - ADDR(.<STATIC.NAME>);
} > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>F:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.FLXSUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>F
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>F:
{
<FOREACH.OVERLAYS>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>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 = <STATIC.IRQSTACKSIZE>; # allocated in DTCM
SDK_SYS_STACKSIZE = <STATIC.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;
<FOREACH.OVERLAYS=ITCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
} > check.ITCM
.check.DTCM:
{
. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
<FOREACH.OVERLAYS=DTCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
. = . + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.DTCM
.check.WORKRAM:
{
. = SDK_STATIC_BSS_END;
} > check.WORKRAM
########################### LTDAUTOLOADS ############################
SDK_LTDAUTOLOAD.LTDMAIN.START = SDK_STATIC_BSS_END;
SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = 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 = <NUMBER.LTDAUTOLOADS>;
.binary.LTDAUTOLOAD_TOP:
{
WRITEW 0;
} > binary.LTDAUTOLOAD_TOP
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:
{
} > 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 = <NUMBER.LTDOVERLAYS>;
########################## LTDOVERLAYDEFS ###########################
.<PROPERTY.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
<FOREACH.LTDOVERLAYS>
WRITES ("<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>");
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYDEFS>L
######################### LTDOVERLAYTABLE ###########################
.<PROPERTY.LTDOVERLAYTABLE>L:
{
<FOREACH.LTDOVERLAYS>
WRITES <LTDOVERLAY.ID> # overlay ID
WRITEW ADDR(.<LTDOVERLAY.NAME>); # load address
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <LTDOVERLAY.ID> # ROM file ID
WRITEW 0; # Reserved
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYTABLE>L
############################ ARENA ##################################
.dummy.MAIN_EX.TWL:
{
. = ALIGN(32);
} > dummy.MAIN_EX.TWL
.arena.WRAM.TWL:
{
. = ALIGN(32);
SDK_LTDMAIN_ARENA_LO =.;
} > arena.WRAM.TWL
.arena.MAIN_EX.TWL:
{
. = ALIGN(32);
SDK_LTDMAIN_EX_ARENA_LO =.;
} > arena.MAIN_EX.TWL
############################ OTHERS #################################
# Module filelist
.binary.MODULE_FILES:
{
WRITES ("<STATIC.NAME><PROPERTY.FLXSUFFIX>");
WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>");
WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>");
WRITES ("<STATIC.NAME><PROPERTY.LTDSUFFIX>");
WRITES ("<PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>");
WRITES ("<PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>");
} > binary.MODULE_FILES
}

View File

@ -1,57 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM9-TS-FIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
# Address 0x037c0000
Address 0x037b8000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
Object * (.itcm)
Object $(OBJS_AUTOLOAD) (.text)
Object $(OBJS_AUTOLOAD) (.rodata)
Object $(OBJS_AUTOLOAD) (.init)
Object $(OBJS_AUTOLOAD) (.ctor)
Object $(OBJS_AUTOLOAD) (.sinit)
Object * (.ltdmain)
Object $(OBJS_LTDAUTOLOAD)
Library $(LLIBS_EX) $(GLIBS_EX)
Object * (.dtcm)
Object $(OBJS_AUTOLOAD) (.data)
Object $(OBJS_AUTOLOAD) (.sdata)
Object $(OBJS_AUTOLOAD) (.bss)
Object $(OBJS_AUTOLOAD) (.sbss)
}
Autoload ITCM
{
Address 0x01ff8000
}
Autoload DTCM
{
Address $(ADDRESS_DTCM)
}
Ltdautoload LTDMAIN
{
# NITRO/TWL 共有のオーバーレイが在る場合は、さらにその後ろに配置する必要があります。
After $(TARGET_NAME)
}

View File

@ -1,602 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlFirm - tools - makelcf
# File: ARM9-TS-NORFIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 # > <STATIC.NAME><PROPERTY.SUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.SUFFIX>
# binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYDEFS> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>
<PROPERTY.OVERLAYTABLE> (RW) : ORIGIN = AFTER(<STATIC.NAME>), LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.SUFFIX>
<END.OVERLAYS>
dummy.MAIN_EX (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0
arena.MAIN (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.MAIN_EX (RW) : ORIGIN = AFTER(dummy.MAIN_EX<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
binary.MODULE_FILES (RW) : ORIGIN = 0x0, LENGTH = 0x0 > component.files
check.ITCM (RWX) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
}
FORCE_ACTIVE
{
SVC_SoftReset
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4); . = ALIGN(32); # Fit to cache line
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
crt0.o (.text)
libsyscall.a (.text)
crt0.o (.rodata)
#
# .version セクションを追加しています。
# このセクションに含まれる情報はロットチェックの際に
# 必要となりますので、必ずこの位置に残すようにして下さい。
#
* (.version)
OBJECT(TwlMain,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
EXCEPTION
SDK_STATIC_ETABLE_END =.;
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_STATIC_SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_STATIC_TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_STATIC_DATA_START =.;
#:::::::::: data
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY_DIGEST =.;
# NO DIGEST
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
__exception_table_start__ = SDK_STATIC_ETABLE_START; # for exception table
__exception_table_end__ = SDK_STATIC_ETABLE_END; # for exception table
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ 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 = 0x027e0000;
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 = <NUMBER.AUTOLOADS>;
<FOREACH.AUTOLOADS>
.<AUTOLOAD.NAME>:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_AUTOLOAD_<AUTOLOAD.NAME>_ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.ID =<AUTOLOAD.ID>;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.START =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.AUTOLOAD.OBJECTS=.text>
<AUTOLOAD.OBJECT=.text:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.text>
<AUTOLOAD.LIBRARY=.text:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.rodata>
<AUTOLOAD.OBJECT=.rodata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.rodata>
<AUTOLOAD.LIBRARY=.rodata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: text/rodata
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.AUTOLOAD.OBJECTS=.sdata>
<AUTOLOAD.OBJECT=.sdata:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sdata>
<AUTOLOAD.LIBRARY=.sdata:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.data>
<AUTOLOAD.OBJECT=.data:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.data>
<AUTOLOAD.LIBRARY=.data:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.END =.;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.TEXT_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.DATA_START;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.START;
SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
} > <AUTOLOAD.NAME>
.<AUTOLOAD.NAME>.bss:
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.AUTOLOAD.SEARCHSYMBOLS>
SEARCH_SYMBOL <AUTOLOAD.SEARCHSYMBOL>;
<END.AUTOLOAD.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.AUTOLOAD.OBJECTS=.sbss>
<AUTOLOAD.OBJECT=.sbss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.sbss>
<AUTOLOAD.LIBRARY=.sbss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.bss>
<AUTOLOAD.OBJECT=.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.bss>
<AUTOLOAD.LIBRARY=.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.dtcm>
<AUTOLOAD.OBJECT=.dtcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.dtcm>
<AUTOLOAD.LIBRARY=.dtcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
<FOREACH.AUTOLOAD.OBJECTS=.itcm>
<AUTOLOAD.OBJECT=.itcm.bss:t>
<END.AUTOLOAD.OBJECTS>
<FOREACH.AUTOLOAD.LIBRARIES=.itcm>
<AUTOLOAD.LIBRARY=.itcm.bss:t>
<END.AUTOLOAD.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END = .;
SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE = SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_END - SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_START;
} >> <AUTOLOAD.NAME>
<END.AUTOLOADS>
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:
{
SDK_AUTOLOAD_LIST = .;
<FOREACH.AUTOLOADS>
WRITEW ADDR(.<AUTOLOAD.NAME>);
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
<END.AUTOLOADS>
SDK_AUTOLOAD_LIST_END = .;
} >> <STATIC.NAME> # > 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(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
} >> <STATIC.NAME> # > binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
<FOREACH.OVERLAYS>
.<OVERLAY.NAME>:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# TEXT BLOCK: READ ONLY
#
SDK_OVERLAY_<OVERLAY.NAME>_ID =<OVERLAY.ID>; ### SEGMENT <OVERLAY.NAME> OVERLAY ID
SDK_OVERLAY.<OVERLAY.NAME>.ID =<OVERLAY.ID>;
SDK_OVERLAY.<OVERLAY.NAME>.START =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START =.;
#:::::::::: text/rodata
<FOREACH.OVERLAY.OBJECTS=.text>
<OVERLAY.OBJECT=.text:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.text>
<OVERLAY.LIBRARY=.text:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.rodata>
<OVERLAY.OBJECT=.rodata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.rodata>
<OVERLAY.LIBRARY=.rodata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.init>
<OVERLAY.OBJECT=.init:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.init>
<OVERLAY.LIBRARY=.init:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START =.;
#:::::::::: ctor
<FOREACH.OVERLAY.OBJECTS=.ctor>
<OVERLAY.OBJECT=.ctor:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.ctor>
<OVERLAY.LIBRARY=.ctor:t>
<END.OVERLAY.LIBRARIES>
<FOREACH.OVERLAY.OBJECTS=.sinit>
<OVERLAY.OBJECT=.sinit:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sinit>
<OVERLAY.LIBRARY=.sinit:t>
<END.OVERLAY.LIBRARIES>
WRITEW 0;
#:::::::::: ctor
SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END =.;
#:::::::::: text/rodata
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END =.;
#
# DATA BLOCK: READ WRITE
#
SDK_OVERLAY.<OVERLAY.NAME>.DATA_START =.;
#:::::::::: data
<FOREACH.OVERLAY.OBJECTS=.sdata>
<OVERLAY.OBJECT=.sdata:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sdata>
<OVERLAY.LIBRARY=.sdata:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.data>
<OVERLAY.OBJECT=.data:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.data>
<OVERLAY.LIBRARY=.data:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: data
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.DATA_END =.;
SDK_OVERLAY.<OVERLAY.NAME>.END =.;
SDK_OVERLAY.<OVERLAY.NAME>.TEXT_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.TEXT_END - SDK_OVERLAY.<OVERLAY.NAME>.TEXT_START;
SDK_OVERLAY.<OVERLAY.NAME>.DATA_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.DATA_END - SDK_OVERLAY.<OVERLAY.NAME>.DATA_START;
SDK_OVERLAY.<OVERLAY.NAME>.SIZE = SDK_OVERLAY.<OVERLAY.NAME>.END - SDK_OVERLAY.<OVERLAY.NAME>.START;
} > <OVERLAY.NAME>
.<OVERLAY.NAME>.bss:<IF.NITRO_LCFSPEC.GE.2><OVERLAY.NAME><ENDIF>
{
ALIGNALL(4); . = ALIGN(32);
<IF.NITRO_LCFSPEC.GE.2>
<FOREACH.OVERLAY.SEARCHSYMBOLS>
SEARCH_SYMBOL <OVERLAY.SEARCHSYMBOL>;
<END.OVERLAY.SEARCHSYMBOLS>
<ENDIF>
#
# BSS BLOCK
#
SDK_OVERLAY.<OVERLAY.NAME>.BSS_START = .;
#:::::::::: bss
<FOREACH.OVERLAY.OBJECTS=.bss>
<OVERLAY.OBJECT=.bss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.bss>
<OVERLAY.LIBRARY=.bss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
<FOREACH.OVERLAY.OBJECTS=.sbss>
<OVERLAY.OBJECT=.sbss:t>
<END.OVERLAY.OBJECTS>
<FOREACH.OVERLAY.LIBRARIES=.sbss>
<OVERLAY.LIBRARY=.sbss:t>
<END.OVERLAY.LIBRARIES>
. = ALIGN(4);
#:::::::::: bss
. = ALIGN(32);
SDK_OVERLAY.<OVERLAY.NAME>.BSS_END = .;
SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE = SDK_OVERLAY.<OVERLAY.NAME>.BSS_END - SDK_OVERLAY.<OVERLAY.NAME>.BSS_START;
} >> <OVERLAY.NAME>
<END.OVERLAYS>
############################ MAIN EX ##################################
# MAIN EX Area
.dummy.MAIN_EX:
{
. = ALIGN(32);
} > dummy.MAIN_EX
############################ ARENA ##################################
.arena.MAIN:
{
. = ALIGN(32);
SDK_SECTION_ARENA_START =.;
} > arena.MAIN
.arena.MAIN_EX:
{
. = ALIGN(32);
SDK_SECTION_ARENA_EX_START =.;
} > arena.MAIN_EX
.arena.ITCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_ITCM_START =.;
} > arena.ITCM
.arena.DTCM:
{
. = ALIGN(32);
SDK_SECTION_ARENA_DTCM_START =.;
} > arena.DTCM
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.SUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>:
{
<FOREACH.OVERLAYS>
# Overlay <OVERLAY.ID>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>
############################ OTHERS #################################
SDK_MAIN_ARENA_LO = SDK_SECTION_ARENA_START;
SDK_IRQ_STACKSIZE = <STATIC.IRQSTACKSIZE>; # allocated in DTCM
SDK_SYS_STACKSIZE = <STATIC.STACKSIZE>; # when 0 means all remains of DTCM
# Module filelist
.binary.MODULE_FILES:
{
WRITES ("<STATIC.NAME><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.SUFFIX>");
WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.SUFFIX>");
} > binary.MODULE_FILES
# ITCM/DTCM size checker => check AUTOLOAD_ITCM/DTCM
.check.ITCM:
{
. = . + SDK_AUTOLOAD_ITCM_SIZE + SDK_AUTOLOAD_ITCM_BSS_SIZE;
} > check.ITCM
SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1;
.check.DTCM:
{
. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
. = . + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.DTCM
}

View File

@ -1,42 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlFirm - include
# File: ARM9-TS-NORFIRM.lsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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:: 2007-09-06$
# $Rev$
# $Author$
#----------------------------------------------------------------------------
#
# TwlFirm LCF SPEC FILE
#
Static $(TARGET_NAME)
{
Address 0x03800000
Object $(OBJS_STATIC)
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
}
Autoload ITCM
{
Address 0x01ff8000
Object * (.itcm)
Object $(OBJS_AUTOLOAD) (.text)
}
Autoload DTCM
{
Address 0x027e0000
Object * (.dtcm)
Object $(OBJS_AUTOLOAD) (.data)
Object $(OBJS_AUTOLOAD) (.bss)
}

View File

@ -1,518 +0,0 @@
#---------------------------------------------------------------------------
# Project: TwlSDK - include
# File: ARM9-TS-FIRM.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
{
<STATIC.NAME> (RWX) : ORIGIN = <STATIC.ADDRESS>, LENGTH = 0x0 #> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<FOREACH.AUTOLOADS>
<AUTOLOAD.NAME> (RWX) : ORIGIN = <AUTOLOAD.ADDRESS>, LENGTH = 0x0 #>> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<END.AUTOLOADS>
# binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
# binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYDEFS>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>
<PROPERTY.OVERLAYTABLE>F (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>
<FOREACH.OVERLAYS>
<OVERLAY.NAME> (RWXO): ORIGIN = <OVERLAY.ADDRESS>, LENGTH = 0x0 > <OVERLAY.NAME><PROPERTY.FLXSUFFIX>
<END.OVERLAYS>
dummy.MAIN_EX.NITRO (RW) : ORIGIN = 0x023e0000, LENGTH = 0x0
arena.MAIN.NITRO (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.MAIN_EX.NITRO (RW) : ORIGIN = AFTER(dummy.MAIN_EX.NITRO<FOREACH.OVERLAYS=MAINEX>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.ITCM (RW) : ORIGIN = AFTER(ITCM<FOREACH.OVERLAYS=ITCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
arena.DTCM (RW) : ORIGIN = AFTER(DTCM<FOREACH.OVERLAYS=DTCM>,<OVERLAY.NAME><END.OVERLAYS>), LENGTH = 0x0
check.ITCM (RW) : ORIGIN = 0x0, LENGTH = 0x08000 > itcm.check
check.DTCM (RW) : ORIGIN = 0x0, LENGTH = 0x04000 > dtcm.check
check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x40000 > workram.check
# binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > <STATIC.NAME><PROPERTY.LTDSUFFIX>
<FOREACH.LTDAUTOLOADS>
<LTDAUTOLOAD.NAME> (RWX) : ORIGIN = <LTDAUTOLOAD.ADDRESS>, LENGTH = 0x0 #>> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<END.LTDAUTOLOADS>
# binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> <STATIC.NAME><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYDEFS>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>
<PROPERTY.LTDOVERLAYTABLE>L (RW) : ORIGIN = 0, LENGTH = 0x0 > <PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>
<FOREACH.LTDOVERLAYS>
<LTDOVERLAY.NAME> (RWXO): ORIGIN = <LTDOVERLAY.ADDRESS>, LENGTH = 0x0 > <LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>
<END.LTDOVERLAYS>
dummy.MAIN_EX.TWL (RW) : ORIGIN = 0x0d000000, LENGTH = 0x0
arena.WRAM.TWL (RW) : ORIGIN = AFTER(<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>,LTDMAIN<FOREACH.LTDOVERLAYS=MAIN>,<LTDOVERLAY.NAME><END.LTDOVERLAYS>), LENGTH = 0x0
arena.MAIN.TWL (RW) : ORIGIN = 0x02000400, LENGTH = 0x0
arena.MAIN_EX.TWL (RW) : ORIGIN = AFTER(dummy.MAIN_EX.TWL,<STATIC.NAME><FOREACH.OVERLAYS=MAIN>,<OVERLAY.NAME><END.OVERLAYS>,LTDMAIN<FOREACH.LTDOVERLAYS=MAIN>,<LTDOVERLAY.NAME><END.LTDOVERLAYS>), LENGTH = 0x0
binary.MODULE_FILES (RW) : ORIGIN = 0, LENGTH = 0x0 > component.files
}
FORCE_ACTIVE
{
SVC_SoftReset
}
KEEP_SECTION
{
.sinit
}
SECTIONS
{
############################ STATIC #################################
.<STATIC.NAME>:
{
ALIGNALL(4);
. = ALIGN(32); # Fit to cache line
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# TEXT BLOCK: READ ONLY
#
SDK_STATIC_START =.;
SDK_STATIC_TEXT_START =.;
#:::::::::: text/rodata
OBJECT(_start,*)
crt0_firm.o (.text)
crt0_firm.o (.rodata)
libsyscall.a (.text)
#
# .version セクションを追加しています。
# このセクションに含まれる情報はロットチェックの際に
# 必要となりますので、必ずこの位置に残すようにして下さい。
#
* (.version)
OBJECT(TwlMain,*)
<FOREACH.STATIC.OBJECTS=.text>
<STATIC.OBJECT=.text:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.text>
<STATIC.LIBRARY=.text:t>
<END.STATIC.LIBRARIES>
* (.exception)
. = ALIGN(4);
SDK_STATIC_ETABLE_START =.;
__exception_table_start__ =.;
EXCEPTION
__exception_table_end__ =.;
SDK_STATIC_ETABLE_END =.;
<FOREACH.STATIC.OBJECTS=.rodata>
<STATIC.OBJECT=.rodata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.rodata>
<STATIC.LIBRARY=.rodata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.init>
<STATIC.OBJECT=.init:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.init>
<STATIC.LIBRARY=.init:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_STATIC_SINIT_START =.;
#:::::::::: ctor
<FOREACH.STATIC.OBJECTS=.ctor>
<STATIC.OBJECT=.ctor:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ctor>
<STATIC.LIBRARY=.ctor:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sinit>
<STATIC.OBJECT=.sinit:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sinit>
<STATIC.LIBRARY=.sinit:t>
<END.STATIC.LIBRARIES>
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
<FOREACH.STATIC.OBJECTS=.itcm>
<STATIC.OBJECT=.itcm:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.itcm>
<STATIC.LIBRARY=.itcm:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.dtcm>
<STATIC.OBJECT=.dtcm:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.dtcm>
<STATIC.LIBRARY=.dtcm:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sdata>
<STATIC.OBJECT=.sdata:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sdata>
<STATIC.LIBRARY=.sdata:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.data>
<STATIC.OBJECT=.data:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.data>
<STATIC.LIBRARY=.data:t>
<END.STATIC.LIBRARIES>
. = ALIGN(4);
SDK_OVERLAY_DIGEST =.;
# NO DIGEST
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
} > <STATIC.NAME>
.<STATIC.NAME>.bss:
{
ALIGNALL(4);
. = ALIGN(32); # Fit to cache line
#
# Definition to refer overlay segment, when same name symbols exist in multiple overlays.
#
<FOREACH.STATIC.SEARCHSYMBOLS>
SEARCH_SYMBOL <STATIC.SEARCHSYMBOL>;
<END.STATIC.SEARCHSYMBOLS>
#
# BSS BLOCK
#
SDK_STATIC_BSS_START =.;
#:::::::::: bss
<FOREACH.STATIC.OBJECTS=.itcm>
<STATIC.OBJECT=.itcm.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.itcm>
<STATIC.LIBRARY=.itcm.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.dtcm>
<STATIC.OBJECT=.dtcm.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.dtcm>
<STATIC.LIBRARY=.dtcm.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.ltdmain>
<STATIC.OBJECT=.ltdmain.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.ltdmain>
<STATIC.LIBRARY=.ltdmain.bss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.sbss>
<STATIC.OBJECT=.sbss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.sbss>
<STATIC.LIBRARY=.sbss:t>
<END.STATIC.LIBRARIES>
<FOREACH.STATIC.OBJECTS=.bss>
<STATIC.OBJECT=.bss:t>
<END.STATIC.OBJECTS>
<FOREACH.STATIC.LIBRARIES=.bss>
<STATIC.LIBRARY=.bss:t>
<END.STATIC.LIBRARIES>
#:::::::::: bss
. = ALIGN(32);
SDK_STATIC_BSS_END = .;
SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START;
} >> <STATIC.NAME>
############################ 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 = <NUMBER.AUTOLOADS>;
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:
{
# <FOREACH.AUTOLOADS>
# WRITEW ADDR(.<AUTOLOAD.NAME>);
# WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SIZE;
# WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.SINIT_START;
# WRITEW SDK_AUTOLOAD.<AUTOLOAD.NAME>.BSS_SIZE;
# <END.AUTOLOADS>
} >> <STATIC.NAME> #> 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(.<STATIC.NAME>);
WRITEW 0; # NO DIGEST
WRITEW _start_LtdModuleParams - ADDR(.<STATIC.NAME>);
} >> <STATIC.NAME> #> binary.STATIC_FOOTER
############################ OVERLAYS ###############################
SDK_OVERLAY_NUMBER = <NUMBER.OVERLAYS>;
############################ OVERLAYDEFS ############################
.<PROPERTY.OVERLAYDEFS>F:
{
### <STATIC.NAME> module information
WRITEW ADDR(.<STATIC.NAME>); # load address
WRITEW _start; # entry address
WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module
WRITEW _start_AutoloadDoneCallback; # callback autoload done
### overlay filename
<FOREACH.OVERLAYS>
WRITES ("<OVERLAY.NAME><PROPERTY.FLXSUFFIX>"); # Overlay <OVERLAY.ID>
<END.OVERLAYS>
} > <PROPERTY.OVERLAYDEFS>F
############################ OVERLAYTABLE ###########################
.<PROPERTY.OVERLAYTABLE>F:
{
<FOREACH.OVERLAYS>
WRITEW <OVERLAY.ID>; # overlay ID
WRITEW ADDR(.<OVERLAY.NAME>); # load address
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_OVERLAY.<OVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <OVERLAY.ID>; # ROM file ID
WRITEW 0; # Reserved
<END.OVERLAYS>
} > <PROPERTY.OVERLAYTABLE>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 = <STATIC.IRQSTACKSIZE>; # allocated in DTCM
SDK_SYS_STACKSIZE = <STATIC.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;
<FOREACH.OVERLAYS=ITCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
} > check.ITCM
.check.DTCM:
{
. = . + SDK_AUTOLOAD_DTCM_SIZE + SDK_AUTOLOAD_DTCM_BSS_SIZE;
<FOREACH.OVERLAYS=DTCM>
. = . + SDK_OVERLAY.<OVERLAY.NAME>.SIZE + SDK_OVERLAY.<OVERLAY.NAME>.BSS_SIZE;
<END.OVERLAYS>
. = . + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN;
} > check.DTCM
.check.WORKRAM:
{
. = SDK_STATIC_BSS_END;
} > check.WORKRAM
########################### LTDAUTOLOADS ############################
SDK_LTDAUTOLOAD.LTDMAIN.START = SDK_STATIC_BSS_END;
SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START;
SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = 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 = <NUMBER.LTDAUTOLOADS>;
.binary.LTDAUTOLOAD_TOP:
{
WRITEW 0;
} >> <STATIC.NAME> #> binary.LTDAUTOLOAD_TOP
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:
{
# <FOREACH.LTDAUTOLOADS>
# WRITEW ADDR(.<LTDAUTOLOAD.NAME>);
# WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SIZE;
# WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.SINIT_START;
# WRITEW SDK_LTDAUTOLOAD.<LTDAUTOLOAD.NAME>.BSS_SIZE;
# <END.LTDAUTOLOADS>
} >> <STATIC.NAME> #> 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 = <NUMBER.LTDOVERLAYS>;
########################## LTDOVERLAYDEFS ###########################
.<PROPERTY.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
<FOREACH.LTDOVERLAYS>
WRITES ("<LTDOVERLAY.NAME><PROPERTY.LTDSUFFIX>");
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYDEFS>L
######################### LTDOVERLAYTABLE ###########################
.<PROPERTY.LTDOVERLAYTABLE>L:
{
<FOREACH.LTDOVERLAYS>
WRITES <LTDOVERLAY.ID> # overlay ID
WRITEW ADDR(.<LTDOVERLAY.NAME>); # load address
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SIZE; # size of module
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.BSS_SIZE; # size of bss
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_START; # start address of static init
WRITEW SDK_LTDOVERLAY.<LTDOVERLAY.NAME>.SINIT_END; # end address of static init
WRITEW <LTDOVERLAY.ID> # ROM file ID
WRITEW 0; # Reserved
<END.LTDOVERLAYS>
} > <PROPERTY.LTDOVERLAYTABLE>L
############################ ARENA ##################################
.dummy.MAIN_EX.TWL:
{
. = ALIGN(32);
} > dummy.MAIN_EX.TWL
.arena.WRAM.TWL:
{
. = ALIGN(32);
SDK_LTDMAIN_ARENA_LO =.;
} > arena.WRAM.TWL
.arena.MAIN_EX.TWL:
{
. = ALIGN(32);
SDK_LTDMAIN_EX_ARENA_LO =.;
} > arena.MAIN_EX.TWL
############################ OTHERS #################################
# Module filelist
.binary.MODULE_FILES:
{
WRITES ("<STATIC.NAME><PROPERTY.FLXSUFFIX>");
WRITES ("<PROPERTY.OVERLAYDEFS><PROPERTY.FLXSUFFIX>");
WRITES ("<PROPERTY.OVERLAYTABLE><PROPERTY.FLXSUFFIX>");
WRITES ("<STATIC.NAME><PROPERTY.LTDSUFFIX>");
WRITES ("<PROPERTY.LTDOVERLAYDEFS><PROPERTY.LTDSUFFIX>");
WRITES ("<PROPERTY.LTDOVERLAYTABLE><PROPERTY.LTDSUFFIX>");
} > binary.MODULE_FILES
}

View File

@ -1,185 +0,0 @@
#----------------------------------------------------------------------------
# Project: TwlSDK - include
# File: ROM-BB.rsf
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded insructions, 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$
#----------------------------------------------------------------------------
#
# TWL ROM SPEC FILE
#
Arm9
{
Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)"
OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)"
OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)"
Elf "$(MAKEROM_ARM9:r).tef"
}
Arm7
{
Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)"
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)"
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)"
Elf "$(MAKEROM_ARM7_BASE:r).tef"
}
Arm9.Ltd
{
Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)"
OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)"
OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)"
}
Arm7.Ltd
{
Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)"
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)"
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)"
}
Property
{
###
### Settings for FinalROM
###
#### BEGIN
#
# TITLE NAME: Your product name within 12bytes
#
TitleName "FIRM"
#
# MAKER CODE: Your company ID# in 2 ascii words
# issued by NINTENDO
#
MakerCode "01"
#
# REMASTER VERSION: Mastering version
#
#RomVersion 0
#
# ROM SPEED TYPE: [MROM/1TROM/UNDEFINED]
#
RomSpeedType $(MAKEROM_ROMSPEED)
#
# ROM SIZE: in bit [64M/128M/256M/512M/1G/2G]
#
#RomSize 128M
#RomSize 256M
#
# ROM PADDING: TRUE if finalrom
#
#RomFootPadding TRUE
#
# ROM HEADER TEMPLATE: Provided to every product by NINTENDO
#
#RomHeaderTemplate ./etc/rom_header.template.sbin
#
# BANNER FILE: generated from Banner Spec File
#
#BannerFile ./etc/myGameBanner.bnr
BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr
###
### Setting for TWL
###
#
# ROM HEADER Ltd: Provided to every product by NINTENDO
#
RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin
#
# Digest parameters:
#
DigestParam 1024 32
#
# WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD]
# don't have to edit
#
#WramMapping $(MAKEROM_WRAM_MAPPING)
WramMappingDirect ../wram_regs/wram_regs.rbin
#
# CardRegion: card region [Japan/America/Europe/Australia/China/Korea]
#
CardRegion Japan
#
# Codec mode:
# don't have to edit
#
CodecMode $(MAKEROM_CODEC_MODE)
###
#### END
}
AppendProperty
{
#
# Publisher : "Nintendo"
# don't have to edit
Publisher Nintendo
#
# Application type : [USER/SYSTEM]
# don't have to edit
AppType User
#
# launch title on the launcher : [TRUE/FALSE]
# don't have to edit
Launch TRUE
#
# Boot allowed Media: [GameCard/NAND]
#
Media NAND
#
# GameCode for TitleID : Your GameCode in 4 ascii words
#
#GameCode $(TITLEID_LO)
#
# Public save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M]
#
#PublicSaveDataSize 32K
#
# Private save data size: [16K/32K/64K/128K/256K/512K/1M/2M/4M/8M]
#
#PrivateSaveDataSize 16K
#
# Enable SubBannerFile
#SubBannerFile TRUE
}
RomSpec
{
Offset 0x00000000
Segment ALL
HostRoot $(MAKEROM_ROMROOT)
Root /
File $(MAKEROM_ROMFILES)
}

View File

@ -1,41 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: sysmenu.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef SYSMENU_H_
#define SYSMENU_H_
// Compile switch----------------------
//#define DEBUG_USED_CARD_SLOT_B_ // デバッグ用でカードスロットBを使用する場合に有効にする。
//-------------------------------------
#include <twl.h>
#include <twl/os/common/format_rom.h>
#include <twl/hw/common/mmap_parameter.h>
#include <twl/os/common/banner.h>
#include <twl/lcfg.h>
#include <sysmenu/sysmenu_lib.h>
#include <sysmenu/boot.h>
#include <sysmenu/memorymap.h>
#include <sysmenu/hotsw.h>
#include <sysmenu/sharedFont.h>
#include <sysmenu/util.h>
#include <sysmenu/WDSWrapper.h>
#include <sysmenu/types.h>
/* SYSMENU_H_ */
#endif

View File

@ -1,255 +0,0 @@
//**********************************************************************
//
// @file WDS.h
// @brief 店頭親機がMP送信する接続先AP情報を受信
//
// @author M.Okuno
// @date 2008/02/05
// @version 01.00
//
//*********************************************************************/
#ifndef __WDS_H__
#define __WDS_H__
#ifdef __cplusplus
extern "C" {
#endif
//-----------------------------------------------------
// Include
//-----------------------------------------------------
#ifdef SDK_TWL
#include <twl.h>
#else
#include <nitro.h>
#endif
//-----------------------------------------------------
// Macros
//-----------------------------------------------------
/**
@brief
*/
//#define WDS_DEBUGPRINT
/**
@brief
*/
#define WDS_HOTSPOT_ENCODE_UTF8 0x0000 ///< UTF-8
#define WDS_HOTSPOT_ENCODE_UTF16 0x1000 ///< UTF-16
#define WDS_HOTSPOT_ENCODE_MASK 0xF000 ///< マスク
/**
@brief
*/
#define WDS_HOTSPOT_TYPE_MASK 0x0FFF ///< マスク
/**
@brief
*/
#define WDS_SSID_BUF_SIZE 32 ///< SSID
#define WDS_APNUM_BUF_SIZE 10 ///< AP番号
#define WDS_HOTSPOTNAME_BUF_SIZE 24 ///< ホットスポット名
#define WDS_HOTSPOTNAME_UTF16_BUF_SIZE WDS_HOTSPOTNAME_BUF_SIZE + 2 ///< 変換後のホットスポット名
#define WDS_MACADDR_BUF_SIZE 6 ///< MACアドレス
#define WDS_WEPKEY_BUF_SIZE 32 ///< WEPキー(あるいはWPA Preshared Key)
/**
@brief AP情報保持最大数
*/
#define WDS_APINFO_MAX 4
/**
@brief
*/
#define WDS_INFOFLAG_NOTIFY (0x01) ///< 通知フラグ
#define WDS_INFOFLAG_ALLOWAUTOCONNECT (0x01 << 1) ///< インターネットフルアクセス可能フラグ
//-----------------------------------------------------
// Types
//-----------------------------------------------------
/**
@brief WDSライブラリが使用するコールバック関数型
*/
typedef void (*WDSCallbackFunc)(void *arg);
//-----------------------------------------------------
// Structs
//-----------------------------------------------------
/**
@brief APビーコン
*/
typedef struct WDSApInfo
{
u8 ssid[ WDS_SSID_BUF_SIZE ]; ///< 親機が接続するAPのSSID
u8 apnum[ WDS_APNUM_BUF_SIZE ]; ///< Wi-FiステーションのAPのSSIDに埋め込まれているAP識別番号と同等の文字列
u16 hotspotid; ///< ホットスポットの認証方式を示すフラグ+hotspotnameのエンコード情報
u8 hotspotname[ WDS_HOTSPOTNAME_BUF_SIZE ]; ///< UTF-8あるいはUTF-16で記述されたホットスポットの名前
u8 wepkey[ WDS_WEPKEY_BUF_SIZE ]; ///< 親機が接続するAPのWEP キー
u8 channel; ///< 親機が接続したAPが使っているチャンネル
u8 encryptflag; ///< AP接続時にNitroWiFiが使う暗号化方式
u8 infoflag; ///< 親機の接続するネットの特性を記録するフラグ領域
u8 reserve[ 5 ]; ///< 予約領域
u16 mtu; ///< 使用可能なMTU
u16 crc; ///< CRC
} WDSApInfo;
/**
@brief APビーコン構造体
*/
typedef struct WDSBriefApInfo
{
// WDSライブラリによって生成される値
BOOL isvalid; ///< apinfoに有効な値が代入されていればTRUE
u16 rssi; ///< 電波強度
WDSApInfo apinfo; ///< 親機から送られてくるAPビーコン
} WDSBriefApInfo;
//-----------------------------------------------------
// Prototypes
//-----------------------------------------------------
//--------------------------------------------------------------------------------
/** WDSライブラリが使用するワークエリアのサイズを得ます
@return 0 :
@note
使
*///------------------------------------------------------------------------------
size_t WDS_GetWorkAreaSize( void );
//--------------------------------------------------------------------------------
/** WDSを初期化します
@param <1>
@param <2>
@param <3> WM_InitializeのdmaNoに準ずる引数
@return 0 : ( )
0 :
@note
<1> WDS_SYSTEM_BUF_SIZEだけ必要であり
32
<2>
WDS
WM_Initialize()WMはREADYステートからIDLEステートに移行します
*///------------------------------------------------------------------------------
int WDS_Initialize( void *wdsWork, WDSCallbackFunc callback, u16 dmaNo );
//--------------------------------------------------------------------------------
/** WDSを初期化します(指定したスキャン結果を内部的に保持した状態での初期化)
@param <1>
@param <2>
@param <3> WM_InitializeのdmaNoに準ずる引数
@param <4> WDSを使用して取得したWDSBriefInfoの配列
@return 0 : ( )
0 :
@note
<1> WDS_SYSTEM_BUF_SIZEだけ必要であり
32
<2>
WDS
WM_Initialize()WMはREADYステートからIDLEステートに移行します
*///------------------------------------------------------------------------------
int WDS_InitializeEx( void *wdsWork, WDSCallbackFunc callback, u16 dmaNo, WDSBriefApInfo *apinfo );
//--------------------------------------------------------------------------------
/** WDSを終了します
@param <1>
@return 0 : ( )
0 :
@note
<1>
WDS
*///------------------------------------------------------------------------------
int WDS_End( WDSCallbackFunc callback );
//--------------------------------------------------------------------------------
/** DS配信システム親機ビーコンのスキャンを開始します
@param <1>
@return 0 : ( )
0 :
@note
<1>
WDS
WM_StartScane()WMはIDLEステートの場合はSCANステートに移行します
*///------------------------------------------------------------------------------
int WDS_StartScan( WDSCallbackFunc callback );
//--------------------------------------------------------------------------------
/** DS配信システム親機ビーコンのスキャンを終了します
@param <1>
@return 0 : ( )
0 :
@note
<1>
WDS
WM_EndScan()WMはIDLEステートに移行します
*///------------------------------------------------------------------------------
int WDS_EndScan( WDSCallbackFunc callback );
//--------------------------------------------------------------------------------
/** APビーコン情報の数を取得します
@return 0 :
0 : ( )
@note
*///------------------------------------------------------------------------------
int WDS_GetApInfoNum( void );
//--------------------------------------------------------------------------------
/** APビーコン情報をインデックスを指定して取得します
@param <1> APビーコン情報のインデックス値(015)
@param <2> APビーコン情報を書き込む領域へのポインタ
@return 0 :
0 : ( )
@note
*///------------------------------------------------------------------------------
int WDS_GetApInfoByIndex( int index, WDSBriefApInfo *briefapinfo );
//--------------------------------------------------------------------------------
/** APビーコン情報を全て取得します
@param <1> APビーコン情報を書き込む配列の先頭へのポインタ(WDS_APINFO_MAX個の要素が必要)
@return 0 :
0 : ( )
@note
*///------------------------------------------------------------------------------
int WDS_GetApInfoAll( WDSBriefApInfo *briefapinfo );
#ifdef WDS_WITHDWC
//--------------------------------------------------------------------------------
/** APビーコン情報をDWCの自動接続先として設定します
@param <1> APビーコン情報のインデックス値(015)
@return 0 :
0 : ( )
@note
*///------------------------------------------------------------------------------
int WDS_SetConnectTargetByIndex( int index );
//--------------------------------------------------------------------------------
/** APビーコン情報をDWCの自動接続先として設定します
@param <1> APビーコン情報
@return 0 :
0 : ( )
@note
*///------------------------------------------------------------------------------
int WDS_SetConnectTargetByBriefApInfo( WDSBriefApInfo *briefapinfo );
#endif
//--------------------------------------------------------------------------------
/** APビーコン情報のAP説明文をUTF-16で得ます
@param <1> AP説明文を取得する対象のAPビーコン情報
<2> AP説明文を書き込むバッファへのポインタ(WDS_HOTSPOTNAME_UTF16_BUF_SIZEバイト)
@return 0 :
0 : ( )
@note
*///------------------------------------------------------------------------------
int WDS_GetApDescriptionUTF16( WDSBriefApInfo *briefapinfo, void *outbuf );
#ifdef __cplusplus
}
#endif
#endif //EOF __WDS_H__

View File

@ -1,139 +0,0 @@
//**********************************************************************
//
// @file WDSWrapper.h
// @brief WDSライブラリのラッパー
//
// @author S.Nakata
// @date 2008/06/21
// @version 0.0
//
//*********************************************************************/
#ifndef __WDSWRAPPER_H__
#define __WDSWRAPPER_H__
#ifdef __cplusplus
extern "C" {
#endif
//-----------------------------------------------------
// Include
//-----------------------------------------------------
#include <sysmenu/WDS.h>
//-----------------------------------------------------
// Macros
//-----------------------------------------------------
#define WDSWRAPPER_STACKSIZE 4096 ///< WDSラッパーが使用するスレッドスタックの推奨サイズ
#define WDSWRAPPER_SCANPERIOD 3000 ///< WDSラッパーがスキャンを継続する時間[msec]
#define WDSWRAPPER_WAITPERIOD 3000 ///< WDSラッパーがスキャンを中断する時間[msec]
#define WDSWRAPPER_DEBUGPRINT ///< デバッグ表示フラグ
//-----------------------------------------------------
// Types of WDS Wrapper Library
//-----------------------------------------------------
/**
@brief
*/
typedef enum WDSWrapperErrCode
{
WDSWRAPPER_ERRCODE_SUCCESS = 0, ///< 処理成功
WDSWRAPPER_ERRCODE_FAILURE = 1, ///< 処理失敗
WDSWRAPPER_ERRCODE_OPERATING = 2, ///< 処理実行中
WDSWRAPPER_ERRCODE_INITIALIZED = 3, ///< WDSラッパーライブラリ初期化済み
WDSWRAPPER_ERRCODE_UNINITIALIZED= 4 ///< WDSラッパーライブラリ未初期化
} WDSWrapperErrCode;
/**
@brief
*/
typedef enum WDSWrapperCallback
{
WDSWRAPPER_CALLBACK_INITIALIZE = 0, //!< WDS_WrapperInitialize関数によるコールバック
WDSWRAPPER_CALLBACK_CLEANUP = 1, //!< WDS_WrapperCleanup関数によるコールバック
WDSWRAPPER_CALLBACK_STARTSCAN = 2, //!< WDS_WrapperStartScan関数によるコールバック
WDSWRAPPER_CALLBACK_STARTSCAN2 = 3, //!< WDS_WrapperStartScan関数によるコールバック(間欠スキャン1回終了)
WDSWRAPPER_CALLBACK_STOPSCAN = 4 //!< WDS_WrapperStopScan関数によるコールバック
} WDSWrapperCallback;
/**
@brief WDSラッパーののステートをあらわす列挙型
*/
typedef enum WDSWrapperStateThreadState {
WDSWRAPPER_STATE_BEFOREINIT, //!< 初期化開始待ちステート
WDSWRAPPER_STATE_INIT, //!< 初期化開始ステート
WDSWRAPPER_STATE_WAITINIT, //!< 初期化完了待ちステート
WDSWRAPPER_STATE_SCAN, //!< スキャン開始ステート
WDSWRAPPER_STATE_WAITSCAN, //!< スキャン完了待ちステート
WDSWRAPPER_STATE_ENDSCAN, //!< スキャン中断ステート
WDSWRAPPER_STATE_WAITENDSCAN, //!< スキャン中断完了待ちステート
WDSWRAPPER_STATE_END, //!< WDS解放開始ステート
WDSWRAPPER_STATE_WAITEND, //!< WDS解放完了待ちステート
WDSWRAPPER_STATE_IDLE, //!< アイドルステート
WDSWRAPPER_STATE_TERMINATE //!< WDSラッパー解放ステート
} WDSWrapperStateThreadState;
/**
@brief WDSWrapperライブラリが使用するコールバック関数型
@note
argは必ずWDSWrapperCallback型変数へのポインタ
*/
typedef void ( *WDSWrapperCallbackFunc )( void *arg );
/**
@brief WDSラッパー内部で使用するアロケーター型
*/
typedef void *( *WDSWrapperAlloc )( u32 size );
/**
@brief WDSラッパー内部で使用するアロケーター型
*/
typedef void ( *WDSWrapperFree )( void *ptr );
//-----------------------------------------------------
// Structs of WDS Wrapper Library
//-----------------------------------------------------
/**
@brief WDS_WrapperInitialize関数に与える初期化パラメータ
*/
typedef struct WDSWrapperInitializeParam
{
u32 threadprio; ///< WDSコントロールスレッドの優先度
u16 dmano; ///< WMライブラリが使用するDMA番号
WDSWrapperCallbackFunc callback; ///< WDSコントロールスレッドから呼び出されるコールバック関数へのポインタ
WDSWrapperAlloc alloc; ///< WDSラッパーが使用するアロケータ
WDSWrapperFree free; ///< WDSラッパーが使用するアロケータ
} WDSWrapperInitializeParam;
/**
@brief WDSラッパーが呼び出すコールバック関数に与えられる引数用の構造体
*/
typedef struct WDSWrapperCallbackParam
{
WDSWrapperCallback callback; ///< コールバック発生要因
WDSWrapperErrCode errcode; ///< エラーコード
} WDSWrapperCallbackParam;
//-----------------------------------------------------
// Prototypes of WDS Wrapper Library
//-----------------------------------------------------
WDSWrapperErrCode WDS_WrapperInitialize( WDSWrapperInitializeParam param );
WDSWrapperErrCode WDS_WrapperCleanup( void );
WDSWrapperErrCode WDS_WrapperStartScan( void );
WDSWrapperErrCode WDS_WrapperStopScan( void );
WDSWrapperErrCode WDS_WrapperCheckValidBeacon( void );
#ifdef SDK_TWL
WDSWrapperErrCode WDS_WrapperSetArgumentParam( void );
#endif
WDSWrapperErrCode WDS_WrapperCheckThreadRunning( void );
OSThread *WDS_WrapperGetOSThread( void );
#ifdef __cplusplus
}
#endif
#endif //EOF __WDSWRAPPER_H__

View File

@ -1,36 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - ACSIGN
File: acsign.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef SYSM_ACSIGN_H_
#define SYSM_ACSIGN_H_
#ifdef SDK_ARM9
#include <sysmenu/acsign/ARM9/acsign.h>
//#include <sysmenu/acsign/ARM9/acsign_util.h>
#endif // SDK_ARM9
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_ACSIGN_H_ */
#endif

View File

@ -1,70 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: acsign.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 _ACSIGN_H_
#define _ACSIGN_H_
#ifdef __cplusplus
extern "C" {
#endif
#if defined( RSA_ENC_DEC )
#define ACSIGN_BUFFER ((160/8)*4) // 出力バッファ量
#else
#define ACSIGN_BUFFER ((160/8)*1) // 出力バッファ量
#endif
//
int ACSign_Decrypto(
void* buffer, // 出力領域
void* sgn_ptr, // データへのポインタ
void* key_ptr // キーへのポインタ
);
//
BOOL ACSign_Encrypto(
void *sign, // 署名出力バッファへのポインタ
const void *key, // DERフォーマット秘密鍵へのポインタ
const void *data, // 署名対象データへのポインタ
int length, // 署名対象データ長
BOOL isEncodeBER // 署名データをDERエンコードするか
);
//
int ACSign_Digest(
void* buffer, // 出力領域
void* romh_ptr, // データへのポインタ
void* mbin_ptr, // データへのポインタ
int mbin_len, // データの長さ
void* sbin_ptr, // データへのポインタ
int sbin_len, // データの長さ
u32 serial_num // シリアルナンバー
);
//
int ACSign_Compare(
void* dercypto, // ACSign_Decryptoの出力
void* digest // ACSign_Digestの出力
);
void ACSign_SetAllocFunc( void *(*pAlloc)( u32 ), void (*pFree)( void * ) );
#ifdef __cplusplus
}
#endif
#endif //_ACSIGN_H_

View File

@ -1,37 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: acsign_util.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 _ACSIGN_UTIL_H_
#define _ACSIGN_UTIL_H_
#include <mb_fileinfo.h>
#ifdef __cplusplus
extern "C" {
#endif
#define AUTH_BUFFER_LEN 20
extern int ACSignDecrpto(void *output_buffer, MBDownloadFileInfo *download_file_info_buf);
extern int ACSignDigest(void *input_buffer, MBDownloadFileInfo *download_file_info_buf);
#ifdef __cplusplus
}
#endif
#endif //_ACSIGN_UTIL_H_

View File

@ -1,32 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: boot.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef SYSM_BOOT_H_
#define SYSM_BOOT_H_
#include <sysmenu/boot/common/boot_api.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_MACHINE_SETTINGS_H_ */
#endif

View File

@ -1,83 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: boot_api.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$
*---------------------------------------------------------------------------*/
#if !defined(_SYSMENU_BOOT_H_)
#define _SYSMENU_BOOT_API_H_
#include <sysmenu/memorymap.h>
#ifdef __cplusplus
extern "C" {
#endif
/*---------------------------------------------------------------------------*
Type definition
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
functions
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
Name: BOOT_Core
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void BOOT_Core( void );
/*---------------------------------------------------------------------------*
Name: BOOT_Init
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void BOOT_Init( void );
/*---------------------------------------------------------------------------*
Name: BOOT_WaitStart
Description: (ARM7)
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
BOOL BOOT_WaitStart( void );
/*---------------------------------------------------------------------------*
Name: BOOT_WaitStart
Description: ARM7への通知及び待機(ARM9)
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void BOOT_Ready( void );
#ifdef __cplusplus
}
#endif
#endif /* _SYSMENU_BOOT_API_H_ */

View File

@ -1,347 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - DHT
File: dht.h
Copyright 2008,2009 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_DHT_H_
#define SYSMENU_DHT_H_
/*
Phase
Phase1 DHTDatabase->hash[0] ROM_Header_Short->nitro_whitelist_phase1_digest
Phase2 DHTDatabase->hash[1] ROM_Header_Short->nitro_whitelist_phase2_digest
Phase3 DHTDatabaseEx->banner_hash ROM_Header_Short->banner_digest
Phase4 - -
Phase4のハッシュ値はdht_phase4_list.cに含まれる
*/
#include <twl/types.h>
#include <twl/os/common/format_rom.h>
#include <sysmenu/dht/dht_format.h>
#define nitro_whitelist_phase2_digest nitro_whitelist_phase2_diegst // for spell miss
#define DHT_FAT_PAGE_SIZE 512
#define DHT_FAT_CACHE_SIZE (DHT_FAT_PAGE_SIZE * 2)
#define DHT_PHASE3_MAX DHT_OVERLAY_MAX
/*
DHT_CheckHashPhase2で必要なワークメモリ
*/
typedef struct DHTPhase2Work
{
u8 fatCache[DHT_FAT_CACHE_SIZE]; // for fat cache only
u32 buffer[DHT_OVERLAY_MAX/sizeof(u32)]; // multiple usage
}
DHTPhase2Work;
/*
DHT_CheckHashPhase4で必要なワークメモリ
(DHTPhase4Work <= DHTPhase2Workが必ず成り立つ)
*/
typedef struct DHTPhase4Work
{
u32 buffer[DHT_PHASE3_MAX/sizeof(u32)];
}
DHTPhase4Work;
/*
DHT_CheckHashPhase2Exで必要なワークメモリ
*/
typedef struct DHTPhase2ExWork
{
u8 fatCache[DHT_FAT_CACHE_SIZE]; // for fat cache only
}
DHTPhase2ExWork;
#ifdef __cplusplus
extern "C" {
#endif
/*
DHT_CheckHashPhase2/DHT_CheckHashPhase2Ex/DHT_CheckHashPhase4で使用するRead関数
dest
offset ROMオフセット
length
arg
FALSEを返すこと
*/
typedef BOOL (*DHTReadFunc)(void* dest, s32 offset, s32 length, void* arg);
/*
DHT_CheckHashPhase2Ex/DHT_CheckHashPhase4Exで使用するRead関数
DHT_CheckHashPhase2ExUpdateを呼び出すこと()
ctx DHT_CheckHashPhase2ExUpdateに渡す引数
offset ROMオフセット
length
arg
FALSEを返すこと
*/
typedef BOOL (*DHTReadFuncEx)(SVCHMACSHA1Context* ctx, s32 offset, s32 length, void* arg);
/*---------------------------------------------------------------------------*
Name: DHT_GetDatabaseLength
Description:
Arguments: pDHT
Returns: 0
*---------------------------------------------------------------------------*/
u32 DHT_GetDatabaseLength(const DHTFile* pDHT);
/*---------------------------------------------------------------------------*
Name: DHT_GetDatabaseExLength
Description:
Arguments: pDHT
Returns: 0
*---------------------------------------------------------------------------*/
u32 DHT_GetDatabaseExLength(const DHTFileEx* pDHT);
/*---------------------------------------------------------------------------*
Name: DHT_GetDatabaseAdHocLength
Description:
Arguments: pDHT
Returns: 0
*---------------------------------------------------------------------------*/
u32 DHT_GetDatabaseAdHocLength(const DHTFileAdHoc* pDHT);
/*---------------------------------------------------------------------------*
Name: DHT_PrepareDatabase
Description: FS関数を利用してデータベースを読み込みと検証を行う
Arguments: pDHT
fp
DHTHeaderの先頭までシーク済みである必要がある
maxLength ()
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_PrepareDatabase(DHTFile* pDHT, FSFile* fp, s32 maxLength);
/*---------------------------------------------------------------------------*
Name: DHT_PrepareDatabaseEx
Description: FS関数を利用して拡張データベースを読み込みと検証を行う
Arguments: pDHT
fp
DHTHeaderの先頭までシーク済みである必要がある
maxLength ()
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_PrepareDatabaseEx(DHTFileEx* pDHT, FSFile* fp, s32 maxLength);
/*---------------------------------------------------------------------------*
Name: DHT_PrepareDatabaseAdHoc
Description: FS関数を利用して個別対応データベースを読み込みと検証を行う
Arguments: pDHT
fp
DHTHeaderの先頭までシーク済みである必要がある
maxLength ()
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_PrepareDatabaseAdHoc(DHTFileAdHoc* pDHT, FSFile* fp, s32 maxLength);
/*---------------------------------------------------------------------------*
Name: DHT_GetDatabase
Description: ROMヘッダに対応するデータベースを検索する
Arguments: pDHT
pROMHeader ROMヘッダ格納先
Returns: NULL
*---------------------------------------------------------------------------*/
const DHTDatabase* DHT_GetDatabase(const DHTFile* pDHT, const ROM_Header_Short* pROMHeader);
/*---------------------------------------------------------------------------*
Name: DHT_GetDatabaseEx
Description: ROMヘッダに対応する拡張データベースを検索する
Arguments: pDHT
pROMHeader ROMヘッダ格納先
Returns: NULL
*---------------------------------------------------------------------------*/
const DHTDatabaseEx* DHT_GetDatabaseEx(const DHTFileEx* pDHT, const ROM_Header_Short* pROMHeader);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase1Init
Description: ROMヘッダおよびARM9/ARM7スタティック領域の検証の準備
Arguments: ctx SVCHMACSHA1コンテキスト
pROMHeader ROMヘッダ格納先
Returns: None
*---------------------------------------------------------------------------*/
void DHT_CheckHashPhase1Init(SVCHMACSHA1Context* ctx, const ROM_Header_Short* pROMHeader);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase1Update
Description: ROMヘッダおよびARM9/ARM7スタティック領域の検証のスタティック部分
ARM9スタティックARM7スタティックの順に
Arguments: ctx SVCHMACSHA1コンテキスト
ptr
length
Returns: None
*---------------------------------------------------------------------------*/
void DHT_CheckHashPhase1Update(SVCHMACSHA1Context* ctx, const void* ptr, s32 length);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase1
Description: ROMヘッダおよびARM9/ARM7スタティック領域の検証の結果判定
Arguments: ctx SVCHMACSHA1コンテキスト
hash (db->hash[0])
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_CheckHashPhase1Final(SVCHMACSHA1Context* ctx, const u8* hash);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase1
Description: ROMヘッダおよびARM9/ARM7スタティック領域の検証
Arguments: hash (db->hash[0])
pROMHeader ROMヘッダ格納先
pARM9 ARM9スタティック格納先
pARM7 ARM7スタティック格納先
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_CheckHashPhase1(const u8* hash, const ROM_Header_Short* pROMHeader, const void* pARM9, const void* pARM7);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase2
Description:
Arguments: hash (db->hash[1])
pROMHeader ROMヘッダ格納先
work APIで使用するワーク (513KB)
func Read関数
arg Read関数に渡される引数
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_CheckHashPhase2(const u8* hash, const ROM_Header_Short* pROMHeader, DHTPhase2Work* work, DHTReadFunc func, void* arg);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase2Ex
Description:
Arguments: hash (db->hash[1])
pROMHeader ROMヘッダ格納先
work APIで使用するワーク (1KB)
func Read関数
funcEx
DHT_CheckHashPhase2ExUpdateを呼び出す必要がある
arg Read関数に渡される引数
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_CheckHashPhase2Ex(const u8* hash, const ROM_Header_Short* pROMHeader, DHTPhase2ExWork* work, DHTReadFunc func, DHTReadFuncEx funcEx, void* arg);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase2ExUpdate / DHT_CheckHashPhase4ExUpdate
Description:
DHTReadFuncExから呼び出すこと()
: Phase4でも流用している
Arguments: ctx SVCHMACSHA1コンテキスト
ptr
length
Returns: None
*---------------------------------------------------------------------------*/
void DHT_CheckHashPhase2ExUpdate(SVCHMACSHA1Context* ctx, const void* ptr, s32 length);
#define DHT_CheckHashPhase4ExUpdate DHT_CheckHashPhase2ExUpdate
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase3
Description:
(使)
Arguments: hash (dbex->banner_hash)
pBanner
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_CheckHashPhase3(const u8* hash, const NTRBannerFile* pBanner);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase4
Description:
Arguments: pDHT
pROMHeader ROMヘッダ格納先
work APIで使用するワーク (512KB)
phase2の使い回しでOK
func Read関数
arg Read関数に渡される引数
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_CheckHashPhase4(const DHTFileAdHoc* pDHT, const ROM_Header_Short* pROMHeader, DHTPhase4Work* work, DHTReadFunc func, void* arg);
/*---------------------------------------------------------------------------*
Name: DHT_CheckHashPhase4Ex
Description:
Arguments: pDHT
pROMHeader ROMヘッダ格納先
funcEx
DHT_CheckHashPhase2ExUpdateを呼び出す必要がある
arg Read関数に渡される引数
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL DHT_CheckHashPhase4Ex(const DHTFileAdHoc* pDHT, const ROM_Header_Short* pROMHeader, DHTReadFuncEx funcEx, void* arg);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif // SYSMENU_DHT_H_

View File

@ -1,136 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - DHT
File: dht_format.h
Copyright 2008 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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef SYSMENU_DHT_FORMAT_H_
#define SYSMENU_DHT_FORMAT_H_
#define DHT_MAGIC_CODE (('N' << 0)|('D' << 8)|('H' << 16)|('T' << 24))
#define DHT_DS_HEADER_SIZE 0x160
#define DHT_OVERLAY_MAX (512*1024)
#define DHT_MAGIC_CODE_EX (('N' << 0)|('D' << 8)|('H' << 16)|('X' << 24))
#define DHT_MAGIC_CODE_ADHOC (('N' << 0)|('D' << 8)|('H' << 16)|('I' << 24))
#include <twl/types.h>
#include <twl/os/common/banner.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct DHTHeader
{
u32 magic_code; // fixed
u8 sign[128]; // for nums member and whole DHTDatabase array
u32 nums; // number of subsequent DHTDatabase array
}
DHTHeader;
#define DHTHeaderEx DHTHeader
typedef struct DHTDatabase
{
u8 game_code[4];
u8 rom_version;
u8 reserved[3]; // for 4B alignment DHTDatabase array
u8 hash[2][20];
}
DHTDatabase;
typedef struct DHTDatabaseEx
{
u8 game_code[4];
u8 rom_version;
u8 reserved[3]; // for 4B alignment DHTDatabase array
u8 banner_hash[20];
}
DHTDatabaseEx;
/*
ad-hoc対処用
*/
#define DHT_INDIVIDUAL_ENTRY_MAX 8
typedef struct DHTDatabaseAdHoc
{
u8 game_code[4];
u8 rom_version;
u8 reserved[3]; // for 4B alignment DHTDatabase array
struct
{
u32 offset;
u32 length;
} entry[DHT_INDIVIDUAL_ENTRY_MAX];
u8 hash[20];
}
DHTDatabaseAdHoc;
typedef struct DHTFile
{
DHTHeader header;
DHTDatabase database[];
}
DHTFile;
typedef struct DHTFileEx
{
DHTHeader header;
DHTDatabaseEx database[];
}
DHTFileEx;
typedef struct DHTFileAdHoc
{
DHTHeader header;
DHTDatabaseAdHoc database[];
}
DHTFileAdHoc;
#define DHT_HMAC_KEY { \
0x61, 0xbd, 0xdd, 0x72, 0x7e, 0x72, 0xbe, 0xde, 0xad, 0x3a, 0xdf, 0x7f, 0x3d, 0x2d, 0xf7, 0xa5, \
0x16, 0x7e, 0xb4, 0xc9, 0x7c, 0x6c, 0x00, 0x7c, 0x57, 0xbb, 0x94, 0x8a, 0x64, 0xcd, 0x4e, 0x1c, \
0x51, 0x6b, 0xbd, 0xdb, 0x1d, 0xeb, 0x54, 0xe9, 0x34, 0x27, 0xf9, 0x31, 0x51, 0x5e, 0x89, 0x4e, \
0x7f, 0xd9, 0x7c, 0xe9, 0x92, 0x44, 0x0f, 0xef, 0x6b, 0xb6, 0x12, 0x21, 0x68, 0x88, 0xd8, 0xee \
}
#define DHT_HMAC_KEY2 { \
0x85, 0x29, 0x48, 0xf3, 0xa1, 0xbb, 0x13, 0x30, 0x93, 0x5d, 0xb8, 0xc9, 0xa5, 0x9a, 0xe8, 0x30, \
0xc4, 0xd0, 0x4a, 0xdd, 0xa4, 0x92, 0x81, 0xfd, 0x4f, 0xa1, 0x32, 0xfa, 0x46, 0x05, 0xde, 0x68, \
0x7b, 0xa7, 0xd7, 0x5b, 0xc9, 0x3a, 0xc8, 0x8d, 0xcd, 0x25, 0x3a, 0x17, 0x3c, 0xc2, 0xd6, 0xe0, \
0xd2, 0xe5, 0xb9, 0xfb, 0x49, 0xf9, 0x4d, 0x05, 0x70, 0x10, 0x29, 0x51, 0x7a, 0xc5, 0x89, 0x49, \
}
/*
hp:
*/
#define DHT_GET_SIGN_TARGET_ADDR(hp) (&((DHTHeader*)hp)->nums)
#define DHT_GET_SIGN_TARGET_SIZE(hp) (((DHTHeader*)hp)->nums * sizeof(DHTDatabase) + sizeof(u32))
#define DHT_GET_SIGN_TARGET_OFFSET (int)DHT_GET_SIGN_TARGET_ADDR(0)
#define DHT_GET_SIGN_TARGET_ADDR_EX(hp) DHT_GET_SIGN_TARGET_ADDR(hp)
#define DHT_GET_SIGN_TARGET_SIZE_EX(hp) (((DHTHeader*)hp)->nums * sizeof(DHTDatabaseEx) + sizeof(u32))
#define DHT_GET_SIGN_TARGET_OFFSET_EX DHT_GET_SIGN_TARGET_OFFSET
#define DHT_GET_SIGN_TARGET_ADDR_ADHOC(hp) DHT_GET_SIGN_TARGET_ADDR(hp)
#define DHT_GET_SIGN_TARGET_SIZE_ADHOC(hp) (((DHTHeader*)hp)->nums * sizeof(DHTDatabaseAdHoc) + sizeof(u32))
#define DHT_GET_SIGN_TARGET_OFFSET_ADHOC DHT_GET_SIGN_TARGET_OFFSET
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif //SYSMENU_DHT_FORMAT_H_

View File

@ -1,32 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - DS
File: ds.h
Copyright 2008 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 SYSM_DS_H_
#define SYSM_DS_H_
#include <sysmenu/ds/common/ds.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_DS_H_ */
#endif

View File

@ -1,41 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: ds.h
Copyright 2008 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 SYSM_DS_COMMON_DS_H_
#define SYSM_DS_COMMON_DS_H_
#include <sysmenu/memorymap.h>
#ifdef __cplusplus
extern "C" {
#endif
#define DS_REDRSV_PATCH_FUNC_ADDR ( HW_RED_RESERVED + 0x1c )
#define DS_WLPATCH_SIZE (5*4)
#define DS_WLPATCH_COPYCODE_SIZE (10*4)
#define DS_ANGVOL_GAIN_SP_SPECIAL 0x2C
void DS_InsertWLPatch( void* romHeaderNTR );
void DS_SetSpeakerVolume( void* romHeaderNTR );
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_DS_COMMON_DS_H_ */
#endif

View File

@ -1,103 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - ErrorLog
File: errorLog.h
Copyright **** 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 __SYSM_ERRORLOG__
#define __SYSM_ERRORLOG__
#include <twl.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
/*-- type definition ----------------------------*/
// 日付データとかを除いた、自由フォーマットで書き込めるサイズ
// このサイズを超えた文字列は切り捨てられます
// ERRORLOG_STR_LENGTH = ERRORLOG_BUFSIZE - ERRORLOG_STR_OFFSET - 1
#define ERRORLOG_STR_LENGTH 213
#define ERRORLOG_SIZE ( 16 * 1024 ) // ファイルは16KBサイズ固定
#define ERRORLOG_BUFSIZE 256 // 1エントリあたりのサイズ
#define ERRORLOG_NUM_ENTRY ( ERRORLOG_SIZE / ERRORLOG_BUFSIZE ) // ログに書き込まれるエントリの最大数
// 既に書き込まれたエラーログを表現するためのエントリ
typedef struct ErrorLogEntry{
// ランチャからの呼び出しかどうか
BOOL isBroken;
BOOL isLauncherError;
// エラーのタイムスタンプ
int year;
int month;
int day;
char week[4]; // 曜日の3文字表現
int hour;
int minute;
int second;
// u32だけど実態は4byteの文字列
u32 titleId;
// ---- isLauncherError = TRUEの時のデータ ----
// エラーコード
int errorCode;
// ---- isLauncherError = FALSEの時のデータ ----
char *errorStr;
} ErrorLogEntry;
typedef struct ErrorLogWork{
// メモリ確保用関数
void* (*Alloc) ( u32 ) ;
void (*Free) ( void* ) ;
// エラーログエントリ保持用変数
ErrorLogEntry *entry;
// エラーログのエントリ数
int numEntry;
// エラーログのファイルポインタ
FSFile file;
// 排他制御用Mutex
OSMutex mutex;
} ErrorLogWork;
/*-- function prototype -------------------------*/
extern BOOL ERRORLOG_Printf( const char *fmt, ... );
extern BOOL ERRORLOG_Init( void* (*AllocFunc) (u32) , void (*FreeFunc) (void*) );
extern void ERRORLOG_End( void );
extern int ERRORLOG_GetNum() ;
extern const ErrorLogEntry* ERRORLOG_Read( int idx );
// for RED Launcher
extern BOOL ERRORLOG_Write( u64 errorCode );
extern FSFile ERRORLOGi_getLogFilePt( void );
#endif // SDK_ARM9
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif

View File

@ -1,32 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: hotsw.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 SYSM_HOTSW_H_
#define SYSM_HOTSW_H_
#include <sysmenu/hotsw/common/hotsw.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_HOTSW_H_ */
#endif

View File

@ -1,220 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: hotsw.h
Copyright 2008 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_HOTSW_COMMON_HOTSW_H__
#define __SYSMENU_HOTSW_COMMON_HOTSW_H__
#include <twl.h>
#ifdef __cplusplus
extern "C" {
#endif
// Define -------------------------------------------------------------------
#define SYSM_HOTSW_ENABLE_ROMEMU
#define USE_WRAM_LOAD
#define INITIAL_KEYTABLE_PRELOAD
#define HOTSW_FINAL_VERSION
//#define USE_NEW_DMA
//#define HOTSW_NO_MESSAGE // Printf抑制スイッチ
#ifndef SDK_FINALROM
#ifdef HOTSW_NO_MESSAGE
#define HOTSW_TPrintf( ... ) ((void)0)
#define HOTSW_PutString( ... ) ((void)0)
#else
#define HOTSW_TPrintf OS_TPrintf
#define HOTSW_PutString OS_PutString
#endif
#else
#define HOTSW_TPrintf( ... ) ((void)0)
#define HOTSW_PutString( ... ) ((void)0)
#endif
// enum -------------------------------------------------------------------
// スレッドに送るメッセージのステート
typedef enum HotSwMessageType{
HOTSW_INSERT = 0,
HOTSW_PULLOUT,
HOTSW_CONTROL
} HotSwMessageType;
typedef enum ModeType{
HOTSW_MODE1 = 0,
HOTSW_MODE2
} ModeType;
typedef enum HotSwCardState{
HOTSW_CARD_STATE_POWER_OFF = 0,
HOTSW_CARD_STATE_NORMAL_MODE,
HOTSW_CARD_STATE_GAME_MODE,
HOTSW_CARD_STATE_KEEP
} HotSwCardState; // 旧 HotSwApliType
// union -------------------------------------------------------------------
// PXI用メッセージ
typedef union HotSwPxiMessageForArm7{
struct {
u32 value :1;
u32 ctrl :1;
u32 finalize :1;
u32 read :1;
u32 cardState:8;
u32 :20;
} msg;
u32 data;
} HotSwPxiMessageForArm7;
typedef union HotSwPxiMessageForArm9{
struct {
u32 mode :1;
u32 insert :1;
u32 pullout :1;
u32 read :1;
u32 result :8;
u32 :20;
} msg;
u32 data;
} HotSwPxiMessageForArm9;
// struct -------------------------------------------------------------------
// スレッド用メッセージ
typedef struct HotSwMessageForArm7{
u32 value;
BOOL ctrl;
BOOL finalize;
BOOL read;
HotSwMessageType type;
HotSwCardState state;
} HotSwMessageForArm7;
typedef struct HotSwMessageForArm9{
BOOL isGameMode;
BOOL isInsert;
BOOL isPulledOut;
BOOL isReadComplete;
CardDataReadState result;
} HotSwMessageForArm9;
// Function prototype -------------------------------------------------------
// --- ARM9
#ifdef SDK_ARM9
// PXI通信でARM7に活線挿抜有効無効を通知。カード関連のフラグ処理も行う(非同期版)
void HOTSW_EnableHotSWAsync( BOOL enable );
// PXI通信でARM7に活線挿抜有効無効を通知。カード関連のフラグ処理も行う(同期版)
void HOTSW_EnableHotSW( BOOL enable );
// PXI通信でARM7に活線挿抜無効を通知。(非同期版)
void HOTSW_InvalidHotSWAsync( void );
// PXI通信でARM7に活線挿抜無効を通知。(同期版)
void HOTSW_InvalidHotSW( void );
// PXI通信でARM7に活線挿抜Finalize処理を通知
void HOTSW_FinalizeHotSWAsync( HotSwCardState cardState );
// 活線挿抜の許可/抑制の状態を返す
BOOL HOTSW_isEnableHotSW(void);
// カードアプリのロードが完了しているかを返す
BOOL HOTSW_isCardLoadCompleted(void);
// 終了処理が完了したかを返す
BOOL HOTSW_isFinalized(void);
// 活線挿抜処理中かどうかを返す
BOOL HOTSW_isBusyHotSW(void);
#ifdef USE_WRAM_LOAD
// 活栓挿抜処理の初期化
void HOTSW_Init();
// カードデータを読み出す関数(同期版)
CardDataReadState HOTSW_ReadCardData(void* src, void* dest, u32 size);
// カードデータを読み出す関数(非同期版)
CardDataReadState HOTSW_ReadCardDataAsync(void* src, void* dest, u32 size);
// カードがGameモードになった時のコールバック関数を設定
void HOTSW_SetGameModeCallBackFunction(OSIrqFunction function);
// カードが刺さった時のコールバック関数を設定
void HOTSW_SetCardInsertCallBackFunction(OSIrqFunction function);
// カードが抜けた時のコールバック関数を設定
void HOTSW_SetCardPullOutCallBackFunction(OSIrqFunction function);
// カードがゲームモードになったかどうか
BOOL HOTSW_isGameMode(void);
// Gameモードのデータ読み関数
CardDataReadState HOTSW_ReadCardDataOnGameMode(const void* src, void* dest, u32 size);
#endif
// --- ARM7
#else
// 活栓挿抜処理の初期化
void HOTSW_Init(u32 threadPrio);
#ifdef INITIAL_KEYTABLE_PRELOAD
// DS互換BlowfishテーブルをWRAM経由でローカルにコピーする
void HOTSW_CopyInitialKeyTable(void);
#endif
// カードの存在判定
BOOL HOTSW_IsCardExist(void);
// カードにアクセスできる状態か判定
BOOL HOTSW_IsCardAccessible(void);
// Boot Segment バッファの指定
void HOTSW_SetBootSegmentBuffer(void* buf, u32 size);
// Secure Segment バッファの指定
void HOTSW_SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size);
// 上記のバッファ非クリアバージョン
void HOTSWi_SetSecureSegmentBuffer(ModeType type ,void* buf, u32 size);
// ROMをエミュレーションしているか
BOOL HOTSWi_IsRomEmulation(void);
// デバッガ通信用にカードスロットの電源をONにする。
void HOTSWi_TurnCardPowerOn(u32 slot);
// カードワーク取得
void *HOTSWi_GetCardBootData(void);
#ifdef USE_WRAM_LOAD
// NANDアプリ用KeyTableの生成
void HOTSWi_MakeBlowfishTableDSForNAND(void);
// 引数で与えられたバッファから2KB分の領域をBlowfishで復号化する
BOOL HOTSW_DecryptObjectFile(void* dest);
#endif
#endif
// Romエミュレーション情報を格納しているバッファのポインタを返す
SDK_INLINE void* HOTSW_GetRomEmulationBuffer(void)
{
return (void*)&SYSMi_GetWork()->romEmuInfo;
}
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif // __SYSMENU_HOTSW_COMMON_HOTSW_H__

View File

@ -1,101 +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 _SYSMENU_MMAP_H_
#define _SYSMENU_MMAP_H_
#ifndef SDK_ASM
#include <twl.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
// define data ------------------------------------
// SystemMenu自身のマップ情報定義
#define SYSM_OWN_ARM9_MMEM_ADDR SYSM_TWL_ARM9_LTD_LOAD_MMEM_END
#define SYSM_OWN_ARM9_MMEM_ADDR_END SYSM_TWL_ARM7_LTD_LOAD_MMEM
#define SYSM_OWN_ARM9_MMEM_CODE_ADDR (SYSM_OWN_ARM9_MMEM_ADDR + SYSM_DMA_BUFOVER_BARRIER_SIZE)
#define SYSM_OWN_ARM7_MMEM_ADDR 0x02280000
#define SYSM_OWN_ARM7_MMEM_ADDR_END 0x02380000
#define SYSM_OWN_ARM7_MMEM_CODE_ADDR (SYSM_OWN_ARM7_MMEM_ADDR + SYSM_DMA_BUFOVER_BARRIER_SIZE)
extern u32 SDK_AUTOLOAD_WRAM_START[];
#ifndef SDK_ASM
#define SYSM_OWN_ARM7_WRAM_ADDR ((u32)SDK_AUTOLOAD_WRAM_START)
#else
#define SYSM_OWN_ARM7_WRAM_ADDR SDK_AUTOLOAD_WRAM_START
#endif
#define SYSM_OWN_ARM7_WRAM_ADDR_END 0x0380f000
#define SYSROM9_NINLOGO_ADR 0xffff0020 // ARM9システムROM内の任天堂ロゴ格納アドレス
#define SYSM_DMA_BUFOVER_BARRIER_SIZE 0x0200
// カードアプリ格納バッファROMヘッダバッファはNANDアプリでも使用
#define SYSM_APP_ROM_HEADER_SIZE 0x1000
#define SYSM_APP_ROM_HEADER_BUF ( 0x02fe6000 )
#define SYSM_APP_ROM_HEADER_BUF_END ( SYSM_APP_ROM_HEADER_BUF + SYSM_APP_ROM_HEADER_SIZE )
#define SYSM_CARD_ROM_HEADER_BAK ( SYSM_APP_ROM_HEADER_BUF_END )
#define SYSM_CARD_ROM_HEADER_BAK_END ( SYSM_CARD_ROM_HEADER_BAK + SYSM_APP_ROM_HEADER_SIZE )
#define SYSM_CARD_NTR_SECURE_BUF ( SYSM_CARD_ROM_HEADER_BAK_END )
#define SYSM_CARD_NTR_SECURE_BUF_END ( SYSM_CARD_NTR_SECURE_BUF + SECURE_AREA_SIZE )
#define SYSM_CARD_TWL_SECURE_BUF ( SYSM_CARD_NTR_SECURE_BUF_END )
#define SYSM_CARD_TWL_SECURE_BUF_END ( SYSM_CARD_TWL_SECURE_BUF + SECURE_AREA_SIZE )
#define SYSM_CARD_BANNER_BUF ( SYSM_CARD_TWL_SECURE_BUF_END )
#define SYSM_CARD_BANNER_BUF_END ( SYSM_CARD_BANNER_BUF + 0x3000 )
#define SYSM_NTR_ROM_HEADER_BUF 0x023ffe00
#define SYSM_DBG_NTR_ROM_HEADER_BUF 0x027ffe00
#define SYSM_DBG_NTR_SYSTEM_BUF 0x027ff000
// ※アプリをWRAMに直接配置してブートしようとすると、SystemMenuのコードとぶつかっていろいろややこしい状態になるので、検討が必要
// アプリロード可能領域のマップ情報定義
#define SYSM_NTR_ARM9_LOAD_MMEM 0x02000000 // ロード可能なARM9 static MMEM アドレス
#define SYSM_NTR_ARM9_LOAD_MMEM_END 0x02280000 // ロード可能なARM9 static MMEM 最終アドレス
#define SYSM_NTR_ARM7_LOAD_MMEM 0x02380000 // ロード可能なARM7 static MMEM アドレス
#define SYSM_NTR_ARM7_LOAD_MMEM_END 0x023c0000 // ロード可能なARM7 static MMEM 最終アドレス
#define SYSM_NTR_ARM7_LOAD_WRAM 0x037f8000 // ロード可能なARM7 static WRAM アドレス
#define SYSM_NTR_ARM7_LOAD_WRAM_END 0x0380f000 // ロード可能なARM7 static WRAM 最終アドレス
#define SYSM_TWL_ARM9_LOAD_MMEM HW_MAIN_MEM_PARAMETER_BUF_END // ロード可能なARM9 static MMEM アドレス <- SDKでズレたので要修正
#define SYSM_TWL_ARM9_LOAD_MMEM_END SYSM_NTR_ARM9_LOAD_MMEM_END // ロード可能なARM9 static MMEM 最終アドレス
#define SYSM_TWL_ARM7_LOAD_MMEM SYSM_NTR_ARM7_LOAD_MMEM // ロード可能なARM7 static MMEM アドレス
#define SYSM_TWL_ARM7_LOAD_MMEM_END SYSM_NTR_ARM7_LOAD_MMEM_END // ロード可能なARM7 static MMEM 最終アドレス
#define SYSM_TWL_ARM7_LOAD_WRAM SYSM_NTR_ARM7_LOAD_WRAM // ロード可能なARM7 static WRAM アドレス
#define SYSM_TWL_ARM7_LOAD_WRAM_END SYSM_NTR_ARM7_LOAD_WRAM_END // ロード可能なARM7 static WRAM 最終アドレス
#define SYSM_TWL_ARM9_LTD_LOAD_MMEM 0x02400000 // ロード可能なARM9 LTD static MMEM アドレス
#define SYSM_TWL_ARM9_LTD_LOAD_MMEM_END 0x02680000 // ロード可能なARM9 LTD static MMEM 最終アドレス
#define SYSM_TWL_ARM7_LTD_LOAD_MMEM 0x02e80000 // ロード可能なARM7 LTD static MMEM アドレス
#define SYSM_TWL_ARM7_LTD_LOAD_MMEM_END 0x02f88000 // ロード可能なARM7 LTD static MMEM 最終アドレス
#define SYSM_TWL_ARM7_LTD_LOAD_WRAM 0x037c0000 // ロード可能なARM7 LTD static WRAM アドレス
#define SYSM_TWL_ARM7_LTD_LOAD_WRAM_END SYSM_NTR_ARM7_LOAD_WRAM_END // ロード可能なARM7 LTD static WRAM 最終アドレス
#define SYSM_TWL_ARM7_LTD_HYB_LOAD_WRAM 0x037f8000 // ロード可能なARM7 LTD static WRAM アドレス
#define SYSM_TWL_ARM7_LTD_HYB_LOAD_WRAM_END SYSM_NTR_ARM7_LOAD_WRAM_END // ロード可能なARM7 LTD static WRAM 最終アドレス
// マウント情報一時バッファ
#define SYSM_TWL_MOUNT_INFO_TMP_BUFFER 0x02ff3400 // マウント情報の一時バッファ
#ifdef __cplusplus
}
#endif
#endif // _SYSMENU_MMAP_H_

View File

@ -1,39 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - MCU
File: mcu.h
Copyright 2008 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:: 2007-09-06$
$Rev: 651 $
$Author: nakasima $
*---------------------------------------------------------------------------*/
#ifndef SYSM_MCU_H_
#define SYSM_MCU_H_
#include <twl/mcu.h>
#include <sysmenu/mcu/common/fifo.h>
#ifdef SDK_ARM9
#include <sysmenu/mcu/ARM9/mcu.h>
#else // SDK_ARM7
#include <sysmenu/mcu/ARM7/mcu.h>
#endif // SDK_ARM7
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_MCU_H_ */
#endif

View File

@ -1,44 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: mcu.h
Copyright 2008 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:: 2008-01-23#$
$Rev: 3784 $
$Author: yutaka $
*---------------------------------------------------------------------------*/
#ifndef SYSM_MCU_ARM7_H_
#define SYSM_MCU_ARM7_H_
/*---------------------------------------------------------------------------*
è<EFBFBD>è`
*---------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/*===========================================================================*/
void SYSM_InitMcuPxi( u32 prio );
u8 SYSMi_GetMcuVersion( void );
/*===========================================================================*/
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* SYSM_MCU_ARM7_H_ */
/*---------------------------------------------------------------------------*
End of file
*---------------------------------------------------------------------------*/

View File

@ -1,69 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: mcu.h
Copyright 2008 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:: 2008-01-23#$
$Rev: 3784 $
$Author: yutaka $
*---------------------------------------------------------------------------*/
#ifndef SYSM_MCU_ARM9_H_
#define SYSM_MCU_ARM9_H_
#include <twl/mcu.h>
#include <twl/mcu/ARM7/mcu_reg.h>
#include "../common/fifo.h"
/*---------------------------------------------------------------------------*
è<EFBFBD>è`
*---------------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
typedef enum SYSMMcuResult
{
MCU_RESULT_SUCCESS = 0,
MCU_RESULT_SUCCESS_TRUE = 0,
MCU_RESULT_SUCCESS_FALSE,
MCU_RESULT_BUSY,
MCU_RESULT_ILLEGAL_PARAMETER,
MCU_RESULT_SEND_ERROR,
MCU_RESULT_INVALID_COMMAND,
MCU_RESULT_ILLEGAL_STATUS,
MCU_RESULT_FATAL_ERROR,
MCU_RESULT_MAX
}
SYSMMcuResult;
typedef void (*SYSMMcuCallback)(SYSMMcuResult result, void *arg);
/*===========================================================================*/
void SYSM_InitMcuPxi( void );
u8 SYSMi_GetMcuVersion( void );
SYSMMcuResult SYSM_ReadMcuRegisterAsync( u8 addr, u8* pValue, SYSMMcuCallback callback, void* arg );
SYSMMcuResult SYSM_WriteMcuRegisterAsync( u8 addr, u8 value, SYSMMcuCallback callback, void* arg );
void SYSM_SetMcuInterruptHandler( SYSMMcuCallback handler );
/*===========================================================================*/
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* SYSM_MCU_ARM9_H_ */
/*---------------------------------------------------------------------------*
End of file
*---------------------------------------------------------------------------*/

View File

@ -1,86 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlSDK - mcu-test - include
File: fifo.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:: 2008-01-25#$
$Rev: 3844 $
$Author: yutaka $
*---------------------------------------------------------------------------*/
#ifndef SYSM_MCU_COMMON_FIFO_H_
#define SYSM_MCU_COMMON_FIFO_H_
#include <twl/types.h>
#include <sysmenu/sysmenu_lib/common/pxi.h>
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
#define MCUTEST_PXI_CONTINUOUS_PACKET_MAX 2
#define MCUTEST_PXI_DATA_SIZE_MAX ((MCUTEST_PXI_CONTINUOUS_PACKET_MAX-1)*3+1) // 最大データ数
#define MCUTEST_PXI_START_BIT 0x02000000 // 先頭パケットを意味する
#define MCUTEST_PXI_RESULT_BIT 0x00008000 // PXIの応答を示す
#define MCUTEST_PXI_DATA_NUMS_SHIFT 16 // データ数位置
#define MCUTEST_PXI_DATA_NUMS_MASK 0x00ff0000 // データ数領域
#define MCUTEST_PXI_COMMAND_SHIFT 8 // コマンド格納部分の位置
#define MCUTEST_PXI_COMMAND_MASK 0x00007f00 // コマンド格納部分のマスク
#define MCUTEST_PXI_1ST_DATA_SHIFT 0 // 先頭パケットのデータ位置
#define MCUTEST_PXI_1ST_DATA_MASK 0x000000ff // 先頭パケットのデータ領域
#ifdef __cplusplus
extern "C" {
#endif
/*===========================================================================*/
typedef enum McuTestCommand
{
MCU_TEST_COMMAND_NULL = 0,
MCU_TEST_COMMAND_READ_REGISTER,
MCU_TEST_COMMAND_WRITE_REGISTER,
MCU_TEST_COMMAND_INTERRUPT,
MCU_TEST_COMMAND_MAX
}
SYSMMcuCommand;
// 応答定義
typedef enum SYSMMcuPxiResult
{
MCU_PXI_RESULT_SUCCESS = 0, // 処理成功 (void/void*型) // 場合により後続パケットあり
MCU_PXI_RESULT_SUCCESS_TRUE = 0, // 処理成功 (BOOL型)
MCU_PXI_RESULT_SUCCESS_FALSE, // 処理成功 (BOOL型)
MCU_PXI_RESULT_INVALID_COMMAND, // 不正なPXIコマンド
MCU_PXI_RESULT_INVALID_PARAMETER, // 不正なパラメータ
MCU_PXI_RESULT_ILLEGAL_STATUS, // MCUの状態により処理を実行不可
MCU_PXI_RESULT_BUSY, // 他のリクエストを実行中
MCU_PXI_RESULT_FATAL_ERROR, // その他何らかの原因で処理に失敗
MCU_PXI_RESULT_MAX
}
SYSMMcuPxiResult;
/*===========================================================================*/
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* SYSM_MCU_COMMON_FIFO_H_ */
/*---------------------------------------------------------------------------*
End of file
*---------------------------------------------------------------------------*/

View File

@ -1,34 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - memorymap
File: memorymap.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef SYSM_MEMORYMAP_H_
#define SYSM_MEMORYMAP_H_
#include <sysmenu/hw/common/mmap.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_MEMORYMAP_H_ */
#endif

View File

@ -1,177 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - NAMUT
File: namut.h
Copyright 2008 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 NAM_UTILITY_H_
#define NAM_UTILITY_H_
#ifdef __cplusplus
extern "C" {
#endif
#ifdef SDK_ARM9
typedef void* (*NAMUTAlloc)(u32 size);
typedef void (*NAMUTFree)(void* ptr);
/*---------------------------------------------------------------------------*
Name: NAMUT_Init
Description: NAMUT
Arguments: allocFunc: (32byteアライメント
freeFunc:
Returns:
*---------------------------------------------------------------------------*/
void NAMUT_Init(NAMUTAlloc allocFunc, NAMUTFree freeFunc);
/*---------------------------------------------------------------------------*
Name: NAMUT_Format
Description: NANDの擬似フォーマット
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
BOOL NAMUT_Format(void);
/*---------------------------------------------------------------------------*
Name: NAMUT_FormatCore
Description: (NAND初期化)
common, personalizedに関わらず全て消去するか
       personalizedのみ消去するかを引数で選択できます
Arguments: isForceEraseCommonETicket: TRUE common, personalizedに関わらずユーザーアプリを全消去
FALSEの時はcommonETicketを残す
isDeleteWifiSettings: WiFi設定を削除するかTRUEで削除
Returns: None
*---------------------------------------------------------------------------*/
BOOL NAMUT_FormatCore( BOOL isForceEraseCommonETicket, BOOL isDeleteWiFiSettings );
/*---------------------------------------------------------------------------*
Name: NAMUT_GetSoftBoxCount
Description: NANDの installedカウントfreeカウントを調べて
Arguments: installed : installedカウント格納変数
free : freeカウント格納変数
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL NAMUT_GetSoftBoxCount( u8* installed, u8* free );
/*---------------------------------------------------------------------------*
Name: NAMUT_UpdateSoftBoxCount
Description: InstalledSoftBoxCount, FreeSoftBoxCount
NANDの状態に合わせて更新します
Arguments: None.
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL NAMUT_UpdateSoftBoxCount( void );
/*---------------------------------------------------------------------------*
Name: NAMUTi_ClearSavedataPublic
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
BOOL NAMUTi_ClearSavedataPublic(const char* path, u64 titleID);
/*---------------------------------------------------------------------------*
Name: NAMUTi_ClearSavedataPrivate
Description:
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
BOOL NAMUTi_ClearSavedataPrivate(const char* path, u64 titleID);
/*---------------------------------------------------------------------------*
Name: NAMUTi_DestroySubBanner
Description: CRC破壊を試みます
TRUEを返しますOS_DeleteSubBannerFileのパクリ
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
BOOL NAMUTi_DestroySubBanner(const char* path);
/*---------------------------------------------------------------------------*
Name: NAMUT_DeleteNandDirectory
Description:
Arguments: path :
Returns: None
*---------------------------------------------------------------------------*/
BOOL NAMUT_DeleteNandDirectory(const char *path);
/*---------------------------------------------------------------------------*
Name: NAMUT_DeleteNandTmpDirectory
Description: "nand:/tmp"
"nand:/tmp/es"
Arguments: None
Returns: None
*---------------------------------------------------------------------------*/
BOOL NAMUT_DeleteNandTmpDirectory(void);
/*---------------------------------------------------------------------------*
Name: NAMUT_ClearTWLSettings
Description: TWL本体設定データのクリアを行います
Arguments: TRUE : NANDにライトバックします
FALSE: NANDへのライトバックは行いません
Returns: TRUE
*---------------------------------------------------------------------------*/
BOOL NAMUT_ClearTWLSettings( BOOL doWriteback );
BOOL NAMUT_PrintInstalledTitleETicketType( void );
#endif // SDK_ARM9
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* NAM_UTILITY_H_ */

View File

@ -1,63 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: reloc_info.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 __SYSMENU_RELOC_INFO_H__
#define __SYSMENU_RELOC_INFO_H__
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------
// データ型定義
//----------------------------------------------------------------------
#define RELOCATE_INFO_NUM 4 // ROM再配置情報の数今のところarm9,arm7それぞれltdとflxで最大4つ
#define DEST_LIST_NUM (RELOCATE_INFO_NUM + 1)
// 再配置情報データ構造体
typedef struct Relocate_Info
{
u32 src;
u32 dest;
u32 length;
u32 post_clear_addr;
u32 post_clear_length;
BOOL rev;
}Relocate_Info;
// ROMセグメント名
typedef enum RomSegmentName {
ARM9_STATIC = 0,
ARM7_STATIC = 1,
ARM9_LTD_STATIC = 2,
ARM7_LTD_STATIC = 3
}RomSegmentName;
//----------------------------------------------------------------------
// 関数宣言
//----------------------------------------------------------------------
// ロード領域のチェック及び再配置情報の生成
BOOL SYSM_CheckLoadRegionAndSetRelocateInfo( RomSegmentName seg, u32 *dest, u32 length, Relocate_Info *info, BOOL isTwlApp );
#ifdef __cplusplus
}
#endif
#endif // __SYSMENU_RELOC_INFO_H__

View File

@ -1,63 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: sharedFont.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 TWL_SHARED_FONT_H_
#define TWL_SHARED_FONT_H_
#include <twl.h>
#ifdef __cplusplus
extern "C" {
#endif
// 共有フォントインデックス
typedef enum SFONT_Index {
SHARED_FONT_WW_S = 0,
SHARED_FONT_WW_M = 1,
SHARED_FONT_WW_L = 2,
SHARED_FONT_MAX = 3
}SFONT_Index;
// 共有フォント初期化
BOOL SFONT_Init( void );
// 共有フォント テーブルサイズ取得
int SFONT_GetInfoTableSize( void );
// 共有フォント テーブルロード
BOOL SFONT_LoadInfoTable( void *pBuffer );
// 共有フォント フォントサイズ取得
int SFONT_GetFontSize( SFONT_Index index );
// 共有フォント フォントネーム取得
const u8 *SFONT_GetFontName( SFONT_Index index );
// 共有フォント タイムスタンプ取得
u32 SFONT_GetFontTimestamp( void );
// 共有フォント フォントロード
BOOL SFONT_LoadFont( SFONT_Index index, void *pBuffer );
#ifdef __cplusplus
}
#endif
#endif // TWL_SHARED_FONT_H_

View File

@ -1,35 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL - SYSMENU_LIB
File: sysmenu_lib.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:: 2007-09-06$
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef SYSM_SYSMENU_LIB_H_
#define SYSM_SYSMENU_LIB_H_
#include <sysmenu/sysmenu_lib/common/sysmenu_api.h>
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
#include <sysmenu/sysmenu_lib/common/pxi.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
} /* extern "C" */
#endif
/* SYSM_SYSMENU_LIB_H_ */
#endif

View File

@ -1,73 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: pxi.h
Copyright 2008 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 SYSM_COMMON_PXI_H_
#define SYSM_COMMON_PXI_H_
#include <nitro/pxi.h>
#ifdef __cplusplus
extern "C" {
#endif
//----------------------------------------------------------------------
// PXIコマンド
//----------------------------------------------------------------------
// (PXI_MAX_FIFO_TAG - 1) is used by SEA
#define PXI_FIFO_TAG_MCUTEST (PXI_MAX_FIFO_TAG - 2)
#define PXI_FIFO_TAG_HOTSW (PXI_MAX_FIFO_TAG - 3)
#define PXI_FIFO_TAG_DECRYPTAES (PXI_MAX_FIFO_TAG - 4)
#define SYSMENU_PXI_FIFO_TAG (PXI_MAX_FIFO_TAG - 5)
typedef enum SYSMPXICommand {
SYSM_PXI_COMM_DUMMY = 0,
#ifdef DHT_TEST
SYSM_PXI_COMM_DS_HASH_TABLE,
#endif
SYSM_PXI_COMM_NUM
}SYSMPXICommand;
/*---------------------------------------------------------------------------*
*---------------------------------------------------------------------------*/
// PXI初期化
#ifdef SDK_ARM9
void SYSM_InitPXI( void );
#else // SDK_ARM7
void SYSM_InitPXI( u32 mcu_prio );
#endif // SDK_ARM7
#ifdef DHT_TEST
#ifdef SDK_ARM9
void SYSMi_PrepareDatabase(void);
#endif
#endif
// PXIコマンド送信
BOOL SYSMi_TrySendPXICommand( SYSMPXICommand cmd, u16 data );
BOOL SYSMi_SendPXICommand( SYSMPXICommand command, u16 data );
// PXIコマンド受信
void SYSMi_PXIFifoRecvCallback( PXIFifoTag tag, u32 data, BOOL err );
#ifdef __cplusplus
}
#endif
#endif // SYSM_COMMON_PXI_H_

View File

@ -1,152 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: SYSM_lib.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 __SYSM_LIB_H__
#define __SYSM_LIB_H__
#include <twl.h>
#include <twl/nam.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/banner.h>
#include <twl/os/common/msJump.h>
#include <sysmenu/types.h>
#include <sysmenu/reloc_info/common/reloc_info.h>
#include <application_jump_private.h>
#ifdef __cplusplus
extern "C" {
#endif
// define data----------------------------------------------------------
#ifndef SDK_FINALROM
//#define SYSM_DEBUG_ // デバッグコード用ビルドスイッチ
//#define ENABLE_INITIAL_SETTINGS_
#endif // SDK_FINALROM
#define CARD_SLOT_NUM 1 // カードスロット数
#define LAUNCHER_TITLE_LIST_NUM ( LCFG_TWL_FREE_SOFT_BOX_COUNT_MAX + 1 ) // ランチャーのタイトルリスト数
#define SYSM_PAD_SHORTCUT_TP_CALIBRATION ( PAD_BUTTON_L | PAD_BUTTON_R | PAD_BUTTON_START )
#define SYSM_PAD_SHORTCUT_MACHINE_SETTINGS ( PAD_BUTTON_SELECT )
#define SYSM_PAD_PRODUCTION_SHORTCUT_CARD_BOOT ( PAD_BUTTON_A | PAD_BUTTON_B \
| PAD_BUTTON_X | PAD_BUTTON_Y | PAD_BUTTON_R )
// 量産工程で使用する初回起動設定をキャンセルしてカードブートするショートカットキー
#define SYSM_MOUNT_INFO_SIZE (0x400 - OS_MOUNT_PATH_LEN)
#define SYSM_LAUNCHER_VER 1 // ランチャーバージョンSDK側でランチャーに絡む処理の判定用
// ver.1 : FSでのMountInfo有無の判定に使用
#define SYSM_ALIGNMENT_LOAD_MODULE 32 // モジュールをsrlから読み込む際のアライメントAESおよびAESで使うDMAの仕様による
// タイトルリスト作成用情報構造体
typedef struct TitleListMakerInfo {
char makerCode[MAKER_CODE_MAX];
u32 public_save_data_size;
u32 private_save_data_size;
BOOL permit_landing_normal_jump;
TitleInfoSub sub_info;
}TitleListMakerInfo;
// global variable------------------------------------------------------
#ifdef SDK_ARM9
extern const char *g_strIPLSvnRevision;
extern const char *g_strSDKSvnRevision;
extern void *SYSM_Alloc( u32 size );
extern void SYSM_Free( void *ptr );
//extern void *(*SYSM_Alloc)( u32 size ); // ライブラリ内部使用
//extern void (*SYSM_Free)( void *ptr ); // 同上
#endif
// function-------------------------------------------------------------
#ifdef SDK_ARM9
// 初期化
extern void SYSM_Init( void *(*pAlloc)(u32), void (*pFree)(void*) ); // 初期化。
extern void SYSM_InitPXI( void ); // PXI初期化
extern void SYSM_SetArena( void ); // システムメニューのアリーナ初期化。OS_Initの後で呼んでください。
extern void SYSM_SetAllocFunc( void *(*pAlloc)(u32), void (*pFree)(void*) ); // SYSM_initで設定した場合は必要なし。
extern TitleProperty *SYSM_ReadParameters( void ); // 本体設定データ、ランチャーパラメータなどを取得
extern void SYSM_DeleteTmpDirectory( TitleProperty *pBootTitle ); // "nand:/tmp"フォルダのクリーン
// アプリ情報取得
extern TitleProperty *SYSM_GetCardTitleList( BOOL *changed ); // カードアプリタイトルリストの取得
extern void SYSM_InitTitleList( void ); // アプリタイトルリスト取得準備
extern TitleProperty *SYSM_GetNandTitleList( void ); // NAND アプリタイトルリストの取得
extern void SYSM_MakeNandTitleListMakerInfo( void ); // アプリ引き渡しタイトルリスト作成用情報の作成(ダイレクトブート用)
extern void SYSM_MakeNandTitleListAsync( void ); // 非同期版NANDアプリタイトルリストの作成
extern void SYSM_MakeNandTitleListMakerInfoAsync( void ); // 非同期版アプリ引き渡しタイトルリスト作成用情報の作成
extern BOOL SYSM_isNandTitleListReady( void ); // 非同期版が終了したかどうかの判定に使う
extern TitleProperty *SYSM_GetTitlePropertyList( void ); // SYSM_MakeNandTitleListAsyncで作成されたアプリリストのポインタを取得
extern void SYSM_SetSystemMenuVersionControlData( void ); // SystemMenuVersionデータアクセスのための制御情報のセット
// アプリ起動
extern void SYSM_StartLoadTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドでロード開始
extern BOOL SYSM_IsLoadTitleFinished( void ); // SYSM_StartLoadTitleで起動したスレッドが終了したかどうかを確認
extern BOOL SYSM_IsLoadTitlePaused(void); // ローディングスレッドが一時停止しているか?
extern void SYSM_ResumeLoadingThread( BOOL force ); // ローディングスレッドが一時停止していたら再開
extern void SYSM_StartAuthenticateTitle( TitleProperty *pBootTitle ); // 指定したTitlePropertyを別スレッドで検証開始
extern BOOL SYSM_IsAuthenticateTitleFinished( void ); // SYSM_StartAuthenticateTitleで起動したスレッドが終了したかどうかを確認
extern s32 SYSMi_getCheckTitleLaunchRightsResult( void ); // CheckTitleLaunchRightsの結果を返すデバグ用
extern void SYSM_TryToBootTitle( TitleProperty *pBootTitle ); // pBootTitleで指定したタイトルをブート。never return.
// AES領域デクリプト
extern void SYSM_StartDecryptAESRegion( ROM_Header_Short *hs ); // 起動するROMのAES暗号化領域のデクリプト開始
extern BOOL SYSM_InitDecryptAESRegion_W( ROM_Header_Short *hs ); // WRAM経由ファイル読み込みのコールバックで使うAESデクリプト処理の初期化
extern void SYSM_StartDecryptAESRegion_W( const void *wram_addr, const void *orig_addr, u32 size );
// WRAM経由ファイル読み込みのコールバックで使うAESデクリプト処理関数
// Nintendoロゴ制御
extern BOOL SYSM_CheckNintendoLogo( u16 *pLogoData ); // Nintendoロゴデータのチェック
extern void SYSM_LoadNintendoLogo2D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_2D形式でロードpTempBufferには0x700bytes必要)
extern void SYSM_LoadNintendoLogo1D( u16 *pLogoData, u16 *pDst, int paletteColorIndex ); // NintendoロゴデータをOBJ_1D形式でロード同上
#endif
// 状態チェック
extern BOOL SYSM_IsExistCard( void ); // TWL/NTRカードが差さっているかアプリは未認証状態
extern BOOL SYSM_IsInspectCard( void ); // 検査カードが差さっているか?
extern BOOL SYSM_IsHotStart( void ); // ホットスタートか?
extern BOOL SYSM_IsLogoDemoSkip( void ); // ロゴデモ飛ばし状態か?
extern void SYSM_SetLogoDemoSkip( BOOL skip ); // ロゴデモ飛ばし状態フラグを設定する。
extern BOOL SYSM_IsValidTSD( void ); // TWL設定データは有効か
extern void SYSM_SetValidTSD( BOOL valid ); // TWL設定データの有効無効フラグを設定する。
extern const LauncherParamBody *SYSM_GetLauncherParamBody( void ); // ランチャーパラメータの取得
extern void SYSM_SetHeaderLoadCompleted( BOOL comp ); // ヘッダロード完了フラグ設定
extern void SYSM_SetLoadFinished( BOOL finish ); // アプリロード完了フラグ設定
extern void SYSM_SetLoadSucceeded( BOOL succeed ); // アプリロード成功フラグ設定
extern void SYSM_SetCardBoot( BOOL card ); // カードブートフラグ設定
extern void SYSM_SetHotStart( BOOL hot ); // ホットスタートフラグ設定
extern void SYSM_SetValidLauncherParam( BOOL valid ); // ランチャーパラメータ有効フラグ設定
extern void SYSM_SetResetRTC( BOOL reset ); // リセットRTCフラグ設定
extern void SYSM_SetNANDFatalError( BOOL fatal ); // NANDFatalエラーフラグ設定
extern void SYSM_SetARM9Start( BOOL start ); // ARM9開始可能フラグ設定
extern BOOL SYSM_IsLauncherHidden( void ); // ランチャーの画面を表示しないバージョンか?
// AES領域デクリプト
extern void SYSM_InitDecryptAESPXICallback( void ); // AES領域デクリプト用のPXIコールバック設定
#ifdef __cplusplus
}
#endif
#endif // __SYSM_LIB_H__

View File

@ -1,236 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: sysmenu_work.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_WORK_H__
#define __SYSMENU_WORK_H__
#include <twl.h>
#include <twl/nam.h>
#include <sysmenu/types.h>
#include <sysmenu/memorymap.h>
#include <sysmenu/reloc_info/common/reloc_info.h>
#include <firm/gcd/blowfish.h>
#ifdef __cplusplus
extern "C" {
#endif
// define data ------------------------------------
typedef enum SYSMCloneBootMode {
SYSM_CLONE_BOOT_MODE = 1,
SYSM_OTHER_BOOT_MODE = 2
}
SYSMCloneBootMode;
typedef enum CardDataReadState {
CARD_READ_SUCCESS = 0,
CARD_READ_TIME_OUT,
CARD_READ_PULLED_OUT_ERROR,
CARD_READ_BUFFER_OVERRUN_ERROR,
CARD_READ_MODE_ERROR,
CARD_READ_BUSY,
CARD_READ_ID_CHECK_ERROR,
CARD_READ_BUS_LOCK_ERROR,
CARD_READ_UNEXPECTED_ERROR
}
CardDataReadState;
// WRAM経由でカードデータを読み込む場合に使用
typedef struct CardReadParam {
u32 src;
u32 dest;
u32 size;
}CardReadParam;
//----------------------------------------------------------------------
// ROMエミュレーション情報
//----------------------------------------------------------------------
#define SYSM_ROMEMU_INFO_SIZE 0x20 // ROMエミュレーションデータサイズ
#define SYSM_ROMEMU_INFO_MAGIC_CODE 0x444c5754 // "TWLD"の文字列
// ISデバッガROMエミュレーション情報
typedef struct SYSMRomEmuInfo {
// マジックコードSYSM_ROMEMU_INFO_MAGIC_CODEの固定値
u32 magic_code;
// フラグ類
u32 isEnableSlot1 : 1;
u32 isEnableSlot2 : 1;
u32 bootSlotNo : 2;
u32 isEnableExMainMemory : 1;
u32 isBootMachineSettings : 1;
u32 isBootSpecifiedNANDApp : 1;
u32 isTlfRom : 1;
u32 isForceNTRMode : 1;
u32 isForceBannerViewMode : 1;
u32 :0;
// isBootSpecifiedNANDAppで起動するアプリのTitleID
u64 titleID;
// 予約
u8 rsv[ 0x10 ];
}
SYSMRomEmuInfo;
//----------------------------------------------------------------------
// SYSMワーク
//----------------------------------------------------------------------
// SYSM共有ワーク構造体
typedef struct SYSM_work {
Relocate_Info romRelocateInfo[RELOCATE_INFO_NUM]; // ROM再配置情報arm9,arm7それぞれltdとflxで最大4つ
struct {
struct {
vu8 isHotStart :1; // Hot/Coldスタート判定
vu8 isValidLauncherParam :1; // ランチャーパラメータ有効
vu8 isResetRTC :1; // RTCリセット発生
vu8 isNANDFatalError :1; // NANDFATALエラー発生
vu8 isARM9Start :1; // ARM9スタートフラグ
vu8 :0;
}arm7;
struct {
vu8 isValidTSD :1; // NITRO設定データ無効フラグ
vu8 isLogoSkip :1; // ロゴデモスキップ
vu8 isHeaderLoadCompleted :1; // アプリヘッダロード完了?
vu8 isLoadFinished :1; // アプリロード完了?
vu8 isLoadSucceeded :1; // アプリロード成功?
vu8 isCardBoot :1; // カードブートか?
vu8 :0;
}arm9;
struct {
vu16 isExistCard :1; // 有効なNTR/TWLカードが存在するか
vu16 isInspectCard :1; // 検査カードか?
vu16 isOnDebugger :1; // デバッガ動作か?
vu16 isEnableHotSW :1; // 活線挿抜有効?
vu16 isLoadRomEmuOnly :1; // ROMエミュレーション情報のみロード
vu16 isCardLoadCompleted :1; // カードからデータロード完了?
vu16 isValidCardBanner :1; // バナーデータ更新?
vu16 is1stCardChecked :1; // カードデータの1stチェック完了
vu16 isCardGameMode :1; // カードがゲームモードに遷移したか?
vu16 isFinalized :1; // HOTSW終了処理完了
vu16 :0;
vu8 isCardStateChanged; // カード状態更新フラグ
vu8 isBusyHotSW; // 活線挿抜処理中?
vu8 isKeyTableLoadReady; // Key Tableのロード準備完了
}hotsw;
}flags; // 9B
OSLockWord lockCardRsc ATTRIBUTE_ALIGN(8); // カードリソース排他制御用
OSLockWord lockHotSW; // カードリソース排他制御用
u32 appCardID; // カードID
OSBootType appBootType; // ブート種別
u32 gameCommondParam; // NTRのゲームコマンドパラメータ(NTRのROMヘッダのゲームコマンドパラメータに上書きする)
u8 cloneBootMode;
CardReadParam cardReadParam; // カードリードパラメータ
u32 romHeaderNTR[HW_CARD_ROM_HEADER_SIZE/sizeof(u32)]; // NTR-ROMヘッダ一時バッファ
LauncherParam launcherParam;
SYSMRomEmuInfo romEmuInfo;
RTCRawData Rtc1stData; // RTC初回ロード値 8byte
BOOL isDeveloperAESMode; // 開発用セキュリティか製品版でFALSE
void *addr_AESregion[2]; // AES暗号化領域の格納アドレス
u32 size_AESregion[2]; // AES暗号化領域のサイズ
u8 keyAES[AES_KEY_SIZE]; // 開発版AES暗号化領域の復号に使用するKEYに使うタイトルネーム
u8 idAES[GAME_CODE_MAX]; // 製品版AES暗号化領域の復号に使用するIDに使うゲームコード
u8 seedAES[AES_KEY_SIZE]; // 製品版AES暗号化領域の復号に使用するSEED
u8 counterAES[2][AES_BLOCK_SIZE]; // AES暗号化領域の復号に使用するカウンタ初期値
// NTR-IPL2のレガシー 最終的には消すと思う
BOOL enableCardNormalOnly;
u8 rtcStatus;
}SYSM_work;
typedef struct SYSM_work2 {
SVCHMACSHA1Context hmac_sha1_context;
TitleProperty bootTitleProperty;
char bootContentPath[ FS_ENTRY_LONGNAME_MAX ];
}SYSM_work2;
// NTRにおける仕様を継承する必要のあるワーク
typedef struct SDKBootCheckInfo{
u32 nCardID; // NORMALカードID // SDKではここだけ見ているっぽい ※最終的にはランチャーでここにカードIDをセットする
u32 sCardID; // SECUREカードID
u16 cardHeaderCrc16; // カードヘッダCRC16
u16 cardSecureCrc16; // カードSECURE領域CRC16
s16 cardHeaderError; // カードヘッダエラー
s16 disableEncryptedCardData; // カードSECURE領域暗号化データ無効
u16 sysromCrc16; // システムROMのCRC16
s16 enableCardNormalOnly; // カードNORMALモードのみ有効
s16 isOnDebugger; // デバッガ上で動作中か
s8 rtcError; // RTCエラー
u8 rtcStatus1; // RTCステータス1
}SDKBootCheckInfo;
// ARM9からARM7にWRAM経由で引き渡す鍵情報ワーク
typedef struct DeliverBROM9Key {
BLOWFISH_CTX ds_blowfish;
// u8 aes_key[ AES_KEY_SIZE ];
}DeliverBROM9Key;
//----------------------------------------------------------------------
// SYSM共有ワーク領域のアドレス獲得
//----------------------------------------------------------------------
// SYSMランチャーパラメータアドレスの取得※ライブラリ向け。ARM9側はSYSM_GetLauncherParamを使用して下さい。
#define SYSMi_GetLauncherParamAddr() ( (LauncherParam *)HW_PARAM_LAUNCH_PARAM )
// SYSM共有ワークの取得
#define SYSMi_GetWork() ( (SYSM_work *)HW_TWL_SHARED_RESERVED )
#define SYSMi_GetWork2() ( (SYSM_work2 *)HW_MAIN_MEM_SHARED )
// SDKブートチェックアプリ起動時にカードIDをセットする必要がある。
#define SYSMi_GetSDKBootCheckInfo() ( (SDKBootCheckInfo *)HW_BOOT_CHECK_INFO_BUF )
#define SYSMi_GetSDKBootCheckInfoForNTR() ( (SDKBootCheckInfo *)0x027ffc00 )
// NANDファームがロードしてくれているマイコンフリーレジスタ値の取得
#define SYSMi_GetMCUFreeRegisterValue() ( *(vu8 *)HW_RESET_PARAMETER_BUF )
// ROMヘッダワークの取得
#define SYSM_GetAppRomHeader() ( (ROM_Header_Short *)SYSM_APP_ROM_HEADER_BUF )
#define SYSM_GetCardRomHeader() SYSM_GetAppRomHeader()
// ARM9から引き渡す鍵情報ワークの取得
#ifdef SDK_ARM9
#define GetDeliverBROM9KeyAddr() ( (DeliverBROM9Key *)HW_WRAM_0 )
#else
#define GetDeliverBROM9KeyAddr() ( (DeliverBROM9Key *)HW_WRAM_0_LTD )
#endif
// ISデバッガ上で動作しているか
static inline BOOL SYSM_IsRunOnDebugger( void )
{
#ifdef SYSM_BUILD_FOR_DEBUGGER
return SYSMi_GetWork()->flags.hotsw.isOnDebugger;
#else
return FALSE;
#endif
}
#ifdef __cplusplus
}
#endif
#endif // __SYSMENU_WORK_H__

View File

@ -1,61 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: types.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 __SYSM_TYPES_H__
#define __SYSM_TYPES_H__
#include <twl.h>
#include <twl/os/common/format_rom.h>
#include <../build/libraries/os/common/include/application_jump_private.h>
#ifdef __cplusplus
extern "C" {
#endif
// define data----------------------------------------------------------
// NAMTitleIDをHiLoに分割してアクセスする場合に使用
typedef struct TitleID_HiLo {
u8 Lo[ 4 ];
u32 Hi;
}TitleID_HiLo;
// タイトル情報サブ
typedef struct TitleInfoSub {
RomExpansionFlags exFlags;
char platform_code;
u8 parental_control_rating_info[ PARENTAL_CONTROL_INFO_SIZE ];
u32 card_region_bitmap;
u8 agree_EULA_version;
}TitleInfoSub;
// タイトル情報
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
NAMTitleId titleID; // タイトルIDTitleID_Hiで起動メディアは判定できる
LauncherBootFlags flags; // ブート時のランチャー動作フラグ
TWLBannerFile *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。)
TitleInfoSub sub_info;
}TitleProperty;
#ifdef __cplusplus
}
#endif
#endif // __SYSM_TYPES_H__

View File

@ -1,164 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: util.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 __SYSM_UTIL_H__
#define __SYSM_UTIL_H__
#include <twl.h>
#include <twl/os/common/format_rom.h>
#ifdef SYSM_BUILD_FOR_DEBUGGER
#include <sysmenu/sysmenu_lib/common/sysmenu_work.h>
#endif
#ifdef __cplusplus
extern "C" {
#endif
// define data----------------------------------------------------------
#define BACKLIGHT_BRIGHTNESS_MAX 4
typedef enum FatalErrorCode {
FATAL_ERROR_UNDEFINED = 0,
FATAL_ERROR_NAND = 1, // NANDデバイスのエラー
FATAL_ERROR_HWINFO_NORMAL = 2, // HWーマル情報のリードエラー
FATAL_ERROR_HWINFO_SECURE = 3, // HWセキュア情報のリードエラー
FATAL_ERROR_TWLSETTINGS = 4, // 本体設定データのリードエラー
FATAL_ERROR_SHARED_FONT = 5, // 共有フォントのリードエラー
FATAL_ERROR_WLANFIRM_AUTH = 6, // 無線ファームの認証エラー
FATAL_ERROR_WLANFIRM_LOAD = 7, // 無線ファームのロードエラー
FATAL_ERROR_TITLE_LOAD_FAILED = 8, // アプリケーションのロードエラー
FATAL_ERROR_TITLE_POINTER_ERROR = 9, // ブート要求されたが、アプリが指定されていない
FATAL_ERROR_AUTHENTICATE_FAILED = 10, // アプリ認証失敗
FATAL_ERROR_ENTRY_ADDRESS_ERROR = 11, // アプリの起動アドレスが不正
FATAL_ERROR_TITLE_BOOTTYPE_ERROR = 12, // アプリブートタイプが不正NANDブート、カードブート、MBブート以外の値
FATAL_ERROR_SIGN_DECRYPTION_FAILED = 13, // アプリ署名デクリプト失敗
FATAL_ERROR_SIGN_COMPARE_FAILED = 14, // アプリ署名検証失敗
FATAL_ERROR_HEADER_HASH_CALC_FAILED = 15, // アプリハッシュ計算用メモリ確保失敗
FATAL_ERROR_TITLEID_COMPARE_FAILED = 16, // ブート要求されたTWLアプリと実際にロードしたアプリのTitleIDが不一致
FATAL_ERROR_VALID_SIGN_FLAG_OFF = 17, // アプリROMヘッダの署名有効フラグが立っていない
FATAL_ERROR_CHECK_TITLE_LAUNCH_RIGHTS_FAILED = 18, // アプリ起動認証失敗
FATAL_ERROR_MODULE_HASH_CHECK_FAILED = 19, // アプリハッシュ不一致
FATAL_ERROR_MODULE_HASH_CALC_FAILED = 20, // アプリハッシュ計算用メモリ確保失敗
FATAL_ERROR_MEDIA_CHECK_FAILED = 21, // カードアプリをNAND起動 or NANDアプリをカード起動しようとしたデバッガ起動を除く
FATAL_ERROR_DL_MAGICCODE_CHECK_FAILED = 22, // DSダウンロードプレイアプリ署名のマジックコードが不正TEMPブートアプリブート時
FATAL_ERROR_DL_SIGN_DECRYPTION_FAILED = 23, // DSダウンロードプレイアプリ署名のデクリプト失敗TEMPブートアプリブート時
FATAL_ERROR_DL_HASH_CALC_FAILED = 24, // DSダウンロードプレイアプリハッシュ計算用メモリ確保失敗TEMPブートアプリブート時
FATAL_ERROR_DL_SIGN_COMPARE_FAILED = 25, // DSダウンロードプレイアプリハッシュ不一致TEMPブートアプリブート時
FATAL_ERROR_WHITELIST_INITDB_FAILED = 26, // NTRホワイトリスト自身の認証失敗
FATAL_ERROR_WHITELIST_NOTFOUND = 27, // 起動NTRアプリのイニシャルコードがNTRホワイトリストに見つからなかった
FATAL_ERROR_DHT_PHASE1_FAILED = 28, // アプリのNTRホワイトリスト認証失敗フェーズ
FATAL_ERROR_DHT_PHASE2_FAILED = 29, // アプリのNTRホワイトリスト認証失敗フェーズ
FATAL_ERROR_LANDING_TMP_JUMP_FLAG_OFF = 30, // TMPブートアプリのROMヘッダにTMPジャンプ許可ビットが立っていない
FATAL_ERROR_TWL_BOOTTYPE_UNKNOWN = 31, // TWLアプリブートタイプ不明
FATAL_ERROR_NTR_BOOTTYPE_UNKNOWN = 32, // NTRアプリブートタイプ不明
FATAL_ERROR_PLATFORM_UNKNOWN = 33, // ROMヘッダのプラットホームコード不明
FATAL_ERROR_LOAD_UNFINISHED = 34, // アプリロードが完了していないのに、認証フェーズに進んだ
FATAL_ERROR_LOAD_OPENFILE_FAILED = 35, // NANDアプリのファイルオープン失敗
FATAL_ERROR_LOAD_MEMALLOC_FAILED = 36, // アプリハッシュ計算用メモリ確保失敗
FATAL_ERROR_LOAD_SEEKFILE_FAILED = 37, // NANDアプリのファイルシーク失敗
FATAL_ERROR_LOAD_READHEADER_FAILED = 38, // アプリROMヘッダロード失敗
FATAL_ERROR_LOAD_LOGOCRC_ERROR = 39, // アプリROMヘッダNintendoロゴCRC不正
FATAL_ERROR_LOAD_READDLSIGN_FAILED = 40, // TMPブートアプリのDSダウンロードプレイ署名リード失敗
FATAL_ERROR_LOAD_RELOCATEINFO_FAILED = 41, // アプリ再配置情報生成失敗
FATAL_ERROR_LOAD_READMODULE_FAILED = 42, // アプリロード失敗
FATAL_ERROR_NINTENDO_LOGO_CHECK_FAILED = 43, // アプリROMヘッダNintendoロゴデータ不正
FATAL_ERROR_SYSMENU_VERSION = 44, //
FATAL_ERROR_DHT_PHASE1_CALC_FAILED = 45, // NTRアプリホワイトリストハッシュ計算用メモリ確保失敗
FATAL_ERROR_LOAD_UNKNOWN_BOOTTYPE = 46, // アプリブートタイプが不正
FATAL_ERROR_LOAD_AUTH_HEADER_FAILED = 47, // アプリROMヘッダ認証失敗
FATAL_ERROR_LOAD_NEVER_STARTED = 48, // ロードが開始されていないのに、認証が開始された
FATAL_ERROR_EJECT_CARD_AFTER_LOAD_START = 49, // カードが抜かれているのに、カードアプリのロードが開始された
FATAL_ERROR_TITLEID_COMPARE_FAILED_NTR = 50, // ブート要求されたNTRアプリと実際にロードしたアプリのTitleIDが不一致
FATAL_ERROR_DHT_PHASE3_FAILED = 51, // アプリのNTRホワイトリスト認証失敗フェーズ
FATAL_ERROR_DHT_PHASE4_FAILED = 52, // アプリのNTRホワイトリスト認証失敗フェーズ
FATAL_ERROR_BACKUP_DATA_CHECK_FAILED = 53, // バックアップデータの検証失敗
FATAL_ERROR_MAX = 53
}FatalErrorCode;
// global variable------------------------------------------------------
// function-------------------------------------------------------------
#ifdef SDK_ARM9
// バックライト
extern u32 UTL_SetBacklightBrightness( u8 brightness ); // バックライト輝度セット
extern u32 UTL_GetBacklightBrightness( u8 *pBrightness ); // バックライト輝度ゲット
// タッチパネル
extern void UTL_CaribrateTP( const LCFGTWLTPCalibData *pCalib ); // TPキャリブレーション
extern BOOL UTL_IsValidCalibration( u16 x, u16 y, u16 correct_x, u16 correct_y ); // TPキャリブレーション後にタッチしたポイントが正確か
// スリープ
extern void UTL_GoSleepMode( void );
// RTC関係
extern BOOL UTL_CheckRTCDate( RTCDate *pDate ); // 日付が正常かチェック
extern BOOL UTL_CheckRTCTime( RTCTime *pTime ); // 時刻が正常かチェック
extern s64 UTL_CalcRTCOffset( RTCDate *pNewDate, RTCTime *pNewTime ); // RTCオフセット計算とRTCへの日付時刻チェックを行う
extern u32 UTL_GetDayNum( u32 year, u32 month ); // 指定された年・月の日数を取得する
extern BOOL UTL_IsLeapYear100( u32 year ); // 指定された年がうるう年か調べる
// ペアレンタルコントロール問い合わせ
extern u32 UTL_CalcPCTLInquiryCode( void ); // 問い合わせコード(10進8桁)算出
extern u32 UTL_CalcPCTLMasterKey( void ); // マスターキー  算出※内部でRTC_GetDateを使用します。
// アプリROMヘッダの要EULAフラグ取得
extern BOOL UTL_IsROMHeaderEULARequired( void );
// アプリROMヘッダのnintendoロゴの正当性チェック
extern BOOL UTL_CheckNintendoLogoData( ROM_Header_Short *rh );
#endif
// FATALエラー
extern BOOL UTL_IsFatalError( void ); // FATALエラーか
extern void UTL_SetFatalError( FatalErrorCode error ); // FATALエラーのセット
extern u64 UTL_GetFatalError( void ); // FATALエラー状態の取得FatalErrorCodeをビットに割り当てて格納しています。
// リージョンチェック
static inline BOOL UTL_CheckAppRegion( u32 card_region_bitmap )
{
#ifdef SYSM_BUILD_FOR_DEBUGGER
#pragma unused(card_region_bitmap)
// デバッガ動作時のみ、リージョンチェックを無効にする。
if( SYSM_IsRunOnDebugger() ) {
return TRUE;
}
#endif
return ( card_region_bitmap & ( 0x00000001 << OS_GetRegion() ) ) ? TRUE : FALSE;
}
// CRCチェック
static inline BOOL UTL_CheckAppCRC16( ROM_Header_Short *pROMH )
{
u16 calc_crc = SVC_GetCRC16( 65535, pROMH, 0x015e );
if( ( calc_crc != pROMH->header_crc16 ) ||
( 0xcf56 != pROMH->nintendo_logo_crc16 ) ){
return FALSE;
}
return TRUE;
}
#ifdef __cplusplus
}
#endif
#endif // __SYSM_UTIL_H__

View File

@ -1,107 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: util_menuAppManager.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 MENU_APP_MANAGER_H_
#define MENU_APP_MANAGER_H_
#include <twl/nam.h>
#include <twl/os/common/format_rom.h>
#include <twl/os/common/banner.h>
#include <twl/lcfg.h>
#include <../build/libraries/os/common/include/application_jump_private.h>
#include <sysmenu/types.h>
#include <sysmenu/util.h>
typedef struct AMNBannerCounter
{
u32 control;
u8 count;
const TWLBannerFile *banner;
}
AMNBannerCounter;
typedef struct AMNFrameAnimeData{
const u8 *image;
const u8 *pltt;
BOOL vflip;
BOOL hflip;
}
AMNFrameAnimeData;
// アプリマネージャ
void AMN_init( void *(*pAlloc)(u32), void (*pFree)(void*) );
void AMN_restart();
void AMN_restartWithReadNandTitle();
void AMN_restartWithReadNandTitleHeaderShort();
void AMN_destroy();
BOOL AMN_isNandTitleListReady();
s32 AMN_getNandTitleListLengthForLauncher();
s32 AMN_getCardTitleListLength();
s32 AMN_getRomHeaderListLength();
// 本体設定の場合、アプリマネージャ用indexは飛び飛びになったり、
// ForSetting()が返す値(個数)より大きくなるので
// getNandTitleListLengthForSetting()は用意しない。
// isIndexValidForSetting()で、本体設定用としても有効かどうかを
// 判定してもらう予定。
BOOL AMN_isIndexValidForSetting(s32 index);
s32 AMN_getIndexByTitleId(NAMTitleId titleId);
NAMTitleId AMN_getTitleIdByIndex(s32 index);
void AMN_stepBannerAnimeAll(BOOL restart);
void AMN_stepBannerAnime(s32 index, BOOL restart);
const TitleProperty* AMN_getTitleProperty(s32 index);
const ROM_Header_Short* AMN_getTitleRomHeaderShort(s32 index);
const u8* AMN_getBannerImage(s32 index);
const u8* AMN_getBannerPltt(s32 index);
BOOL AMN_getBannerHFlip(s32 index);
BOOL AMN_getBannerVFlip(s32 index);
AMNFrameAnimeData AMN_getBannerAnime(s32 index);
const u16* AMN_getBannerText(s32 index);
const u16* AMN_getBannerText2(s32 index, OSLanguage language);
BOOL AMN_isDSWirelessIcon(s32 index);
BOOL AMN_isWiFiConnectionIcon(s32 index);
BOOL AMN_isAgreeEULAFlag(s32 index);
// info size is cParentalControlRatingInfoSize
const u8* AMN_getParentalControlRatingInfo(s32 index);
BOOL AMN_checkBannerFile(TWLBannerFile* pBanner);
// 生データTitlePropertyのリスト、HeaderShortリストにアクセスできる抜け道関数
TitleProperty* AMN_getTitlePropertyList( void );
ROM_Header_Short* AMN_getRomHeaderList( void );
enum {
// アプリマネージャ用タイトルindexは、0から始まり非負です。
// 0はCARD固定です。
// 1から39がNANDになります。
cAllTitleIndexStart = 0,
cCardTitleIndexStart = cAllTitleIndexStart,
cCardTitleArrayMax = 1,
cNandTitleIndexStart = cCardTitleIndexStart + cCardTitleArrayMax,
cNandTitleArrayMax = LCFG_TWL_FREE_SOFT_BOX_COUNT_MAX,
cAllTitleArrayMax = cCardTitleArrayMax + cNandTitleArrayMax
};
#endif

View File

@ -1,33 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: util_recoveryFile.h
Copyright **** 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 __UTIL_RECOVERY_FILE__
#define __UTIL_RECOVERY_FILE__
#include <twl.h>
typedef enum UTL_RecoveryStatus{
UTL_RCV_OK = 0,
UTL_RCV_SIZE_CHANGED,
UTL_RCV_FILE_CREATED,
UTL_RCV_FAILED
} UTL_RecoveryStatus;
/*-- function prototype -------------------------*/
extern UTL_RecoveryStatus UTL_RecoveryFile( const char* path, const u32 filesize );
#endif