mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
Delete include directory
This commit is contained in:
parent
e6311bfa3e
commit
b99406d56b
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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]の各スロットをバケツリレー方式で渡します。
|
||||
1スロット分のデータまたは全データが格納できたとき、ARM9へ
|
||||
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ではないか?
|
||||
(で完了したら返事を返す)
|
||||
|
||||
補足2:
|
||||
一度に複数スロットを使えそうな場合は、一気に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
|
||||
@ -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
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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]の各スロットをバケツリレー方式で渡します。
|
||||
1スロット分のデータまたは全データが格納されたとき、ARM7から
|
||||
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
|
||||
@ -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
|
||||
@ -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 // 1stR/W = 4/3
|
||||
#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 // 1stR/W = 4/3
|
||||
#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 // 1stR/W = 4/3
|
||||
#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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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_ */
|
||||
@ -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_ */
|
||||
@ -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
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
|
||||
}
|
||||
@ -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
|
||||
#}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
@ -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
|
||||
|
||||
}
|
||||
@ -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
|
||||
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
@ -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
|
||||
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
|
||||
@ -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
|
||||
|
||||
}
|
||||
@ -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)
|
||||
}
|
||||
@ -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
|
||||
@ -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ビーコン情報のインデックス値(0~15)
|
||||
@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ビーコン情報のインデックス値(0~15)
|
||||
@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__
|
||||
@ -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__
|
||||
@ -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
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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
|
||||
@ -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_ */
|
||||
@ -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_
|
||||
@ -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_
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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__
|
||||
@ -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_
|
||||
|
||||
@ -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
|
||||
@ -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
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -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
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -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
|
||||
*---------------------------------------------------------------------------*/
|
||||
@ -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
|
||||
@ -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: 指定したセーブデータファイルに対して
|
||||
FFクリア&フォーマットを行います。
|
||||
|
||||
Arguments: None
|
||||
|
||||
Returns: None
|
||||
*---------------------------------------------------------------------------*/
|
||||
BOOL NAMUTi_ClearSavedataPublic(const char* path, u64 titleID);
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: NAMUTi_ClearSavedataPrivate
|
||||
|
||||
Description: 指定したセーブデータファイルに対して
|
||||
FFクリア&フォーマットを行います。
|
||||
|
||||
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_ */
|
||||
@ -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__
|
||||
|
||||
@ -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_
|
||||
@ -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
|
||||
@ -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_
|
||||
@ -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__
|
||||
@ -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__
|
||||
|
||||
@ -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; // タイトルID(TitleID_Hiで起動メディアは判定できる?)
|
||||
LauncherBootFlags flags; // ブート時のランチャー動作フラグ
|
||||
TWLBannerFile *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。)
|
||||
TitleInfoSub sub_info;
|
||||
}TitleProperty;
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __SYSM_TYPES_H__
|
||||
@ -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ホワイトリスト認証失敗(フェーズ1)
|
||||
FATAL_ERROR_DHT_PHASE2_FAILED = 29, // アプリのNTRホワイトリスト認証失敗(フェーズ2)
|
||||
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ホワイトリスト認証失敗(フェーズ3)
|
||||
FATAL_ERROR_DHT_PHASE4_FAILED = 52, // アプリのNTRホワイトリスト認証失敗(フェーズ4)
|
||||
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 ); // マスターキー (10進5桁)算出(※内部で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__
|
||||
@ -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
|
||||
@ -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
|
||||
Loading…
Reference in New Issue
Block a user