SYSMライブラリの一部をUTLライブラリ、BANNERライブラリに切り出し。

TwlIPL内のライブラリとTwlSDKで追加使用するライブラリをcommondefs内ではなく、各アプリ内で
それぞれ指定するよう変更。
使用していなかったヘッダ類を削除。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1444 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-05-21 11:01:42 +00:00
parent 47853b4402
commit 8634f14535
36 changed files with 530 additions and 905 deletions

View File

@ -68,32 +68,6 @@ endif
SYSMENU_LIBDIR := $(SYSMENU_ROOT)/lib/$(TWL_LIBTYPE)
ifeq ($(CODEGEN_PROC),ARM9)
SYSMENU_LIBS ?= \
liblcfg$(TWL_LIBSUFFIX).a \
libsysmenu$(TWL_LIBSUFFIX).a \
libsysmmcu$(TWL_LIBSUFFIX).a \
libmbloader$(TWL_LIBSUFFIX).a \
libboot$(TWL_LIBSUFFIX).a \
libds$(TWL_LIBSUFFIX).a \
libhotsw$(TWL_LIBSUFFIX).a \
libdht$(TWL_LIBSUFFIX).a \
else # ($(CODEGEN_PROC),ARM7)
SYSMENU_LIBS ?= \
libsysmenu_sp$(TWL_LIBSUFFIX).a \
libsysmmcu_sp$(TWL_LIBSUFFIX).a \
libmbloader_sp$(TWL_LIBSUFFIX).a \
libboot_sp$(TWL_LIBSUFFIX).a \
libds_sp$(TWL_LIBSUFFIX).a \
libhotsw_sp$(TWL_LIBSUFFIX).a \
libdht_sp$(TWL_LIBSUFFIX).a \
endif
#----------------------------------------------------------------------------
# MY BUILD TOOLS
#
@ -115,7 +89,6 @@ ifneq ($(ES_ROOT),)
GINCLUDES += $(ES_ROOT)/twl/include
endif
GLIBRARY_DIRS := $(SYSMENU_LIBDIR) $(GLIBRARY_DIRS)
GLIBRARIES := $(SYSMENU_LIBS) $(GLIBRARIES)
#----------------------------------------------------------------------------
# TWLSYSMENU_INSTALL_ROOT

View File

@ -93,13 +93,25 @@ LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \
$(ROOT)/build/libraries/reboot/common/include \
$(SYSMENU_ROOT)/build/libraries_sysmenu/sysmenu/common/include
LLIBRARY_DIRS += ./
SYSMENU_LIBS = \
libsysmenu_sp$(TWL_LIBSUFFIX).a \
libsysmmcu_sp$(TWL_LIBSUFFIX).a \
libmbloader_sp$(TWL_LIBSUFFIX).a \
libboot_sp$(TWL_LIBSUFFIX).a \
libds_sp$(TWL_LIBSUFFIX).a \
libhotsw_sp$(TWL_LIBSUFFIX).a \
libdht_sp$(TWL_LIBSUFFIX).a \
LLIBRARIES += libwl_sp.TWL.LTD.a \
SDK_APPEND_LIBS = \
libwl_sp.TWL.LTD.a \
libaes_sp.firm.LTD.a \
libsea_sp.TWL.LTD.a \
libreboot_sp$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
LLIBRARY_DIRS += ./
LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES)

View File

@ -22,18 +22,19 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
#----------------------------------------------------------------------------
SUBDIRS_P = reloc_info \
SUBDIRS = reloc_info \
sysmenu \
mb_loader \
acsign \
boot \
hotsw \
namut \
mcu \
ds \
sharedFont \
banner \
util \
dht \
wds \
sharedFont
#----------------------------------------------------------------------------

View File

@ -26,14 +26,13 @@ TWL_PROC = ARM9
#----------------------------------------------------------------------------
SRCDIR = ../common/src
SRCDIR = ./src
INCDIR = ../common/include \
$(ROOT)/build/libraries/mb/common/include
INCDIR =
SRCS = mb_loader.c
SRCS = banner.c
TARGET_LIB = libmbloader$(TWL_LIBSUFFIX).a
TARGET_LIB = libbanner$(TWL_LIBSUFFIX).a
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs

View File

@ -16,8 +16,8 @@
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <sysmenu.h>
#include "internal_api.h"
#include <twl/nam.h>
#include <sysmenu/banner.h>
// define data-----------------------------------------------------------------
typedef struct BannerCheckParam {
@ -27,8 +27,6 @@ typedef struct BannerCheckParam {
// extern data-----------------------------------------------------------------
// function's prototype-------------------------------------------------------
static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner );
static BOOL SYSMi_CheckSubBannerFile( TWLSubBannerFile *pBanner );
// global variable-------------------------------------------------------------
// static variable-------------------------------------------------------------
@ -41,23 +39,10 @@ static BOOL SYSMi_CheckSubBannerFile( TWLSubBannerFile *pBanner );
//
// ============================================================================
// カードバナーリード※NTR-IPL2仕様
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
// カードアプリバナーリード
BOOL BANNER_ReadBannerFromCARD( u32 bannerOffset, TWLBannerFile *pBanner )
{
#pragma unused(bannerOffset)
BOOL isRead;
if( SYSMi_GetWork()->flags.hotsw.isValidCardBanner ) {
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
}
isRead = SYSMi_CheckBannerFile( pBanner );
if( !isRead ) {
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
}
return isRead;
/*
// ※カードライブラリでは、スロットAからのリードなら問題ないが、スロットBからは読めないのでとりあえず使わない
BOOL isRead;
u16 id = (u16)OS_GetLockID();
@ -68,17 +53,17 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
CARD_UnlockRom( id );
OS_ReleaseLockID( id );
isRead = SYSMi_CheckBannerFile( (TWLBannerFile *)pBanner );
isRead = BANNER_CheckBanner( (TWLBannerFile *)pBanner );
if( !isRead ) {
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
}
return isRead;
*/
}
// NANDアプリバナーリード
BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
{
#define PATH_LENGTH 1024
OSTick start;
@ -104,7 +89,7 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant open file %s\n",path);
OS_TPrintf("BANNER_GetNandTitleList failed: cant open file %s\n",path);
return FALSE;
}
@ -112,14 +97,14 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(0)\n");
OS_TPrintf("BANNER_GetNandTitleList failed: cant seek file(0)\n");
FS_CloseFile(file);
return FALSE;
}
readLen = FS_ReadFile(file, &offset, sizeof(offset));
if( readLen != sizeof(offset) )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant read file\n");
OS_TPrintf("BANNER_GetNandTitleList failed: cant read file\n");
FS_CloseFile(file);
return FALSE;
}
@ -129,18 +114,18 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET);
if( ! bSuccess )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant seek file(offset)\n");
OS_TPrintf("BANNER_GetNandTitleList failed: cant seek file(offset)\n");
FS_CloseFile(file);
return FALSE;
}
readLen = FS_ReadFile( file, pDst, (s32)sizeof(TWLBannerFile) );
if( readLen != (s32)sizeof(TWLBannerFile) )
{
OS_TPrintf("SYSM_GetNandTitleList failed: cant read file2\n");
OS_TPrintf("BANNER_GetNandTitleList failed: cant read file2\n");
FS_CloseFile(file);
return FALSE;
}
if( !SYSMi_CheckBannerFile( pDst ) )
if( !BANNER_CheckBanner( pDst ) )
{
// 正当性チェック失敗の場合はバッファクリア
MI_CpuClearFast( pDst, sizeof(TWLBannerFile) );
@ -163,19 +148,19 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
if( readLen == sizeof(TWLSubBannerFile) )
{
// 読み込みには成功したので正当性チェック
if( SYSMi_CheckSubBannerFile(&subBanner) )
if( BANNER_CheckSubBanner(&subBanner) )
{
// 成功したのでコピーする
pDst->h = subBanner.h;
pDst->anime = subBanner.anime;
OS_TPrintf("SYSMi_ReadBanner_NAND : subbanner check succeed. id=%.16x\n", titleID);
OS_TPrintf("BANNER_ReadBanner_NAND : subbanner check succeed. id=%.16x\n", titleID);
}else
{
OS_TPrintf("SYSMi_ReadBanner_NAND : subbanner check failed. id=%.16x\n", titleID);
OS_TPrintf("BANNER_ReadBanner_NAND : subbanner check failed. id=%.16x\n", titleID);
}
}else
{
OS_TPrintf("SYSMi_ReadBanner_NAND : subbanner read failed. id=%.16x\n", titleID);
OS_TPrintf("BANNER_ReadBanner_NAND : subbanner read failed. id=%.16x\n", titleID);
}
}
}
@ -183,20 +168,9 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
return TRUE;
}
// サブバナーデータの正誤チェック
static BOOL SYSMi_CheckSubBannerFile( TWLSubBannerFile *pBanner )
{
BOOL retval = TRUE;
// アニメ部チェック
if( pBanner->h.crc16_anime != SVC_GetCRC16( 0xffff, &pBanner->anime, sizeof(BannerAnime) ) ) {
retval = FALSE;
}
return retval;
}
// バナーデータの正誤チェック
static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner )
BOOL BANNER_CheckBanner( TWLBannerFile *pBanner )
{
int i;
BOOL retval = TRUE;
@ -235,3 +209,16 @@ static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner )
return retval;
}
// サブバナーデータの正誤チェック
BOOL BANNER_CheckSubBanner( TWLSubBannerFile *pBanner )
{
BOOL retval = TRUE;
// アニメ部チェック
if( pBanner->h.crc16_anime != SVC_GetCRC16( 0xffff, &pBanner->anime, sizeof(BannerAnime) ) ) {
retval = FALSE;
}
return retval;
}

View File

@ -17,7 +17,7 @@
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
SUBDIRS = ARM7 ARM9
SUBDIRS = ARM9
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs

View File

@ -1,53 +0,0 @@
#! make -f
#----------------------------------------------------------------------------
# Project: TwlIPL
# File: Makefile
#
# Copyright 2007 Nintendo. All rights reserved.
#
# These coded instructions, statements, and computer programs contain
# proprietary information of Nintendo of America Inc. and/or Nintendo
# Company Ltd., and are protected by Federal copyright law. They may
# not be disclosed to third parties or copied or duplicated in any form,
# in whole or in part, without the prior written consent of Nintendo.
#
# $Date:: $
# $Rev$
# $Author$
#----------------------------------------------------------------------------
SUBDIRS =
#----------------------------------------------------------------------------
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED
TWL_PROC = ARM7
#----------------------------------------------------------------------------
SRCDIR = ../common/src
INCDIR = ../common/include \
$(ROOT)/build/libraries/mb/common/include
SRCS = mb_loader.c
TARGET_LIB = libmbloader_sp$(TWL_LIBSUFFIX).a
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
INSTALL_TARGETS = $(TARGETS)
INSTALL_DIR = $(SYSMENU_INSTALL_LIBDIR)
#----------------------------------------------------------------------------
do-build: $(TARGETS)
include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
#===== End of Makefile =====

View File

@ -1,312 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: mb_loader.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <twl.h>
#if defined(SDK_ARM7)
#include <nitro_wl/ARM7/WlLib.h>
#else
#ifdef SDK_SMALL_BUILD
#include "SYSM_work.h"
#endif
#endif
#include <nitro/mb.h> // twl/mb.hがない。
#include <mb_private.h>
#include <sysmenu/mb_loader.h>
// --------------------------------------------------------------------------
// Download情報のサイズ
#define MB_OVT_MAX_SIZE MB_COMM_BLOCK_SIZE // OVTの最大サイズBlockサイズを最大サイズとする
/*----------------------------------------------------------------------------*/
#define MB_TRIGGER_SIGNAL_TO_ARM7 (0x00000001)
/*----------------------------------------------------------------------------*/
static void MIm_CpuClear32( register u32 data, register void *destp, register u32 size );
static void MIm_CpuClear32( register u32 data, register void *destp, register u32 size );
static void LOADERi_LocateAllSegments( MBDownloadFileInfo *mdfi );
static void MBi_SearchAndLocateSegmentInfo( MBDownloadFileInfo *mdfi, u16 processor );
static void LOADERi_Jump(void);
static void MBi_fifo_callback_arm7(PXIFifoTag tag, u32 msg_adr, BOOL err);
/*----------------------------------------------------------------------------*/
static MB_LoaderCallback loader_precallback = NULL;
/*----------------------------------------------------------------------------*/
#if defined(SDK_ARM7)
/*---------------------------------------------------------------------------*
Name: MIm_CpuCopy32
Description: CpuCopy
Arguments: srcp, destp, size
Returns: void
*---------------------------------------------------------------------------*/
#include <nitro/code32.h>
asm void MIm_CpuCopy32( register const void *srcp, register void *destp, register u32 size )
{
add r12, r1, r2 // r12: destEndp = destp + size
@30:
cmp r1, r12 // while (destp < destEndp)
ldmltia r0!, {r2} // *((vu32 *)(destp)++) = *((vu32 *)(srcp)++)
stmltia r1!, {r2}
blt @30
bx lr
}
#ifndef SDK_SMALL_BUILD
static asm void MIm_CpuClear32( register u32 data, register void *destp, register u32 size )
{
add r12, r1, r2 // r12: destEndp = destp + size
@20:
cmp r1, r12 // while (destp < destEndp)
stmltia r1!, {r0} // *((vu32 *)(destp++)) = data
blt @20
bx lr
}
#endif
#include <nitro/codereset.h>
/*---------------------------------------------------------------------------*
Name: LOADERi_LocateAllSegments
Description: ARM9,ARM7の各セグメントを必要に応じて再配置する
Arguments: mdfi
Returns: void
*---------------------------------------------------------------------------*/
static void LOADERi_LocateAllSegments( MBDownloadFileInfo *mdfi )
{
MBi_SearchAndLocateSegmentInfo(mdfi, MI_PROCESSOR_ARM9); // ARM9セグメントについての配置処理
MBi_SearchAndLocateSegmentInfo(mdfi, MI_PROCESSOR_ARM7); // ARM7セグメントについての配置処理
}
/* 指定のセグメントを検索し, 再配置する */
static void MBi_SearchAndLocateSegmentInfo( MBDownloadFileInfo *mdfi, u16 processor )
{
int i;
MbSegmentInfo *seg_info;
if( mdfi ) {
for( i = 0 ; i < MB_DL_SEGMENT_NUM ; ++i ) {
seg_info = &mdfi->seg[i];
if ( seg_info->target == processor ) {
if ( seg_info->recv_addr != seg_info->load_addr ) {
MIm_CpuCopy32( (void*)seg_info->recv_addr, (void*)seg_info->load_addr, seg_info->size );
#ifndef SDK_SMALL_BUILD // ※IPL2の場合は、このメモリクリアはIPL2で行う。
MIm_CpuClear32( 0, (void*)seg_info->recv_addr, seg_info->size );
#endif
}
}
}
}
}
/*---------------------------------------------------------------------------*
Name: LOADERi_Jump
Description: (ARM7/9 )
Arguments:
Returns: void
*---------------------------------------------------------------------------*/
static void LOADERi_Jump(void)
{
#if defined(SDK_ARM7)
MBDownloadFileInfo *mdfi = (MBDownloadFileInfo*)MB_DOWNLOAD_FILEINFO_ADDRESS;
MBParam *p_param = (MBParam*)HW_WM_BOOT_BUF;
if( p_param->boot_type != MB_TYPE_MULTIBOOT ) { // ブートタイプがマルチブートでない場合は、何もせずにTRUEリターン。
return;
}
LOADERi_LocateAllSegments( mdfi ); // ブートプログラムの再配置を行う。
#endif
}
/*---------------------------------------------------------------------------*
Name: MBi_fifo_callback_arm7
Description: PXI
Arguments:
Returns: None.
*---------------------------------------------------------------------------*/
static void MBi_fifo_callback_arm7(PXIFifoTag tag, u32 msg_adr, BOOL err)
{
#pragma unused( err )
if (tag == PXI_FIFO_TAG_MB && msg_adr == (u32)MB_TRIGGER_SIGNAL_TO_ARM7)
{
if ( loader_precallback ) {
(*loader_precallback)();
}
}
}
#endif /* defined(SDK_ARM7) */
/*---------------------------------------------------------------------------*
Name: LOADER_Start
Description:
Arguments: None.
Returns: TRUE - success FALSE - failed
*---------------------------------------------------------------------------*/
void LOADER_Start(void)
{
#if defined(SDK_ARM9)
int result;
MBDownloadFileInfo *mdfi = (MBDownloadFileInfo*)MB_DOWNLOAD_FILEINFO_ADDRESS;
MBParam *p_param = (MBParam*)HW_WM_BOOT_BUF;
// マルチブートの時はデバッガエントリに飛ばないようクリアする。
#ifdef SDK_SMALL_BUILD
GetMovedInfoFromIPL1Addr()->isOnDebugger = 0; // USG-WW-3rd & USG-China-2ndでは、GetSharedWorkAddr()->isOnDebuggerはパッチ領域とモロバッティングしているが、このルーチンがARM9のマルチブートルーチンで呼ばれた後で、ARM7でパッチ挿入ルーチンが呼ばれるので、大丈夫。
// しかし、デバッガ版ビルド時には、参照する側のisOnDebuggerフラグがクリアされていなかったので、修正する。
#endif // SDK_SMALL_BUILD
// システム領域へマルチブートフラグを書き込み
p_param->boot_type = MB_TYPE_MULTIBOOT;
// 親機情報をシステム領域へ書き込み
MI_CpuCopy8((void*)MB_BSSDESC_ADDRESS, &p_param->parent_bss_desc, MB_BSSDESC_SIZE);
// ARM7側へローダー起動を通知
result = PXI_SendWordByFifo( PXI_FIFO_TAG_MB, (u32)MB_TRIGGER_SIGNAL_TO_ARM7, FALSE );
SDK_ASSERTMSG((result >= 0), "ARM9:FIFO SEND ERROR!\n");
return;
#else /* defined(SDK_ARM9) */
// ローダーをコール
LOADERi_Jump();
#endif
}
/*---------------------------------------------------------------------------*
Name: LOADER_Init
Description:
Arguments: callback -
Returns: None.
*---------------------------------------------------------------------------*/
void LOADER_Init(MB_LoaderCallback callback)
{
MBParam *p_param = (MBParam*)HW_WM_BOOT_BUF;
PXI_Init(); // 初期化されていなかったら、初期化処理を行う
#if defined(SDK_ARM7)
loader_precallback = callback;
/* ブートフラグの補正(マルチブートフラグが指定されていない場合はROMとみなす。) */
if (p_param->boot_type != MB_TYPE_MULTIBOOT) {
p_param->boot_type = MB_TYPE_NORMAL;
}
/* 上の処理で, 必ず MB_TYPE_MULTIBOOT か MB_TYPE_NORMAL になる */
// マルチブート監視FIFOコールバックをセット
PXI_SetFifoRecvCallback( PXI_FIFO_TAG_MB, MBi_fifo_callback_arm7 );
#else /* defined(SDK_ARM7) */
#pragma unused(callback)
#endif
}
/*----------------------------------------------------------------------------*
/* 現状 不使用
*----------------------------------------------------------------------------*/
#if defined(LOADER_USE_OVT_BUF)
//----------------------------------------------------------------------
// オーバーレイテーブル
//----------------------------------------------------------------------
typedef struct {
u32 id; // オーバーレイ ID
void *ram_address; // ロード先頭位置
u32 ram_size; // ロードサイズ
u32 bss_size; // bss 領域サイズ
void *sinit_init; // static initializer 先頭アドレス
void *sinit_init_end; // static initializer 最終アドレス
u32 file_id; // オーバーレイファイルID
u32 rsv; // 予約。
} ROM_OVT;
// OVTの最大サイズこれについては再考の余地あり
#define MB_OVT_MAX_SIZE MB_COMM_BLOCKSIZE
// Overlay Table Buffer
// マルチブートするプログラム上で、スタティックイニシャライザを起動するのに必要
// オーバーレイテーブル数で容量が変わってくる。
// IPL2における仕様が固まるまで、ここに置いておく
static u32 mb_ovt_buf[MB_OVT_MAX_SIZE/sizeof(u32)];
static void MB_SetOverlayTable(ROM_OVT *srcp, u16 sec_num)
{
if (srcp && sec_num)
{
MI_CpuCopy8((void*)srcp, (void*)mb_ovt_buf, sec_num*sizeof(ROM_OVT));
}
}
#endif

View File

@ -28,12 +28,10 @@ REVISION_SRC = src/revision.c
SRCDIR = src
SRCS = sysmenu_lib.c \
util.c \
ninLogoFunc.c \
device.c \
keys.c \
title.c \
banner.c \
fs_wram.c \
../common/src/status.c \
../common/src/pxi.c \

View File

@ -138,26 +138,6 @@ void SYSMi_SetWirelessLED( BOOL enable )
}
// タッチパネルキャリブレーション
void SYSM_CaribrateTP( void )
{
LCFGTWLTPCalibData store;
TPCalibrateParam calibParam;
// 本体設定データからキャリブレーション情報を取得
LCFG_TSD_GetTPCalibration( &store );
// TPキャリブレーション
( void )TP_CalcCalibrateParam( &calibParam, // タッチパネル初期化
store.data.raw_x1, store.data.raw_y1, (u16)store.data.dx1, (u16)store.data.dy1,
store.data.raw_x2, store.data.raw_y2, (u16)store.data.dx2, (u16)store.data.dy2 );
TP_SetCalibrateParam( &calibParam );
OS_TPrintf("TP_calib: %4d %4d %4d %4d %4d %4d\n",
store.data.raw_x1, store.data.raw_y1, (u16)store.data.dx1, (u16)store.data.dy1,
store.data.raw_x2, store.data.raw_y2, (u16)store.data.dx2, (u16)store.data.dy2 );
}
// RTCクロック補正値をセット
void SYSMi_WriteAdjustRTC( void )
{
@ -175,8 +155,8 @@ void SYSMi_CheckRTC( void )
// RTCのリセット or おかしい値を検出した場合は初回起動シーケンスへ。
( void )RTC_GetDateTime( &date, &time );
if( !SYSM_CheckRTCDate( &date ) ||
!SYSM_CheckRTCTime( &time )
if( !UTL_CheckRTCDate( &date ) ||
!UTL_CheckRTCTime( &time )
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
||
SYSMi_GetWork()->flags.common.isResetRTC

View File

@ -153,9 +153,6 @@ TitleProperty *SYSM_ReadParameters( void )
{
TitleProperty *pBootTitle = NULL;
//NAMの初期化
NAM_Init( SYSM_Alloc, SYSM_Free );
//-----------------------------------------------------
// HW情報のリード
//-----------------------------------------------------
@ -218,8 +215,6 @@ TitleProperty *SYSM_ReadParameters( void )
}
#endif // SDK_SUPPORT_PMIC_2
// TPキャリブレーション
SYSM_CaribrateTP();
// RTC補正
SYSMi_WriteAdjustRTC();
// RTC値のチェック

View File

@ -320,21 +320,30 @@ BOOL SYSMi_CopyCardRomHeader( void )
return retval;
}
// カードバナーのARM7バッファからARM9バッファへのコピー
BOOL SYSMi_CopyCardBanner( void )
{
BOOL retval = FALSE;
if( SYSM_IsExistCard() ) {
// バナーデータのリード
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] );
retval = TRUE;
// バナーデータのコピー
TWLBannerFile *pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
if( SYSMi_GetWork()->flags.hotsw.isValidCardBanner ) {
DC_InvalidateRange( (void *)SYSM_CARD_BANNER_BUF, 0x3000 );
MI_CpuCopyFast( (void *)SYSM_CARD_BANNER_BUF, pBanner, sizeof(TWLBannerFile) );
}
retval = BANNER_CheckBanner( pBanner );
if( !retval ) {
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
}
}
return retval;
}
// インポートされているすべてのNANDアプリを列挙したリストの準備
// SYSM_GetNandTitleListおよびSYSM_TryToBootTitle前に呼ぶ必要あり
BOOL SYSM_InitNandTitleList( void )
@ -388,7 +397,7 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
// "Not Launch"でない かつ "Data Only"でない なら有効なタイトルとしてリストに追加
if( ( s_pTitleIDList[ l ] & ( TITLE_ID_NOT_LAUNCH_FLAG_MASK | TITLE_ID_DATA_ONLY_FLAG_MASK ) ) == 0 ) {
titleIDArray[ validNum ] = s_pTitleIDList[ l ];
SYSMi_ReadBanner_NAND( s_pTitleIDList[ l ], &s_bannerBuf[ validNum ] );
BANNER_ReadBannerFromNAND( s_pTitleIDList[ l ], &s_bannerBuf[ validNum ] );
validNum++;
if( !( validNum < LAUNCHER_TITLE_LIST_NUM - 1 ) )// 最大(LAUNCHER_TITLE_LIST_NUM - 1)まで
{
@ -1543,7 +1552,8 @@ static void SYSMi_makeTitleIdList( void )
}
}else
{
if(s_pTitleIDList[l] == NULL)
// 無効なTitleID または、DataOnlyアプリはスキップ
if( (s_pTitleIDList[l] == NULL) || !( s_pTitleIDList[l] & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
{
continue;
}
@ -1613,8 +1623,8 @@ static void SYSMi_makeTitleIdList( void )
}
}
// ジャンプ可能ならば(一応Data Onlyフラグも見ておくが、ジャンプAPIでも見る事)
if( pe_hs->permit_landing_normal_jump && !( hs->titleID & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
// ジャンプ可能ならば
if( pe_hs->permit_landing_normal_jump )
{
// リストに追加してジャンプ可能フラグON
list->TitleID[count] = pe_hs->titleID;

View File

@ -68,22 +68,6 @@ void SYSMi_WriteAdjustRTC( void );
void SYSMi_CheckRTC( void );
//-------------------------------------------------------
// バナー
//-------------------------------------------------------
// カードバナーリード※NTR-IPL2仕様
BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner );
// NANDアプリバナーリード
BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst );
//-------------------------------------------------------
// 活線挿抜
//-------------------------------------------------------
void SYSMi_EnableHotSW( BOOL enable );
#endif // SDK_ARM9

View File

@ -0,0 +1,255 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: SYSM_lib.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#include <twl.h>
#include <sysmenu.h>
#include <sysmenu/mcu.h>
#include <spi.h>
#include "internal_api.h"
// define data-----------------------------------------------------------------
// extern data-----------------------------------------------------------------
// function's prototype-------------------------------------------------------
#ifdef SDK_FINALROM
u32 PM_SendUtilityCommandAsync(u32 number, u16 parameter, u16* retValue, PMCallback callback, void *arg);
u32 PM_SendUtilityCommand(u32 number, u16 parameter, u16* retValue);
u32 PMi_WriteRegister(u16 registerAddr, u16 data);
u32 PMi_WriteRegisterAsync(u16 registerAddr, u16 data, PMCallback callback, void *arg);
#endif // SDK_FINALROM
// global variable-------------------------------------------------------------
// static variable-------------------------------------------------------------
static u8 s_brightness;
// const data------------------------------------------------------------------
// ============================================================================
//
// デバイス制御
//
// ============================================================================
// 輝度取得で呼ぶSYSM_ReadMcuRegisterAsyncのコールバック
static OSThreadQueue s_callback_queue;
static SYSMMcuResult s_callback_result;
static void MCUCallBack( SYSMMcuResult result, void *arg )
{
#pragma unused(arg)
s_callback_result = result;
OS_WakeupThread( &s_callback_queue );
}
// バックライト輝度取得
u8 SYSM_GetBackLightBlightness( void )
{
u8 brightness;
#ifdef SDK_SUPPORT_PMIC_2
if ( SYSMi_GetMcuVersion() <= 1 )
{
// X2以前
brightness = s_brightness;
}
else
#endif // SDK_SUPPORT_PMIC_2
{
// X3以降
while( 1 )
{
// BUSYだと失敗するので成功するまでトライ
if ( MCU_RESULT_SUCCESS == SYSM_ReadMcuRegisterAsync( MCU_REG_BL_ADDR, &brightness, MCUCallBack, NULL ) )
{
OS_SleepThread( &s_callback_queue ); // 値が返ってくるまでスリープ
break;
}
}
}
return brightness;
}
// バックライト輝度調整
void SYSM_SetBackLightBrightness( u8 brightness )
{
if( brightness > LCFG_TWL_BACKLIGHT_LEVEL_MAX ) {
OS_TPrintf( "Backlight brightness over! Change brightenss forcibly : %d -> %d\n", brightness, LCFG_TWL_BACKLIGHT_LEVEL_MAX );
brightness = LCFG_TWL_BACKLIGHT_LEVEL_MAX;
}
#ifdef SDK_SUPPORT_PMIC_2
if ( SYSMi_GetMcuVersion() <= 1 )
{
s_brightness = brightness;
( void )PMi_WriteRegister( REG_PMIC_BL_BRT_B_ADDR, (u8)(s_brightness * 2) );
}
else
#endif // SDK_SUPPORT_PMIC_2
{
// X3以降はマイコンに保存するだけ
while( 1 )
{
// BUSYだと失敗するので成功するまでトライ
if ( MCU_RESULT_SUCCESS == SYSM_WriteMcuRegisterAsync( MCU_REG_BL_ADDR, brightness, NULL, NULL ) )
{
break;
}
}
}
}
// ワイヤレスLEDの制御
void SYSMi_SetWirelessLED( BOOL enable )
{
u8 value;
// X3以降
while( 1 )
{
// BUSYだと失敗するので成功するまでトライ
if ( MCU_RESULT_SUCCESS == SYSM_ReadMcuRegisterAsync( MCU_REG_WIFI_ADDR, &value, MCUCallBack, NULL ) )
{
OS_SleepThread( &s_callback_queue ); // 値が返ってくるまでスリープ
break;
}
}
value = (u8)( ( value & ~MCU_REG_WIFI_LED_MASK ) | ( enable ? MCU_REG_WIFI_LED_MASK : 0 ) );
while( 1 )
{
// BUSYだと失敗するので成功するまでトライ
if ( MCU_RESULT_SUCCESS == SYSM_WriteMcuRegisterAsync( MCU_REG_WIFI_ADDR, value, NULL, NULL ) )
{
break;
}
}
}
// タッチパネルキャリブレーション
void SYSM_CaribrateTP( void )
{
LCFGTWLTPCalibData store;
TPCalibrateParam calibParam;
// 本体設定データからキャリブレーション情報を取得
LCFG_TSD_GetTPCalibration( &store );
// TPキャリブレーション
( void )TP_CalcCalibrateParam( &calibParam, // タッチパネル初期化
store.data.raw_x1, store.data.raw_y1, (u16)store.data.dx1, (u16)store.data.dy1,
store.data.raw_x2, store.data.raw_y2, (u16)store.data.dx2, (u16)store.data.dy2 );
TP_SetCalibrateParam( &calibParam );
OS_TPrintf("TP_calib: %4d %4d %4d %4d %4d %4d\n",
store.data.raw_x1, store.data.raw_y1, (u16)store.data.dx1, (u16)store.data.dy1,
store.data.raw_x2, store.data.raw_y2, (u16)store.data.dx2, (u16)store.data.dy2 );
}
// RTCクロック補正値をセット
void SYSMi_WriteAdjustRTC( void )
{
RTCRawAdjust raw;
raw.adjust = LCFG_THW_GetRTCAdjust();
( void )RTCi_SetRegAdjust( &raw );
}
// 起動時のRTCチェック
void SYSMi_CheckRTC( void )
{
RTCDate date;
RTCTime time;
// RTCのリセット or おかしい値を検出した場合は初回起動シーケンスへ。
( void )RTC_GetDateTime( &date, &time );
if( !UTL_CheckRTCDate( &date ) ||
!UTL_CheckRTCTime( &time )
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
||
SYSMi_GetWork()->flags.common.isResetRTC
#endif
) { // RTCの異常を検出したら、rtc入力フラグrtcOffsetを0にしてNVRAMに書き込み。
OS_TPrintf("\"RTC reset\" or \"Illegal RTC data\" detect!\n");
LCFG_TSD_SetRTCOffset( 0 );
LCFG_TSD_SetRTCLastSetYear( 0 );
{
u8 *pBuffer = SYSM_Alloc( LCFG_WRITE_TEMP );
if( pBuffer != NULL ) {
LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
SYSM_Free( pBuffer );
}
}
}
}
// スリープモードへの遷移
void SYSM_GoSleepMode( void )
{
// 蓋閉じ判定
if ( ! PAD_DetectFold() )
{
return;
}
// デバッガ起動時にはスリープに入らない
if ( ! SYSM_IsRunOnDebugger() || (OSi_DetectDebugger() & OS_CONSOLE_TWLDEBUGGER) )
{
// カード抜け無検出設定
// TWLではゲームカードの再ロードが可能なため
// スリープ時のカード抜け検出を無効化
// DS-IPLではゲームカードが起動できなくなるので
// レジューム時のROM-IDチェックでエラーになると
// シャットダウンしていた)
OSIntrMode enable = OS_DisableInterrupts();
reg_MI_MCCNT0 &= ~REG_MI_MCCNT0_I_MASK;
OS_ResetRequestIrqMask( OS_IE_CARD_IREQ );
OS_RestoreInterrupts( enable );
// スリープ遷移
PM_GoSleepMode( PM_TRIGGER_COVER_OPEN |
PM_TRIGGER_RTC_ALARM,
0,
0 );
}
}
#ifdef SDK_FINALROM
/*---------------------------------------------------------------------------*
Name: PMi_WriteRegisterAsync
Description: send write register command to ARM7
Arguments: registerAddr : PMIC register number (0-3)
data : data written to PMIC register
callback : callback function
arg : callback argument
Returns: result of issueing command
PM_RESULT_BUSY : busy
PM_RESULT_SUCCESS : success
*---------------------------------------------------------------------------*/
u32 PMi_WriteRegisterAsync(u16 registerAddr, u16 data, PMCallback callback, void *arg)
{
return PM_SendUtilityCommandAsync(PMi_UTIL_WRITEREG, (u16)((registerAddr<<16) | (data&0xff)), NULL, callback, arg);
}
u32 PMi_WriteRegister(u16 registerAddr, u16 data)
{
return PM_SendUtilityCommand(PMi_UTIL_WRITEREG, (u16)((registerAddr<<16) | (data&0xff)), NULL);
}
#endif // SDK_FINALROM

View File

@ -1,6 +1,6 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: SYSM_util.c
File: util.c
Copyright 2007 Nintendo. All rights reserved.
@ -19,26 +19,41 @@
#include <sysmenu.h>
// define data------------------------------------------
// extern data------------------------------------------
// function's prototype declaration---------------------
static s64 SYSMi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep );
static s64 UTLi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep );
// global variable -------------------------------------
// static variable -------------------------------------
// const data -----------------------------------------
// function's description-------------------------------
//======================================================================
// タッチパネル
//======================================================================
// タッチパネルキャリブレーション
void UTL_CaribrateTP( const LCFGTWLTPCalibData *pCalib )
{
TPCalibrateParam calibParam;
// TPキャリブレーション
( void )TP_CalcCalibrateParam( &calibParam, // タッチパネル初期化
pCalib->data.raw_x1, pCalib->data.raw_y1, (u16)pCalib->data.dx1, (u16)pCalib->data.dy1,
pCalib->data.raw_x2, pCalib->data.raw_y2, (u16)pCalib->data.dx2, (u16)pCalib->data.dy2 );
TP_SetCalibrateParam( &calibParam );
OS_TPrintf("TP_calib: %4d %4d %4d %4d %4d %4d\n",
pCalib->data.raw_x1, pCalib->data.raw_y1, (u16)pCalib->data.dx1, (u16)pCalib->data.dy1,
pCalib->data.raw_x2, pCalib->data.raw_y2, (u16)pCalib->data.dx2, (u16)pCalib->data.dy2 );
}
//======================================================================
// RTCオフセット制御
//======================================================================
// RTCに新しい設定値をセットして、その値をもとにrtcOffset値を算出する。
s64 SYSM_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep )
s64 UTL_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep )
{
RTCDate oldDate;
RTCTime oldTime;
@ -56,8 +71,8 @@ s64 SYSM_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep )
}
LCFG_TSD_SetRTCLastSetYear( (u8)newDatep->year );
offset0 = SYSMi_CalcRTCSecOffset( &oldDate, &oldTime ); // 設定直前のRTC値のオフセットを算出
offset1 = SYSMi_CalcRTCSecOffset( newDatep, newTimep ); // 新しくセットされたRTC値のオフセットを算出
offset0 = UTLi_CalcRTCSecOffset( &oldDate, &oldTime ); // 設定直前のRTC値のオフセットを算出
offset1 = UTLi_CalcRTCSecOffset( newDatep, newTimep ); // 新しくセットされたRTC値のオフセットを算出
offset = LCFG_TSD_GetRTCOffset() + offset1 - offset0; // 新RTC_ofs と 現在のRTC_ofs の差分の値を加算してリターン。
OS_Printf ("Now Date = year:%3d month:%3d date:%3d hour:%3d minute:%3d second:%3d\n",
@ -76,7 +91,7 @@ s64 SYSM_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep )
// RTCオフセット値の算出
#define SECOND_OFFSET
static s64 SYSMi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep )
static s64 UTLi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep )
{
u32 i;
int uruu = 0;
@ -93,7 +108,7 @@ static s64 SYSMi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep )
// 月、日を 日数に換算してから、 秒 or 分オフセットに
dayNum = (int)datep->day - 1;
for( i = 1; i < datep->month; i++ ) {
dayNum += SYSM_GetDayNum( datep->year, i );
dayNum += UTL_GetDayNum( datep->year, i );
}
// 年を 日数に換算
@ -114,11 +129,11 @@ static s64 SYSMi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep )
// 指定された年・月の日数を返す。
u32 SYSM_GetDayNum( u32 year, u32 month )
u32 UTL_GetDayNum( u32 year, u32 month )
{
u32 dayNum = 31;
if( month == 2 ) {
if( SYSM_IsLeapYear100( year ) ) {
if( UTL_IsLeapYear100( year ) ) {
dayNum -= 2;
}else {
dayNum -= 3;
@ -131,7 +146,7 @@ u32 SYSM_GetDayNum( u32 year, u32 month )
// 簡易うるう年の判定 (うるう年1、通常の年0※RTCのとりうる範20002100年に限定する。
BOOL SYSM_IsLeapYear100( u32 year )
BOOL UTL_IsLeapYear100( u32 year )
{
if( ( year & 0x03 ) || ( year == 100 ) ) { // うるう年は、「4で割り切れ かつ 100で割り切れない年」または「400で割り切れる年」
return FALSE;
@ -142,7 +157,7 @@ BOOL SYSM_IsLeapYear100( u32 year )
// RTCの日付が正しいかチェック
BOOL SYSM_CheckRTCDate( RTCDate *datep )
BOOL UTL_CheckRTCDate( RTCDate *datep )
{
if( ( datep->year >= 100 )
|| ( datep->month < 1 ) || ( datep->month > 12 )
@ -155,7 +170,7 @@ BOOL SYSM_CheckRTCDate( RTCDate *datep )
// RTCの時刻が正しいかチェック
BOOL SYSM_CheckRTCTime( RTCTime *timep )
BOOL UTL_CheckRTCTime( RTCTime *timep )
{
if( ( timep->hour > 23 )
|| ( timep->minute > 59 )

View File

@ -41,9 +41,6 @@ export DISABLE_WLFIRM_LOAD = FALSE
export IGNORE_WLFIRM_SIGNCHECK = FALSE
export DISABLE_SLEEP = TRUE
# COMPILE SWITCH ※最終ROM作成時は、全てTRUEにセットする
export LOAD_APP_VIA_WRAM = FALSE
endif
# MAKEROM SWITCH ※最終ROM作成時は、全てTRUEにセットする
@ -87,16 +84,30 @@ LINCLUDES = $(MISC_DIR)/include \
$(ROOT)/build/libraries/wm/ARM9.TWL/nwm/inc \
$(ROOT)/build/libraries/reboot/common/include
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
SYSMENU_LIBS = \
liblcfg$(TWL_LIBSUFFIX).a \
libsysmenu$(TWL_LIBSUFFIX).a \
libsysmmcu$(TWL_LIBSUFFIX).a \
libsysmutil$(TWL_LIBSUFFIX).a \
libbanner$(TWL_LIBSUFFIX).a \
libboot$(TWL_LIBSUFFIX).a \
libds$(TWL_LIBSUFFIX).a \
libhotsw$(TWL_LIBSUFFIX).a \
libdht$(TWL_LIBSUFFIX).a \
libreloc_info$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a \
libsharedfont_launcher$(TWL_LIBSUFFIX).a \
WDS$(TWL_LIBSUFFIX).a
SDK_APPEND_LIBS = \
libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
REBOOT_LIB = libreboot$(TWL_LIBSUFFIX).a
LDEPENDS_NEF += $(REBOOT_LIB)

View File

@ -113,7 +113,10 @@ void TwlMain( void )
#ifdef USE_WRAM_LOAD
HOTSW_Init();
#endif
//NAMの初期化
NAM_Init( Alloc, Free );
OS_TPrintf( "SYSM_work size = 0x%x\n", sizeof(SYSM_work) );
// 割り込み許可--------------------
@ -128,7 +131,10 @@ void TwlMain( void )
// 各種パラメータの取得------------
pBootTitle = SYSM_ReadParameters(); // 本体設定データ、リセットパラメータのリード、検査用オート起動カード判定、量産ライン用キーショートカット起動判定等のリード
// TPキャリブレーション
UTL_CaribrateTP( LCFG_TSD_GetTPCalibrationPtr() );
if( SYSM_IsFatalError() ) {
// FATALエラー処理
}

View File

@ -16,9 +16,9 @@
# $Author$
#----------------------------------------------------------------------------
SUBDIRS = \
# ../../../libraries_sysmenu/sysmenu \
# ../../../libraries_sysmenu/settings
SUBDIRS =
SUBMAKES = \
$(ROOT)/build/libraries/os/ARM9.TWL/Makefile.sharedFont
#----------------------------------------------------------------------------
@ -66,12 +66,24 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
MAKETAD_OPTION += -s
LLIBRARIES = libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
# libsysmenu.a は、RED本体設定でSVNのリビジョンを取得するためだけに使用しているので、
# UIG本体設定でリンクする必要はありません。
SYSMENU_LIBS = \
libbanner$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a \
libsysmutil$(TWL_LIBSUFFIX).a \
libsysmenu$(TWL_LIBSUFFIX).a
SDK_APPEND_LIBS = \
liblcfg$(TWL_LIBSUFFIX).a \
libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libsharedfont$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs

View File

@ -349,10 +349,10 @@ void CheckOKCancelButton(BOOL *tp_ok, BOOL *tp_cancel)
BOOL MY_WriteTWLSettings( void )
{
BOOL retval = FALSE;
u8 *pBuffer = SYSM_Alloc( LCFG_WRITE_TEMP );
u8 *pBuffer = Alloc( LCFG_WRITE_TEMP );
if( pBuffer != NULL ) {
retval = LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
SYSM_Free( pBuffer );
Free( pBuffer );
}
return retval;
}

View File

@ -17,7 +17,9 @@
#include <twl.h>
#include <twl/sea.h>
#include <twl/lcfg.h>
#include <sysmenu/namut.h>
#include <sysmenu/util.h>
#include "misc.h"
#include "MachineSetting.h"
@ -84,24 +86,20 @@ void TwlMain(void)
OS_TPrintf( "LCFGTWLSettingsData : 0x%04x\n", sizeof(LCFGTWLSettingsData) );
}
// TWL設定のリード
SYSM_SetAllocFunc( Alloc, Free ); // SYSM_ReadTWLSettingsFile()の実行に必要。
// ::::::::::::::::::::::::::::::::::::::::::::::
// TWL設定データファイルの読み込み
// ::::::::::::::::::::::::::::::::::::::::::::::
(void)LCFG_ReadHWSecureInfo();
{
u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP );
u8 *pBuffer = Alloc( LCFG_READ_TEMP );
g_isValidTSD = FALSE;
if( pBuffer) {
g_isValidTSD = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )pBuffer );
SYSM_Free( pBuffer );
Free( pBuffer );
}
}
if( g_isValidTSD ) {
SYSM_CaribrateTP();
}
UTL_CaribrateTP( LCFG_TSD_GetTPCalibrationPtr() );
InitBG();
GetAndDrawRTCData( &g_rtcDraw, TRUE );

View File

@ -153,8 +153,10 @@ int SelectRegionMain( void )
// ::::::::::::::::::::::::::::::::::::::::::::::
TSD_SetLanguage( default_lang_list[s_regionCode] ); // デフォルト言語に強制設定
TSD_SetCountry( default_country_list[s_regionCode] ); // デフォルト国に強制設定
(void)SYSM_WriteTWLSettingsFile();
if( !MY_WriteTWLSettings() ) {
OS_TPrintf( "TWL settings write failed.\n" );
}
MachineSettingInit();
return 0;
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {

View File

@ -676,7 +676,7 @@ static void CheckDate( void )
u8 maxday;
if( s_temp_birthday.month == 0 ) s_temp_birthday.month = 12;
if( s_temp_birthday.month == 13 ) s_temp_birthday.month = 1;
maxday = (u8)SYSM_GetDayNum( 2000, s_temp_birthday.month );
maxday = (u8)UTL_GetDayNum( 2000, s_temp_birthday.month );
if( s_temp_birthday.day == 0 ) s_temp_birthday.day = maxday;
if( s_temp_birthday.day > maxday ) s_temp_birthday.day = 1;
}

View File

@ -307,7 +307,7 @@ static int InputRtcDateTimeMain( void )
case SEQ_DAY_INIT:
s_pWork->inp.pos_x = DAY_TOP_X;
s_pWork->inp.keta_max = 2;
s_pWork->inp.value_max = (int)SYSM_GetDayNum( s_pWork->dtp.Date.year, s_pWork->dtp.Date.month );
s_pWork->inp.value_max = (int)UTL_GetDayNum( s_pWork->dtp.Date.year, s_pWork->dtp.Date.month );
// 年・月をもとにその月の日数を算出する。
s_pWork->inp.value_min = 1;
if(s_pWork->dtp.Date.day > s_pWork->inp.value_max) {
@ -349,7 +349,7 @@ static int InputRtcDateTimeMain( void )
// 年・月入力ならば、日数を算出して、現在の入力日が日数を超えていたら修正する。
if( ( s_pWork->dtp.seq == SEQ_YEAR_SET ) ||
( s_pWork->dtp.seq == SEQ_MONTH_SET ) ) {
u32 dayNum = SYSM_GetDayNum( s_pWork->dtp.Date.year, s_pWork->dtp.Date.month );
u32 dayNum = UTL_GetDayNum( s_pWork->dtp.Date.year, s_pWork->dtp.Date.month );
if( dayNum < s_pWork->dtp.Date.day ) {
PrintfSJIS( DAY_TOP_X, DATE_TOP_Y, TXT_COLOR_WHITE, "%02d", s_pWork->dtp.Date.day );
PrintfSJIS( DAY_TOP_X, DATE_TOP_Y, TXT_COLOR_BLACK, "%02d", dayNum );
@ -365,7 +365,7 @@ static int InputRtcDateTimeMain( void )
MI_CpuCopy32( &s_pWork->dtp.Date, &date, sizeof(RTCDate) );
date.year -= 2000;
(void)RTC_SetDateTime( &date, &s_pWork->dtp.Time );
LCFG_TSD_SetRTCOffset( SYSM_CalcRTCOffset( &date, &s_pWork->dtp.Time ) );
LCFG_TSD_SetRTCOffset( UTL_CalcRTCOffset( &date, &s_pWork->dtp.Time ) );
}
// ::::::::::::::::::::::::::::::::::::::::::::::

View File

@ -43,8 +43,15 @@ SRCS = main.c HWInfoWriter.c hwi.c \
LINCLUDES = $(MISC_DIR)/include \
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include
LLIBRARIES = libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a
SYSMENU_LIBS = \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
SDK_APPEND_LIBS = \
liblcfg$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
#----------------------------------------------------------------------------

View File

@ -75,14 +75,19 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
-DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
MAKETAD_FLAGS += -s
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SYSMENU_LIBS = \
libacsign$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SDK_APPEND_LIBS = \
libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
liblcfg$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe

View File

@ -124,14 +124,20 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
MAKETAD_FLAGS += -s
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SYSMENU_LIBS = \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SDK_APPEND_LIBS = \
libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
liblcfg$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe

View File

@ -107,14 +107,20 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
MAKETAD_FLAGS += -s
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SYSMENU_LIBS = \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SDK_APPEND_LIBS = \
libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
liblcfg$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe

View File

@ -102,14 +102,20 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
MAKETAD_FLAGS += -s
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SYSMENU_LIBS = \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SDK_APPEND_LIBS = \
libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
liblcfg$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe

View File

@ -89,15 +89,21 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
-DDISABLE_DEBUG='$(DISABLE_DEBUG)'
MAKETAD_FLAGS += -s
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a
SYSMENU_LIBS = \
libacsign$(TWL_LIBSUFFIX).a \
libacsign_enc$(TWL_LIBSUFFIX).a \
libnamut$(TWL_LIBSUFFIX).a \
libsysmenu$(TWL_LIBSUFFIX).a
SDK_APPEND_LIBS = \
libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \
libsfs$(TWL_LIBSUFFIX).a \
libnam$(TWL_LIBSUFFIX).a \
libsea$(TWL_LIBSUFFIX).a \
liblcfg$(TWL_LIBSUFFIX).a
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe

View File

@ -47,7 +47,6 @@ export DISABLE_WDS_SCAN = TRUE
export IGNORE_WLFIRM_SIGNCHECK = FALSE
export DISABLE_WLFIRM_LOAD = FALSE
export DISABLE_SLEEP = FASLE
export LOAD_APP_VIA_WRAM = FALSE
export SYSM_OUTSIDE_UI = TRUE
export SYSM_BROADON_UI = FALSE

View File

@ -32,8 +32,9 @@
#include <sysmenu/boot.h>
#include <sysmenu/memorymap.h>
#include <sysmenu/hotsw.h>
#include <sysmenu/mb_loader.h>
#include <sysmenu/sharedFont.h>
#include <sysmenu/banner.h>
#include <sysmenu/util.h>
/* SYSMENU_H_ */
#endif

View File

@ -15,20 +15,40 @@
$Author$
*---------------------------------------------------------------------------*/
#ifndef BANNER_H_
#define BANNER_H_
#ifndef SYSM_BANNER_H_
#define SYSM_BANNER_H_
#include <twl/types.h>
#include <sysmenu/banner/common/NTRBanner.h>
#include <sysmenu/banner/common/TWLBanner.h>
#include <twl/os/common/banner.h>
#ifdef __cplusplus
extern "C" {
#endif
// define data----------------------------------------------------------
// global variable------------------------------------------------------
// function-------------------------------------------------------------
#ifdef SDK_ARM9
// カードからのバナーリード
BOOL BANNER_ReadBannerFromCARD( u32 bannerOffset, TWLBannerFile *pDst );
// NANDからのバナーリード
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst );
// バナーのフォーマットが正しいかチェックNTRバナー、TWLバナーのどちらでもOK
BOOL BANNER_CheckBanner( TWLBannerFile *pBanner );
// サブバナーチェック
BOOL BANNER_CheckSubBanner( TWLSubBannerFile *pBanner );
#endif //SDK_ARM9
#ifdef __cplusplus
} /* extern "C" */
#endif
/* BANNER_H_ */
/* SYSM_BANNER_H_ */
#endif

View File

@ -1,104 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: NTRBanner.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef NTR_BANNER_H_
#define NTR_BANNER_H_
#include <twl/types.h>
#ifdef __cplusplus
extern "C" {
#endif
#ifndef BANNER_ROM_OFFSET
#define BANNER_ROM_OFFSET ( HW_TWL_ROM_HEADER_BUF + 0x68 )
#endif
#define NTR_BNR_VER_MIN 0x01
#define NTR_BNR_VER_MAX 0x03
#define BNR_CHINESE_SUPPORT_VER 2
#define BNR_HANGUL_SUPPORT_VER 3
#define BNR_LANG_MAX 16
#define BNR_LANG_NUM_V1 6
#define BNR_LANG_NUM_V2 1
#define BNR_LANG_NUM_V3 1
#define BNR_HEADER_SIZE 32
#define BNR_HEADER_RSV_SIZE 24
#define BNR_IMAGE_SIZE ( 32 * 32 / (8/4) )
#define BNR_PLTT_NUM 16
#define BNR_PLTT_SIZE ( BNR_PLTT_NUM * 2 )
#define BNR_LANG_LENGTH 128
#define BNR_LANG_SIZE ( BNR_LANG_LENGTH * 2 )
typedef enum NTRBannerLangCode {
NTR_BNR_JAPANESE = 0,
NTR_BNR_ENGLISH = 1,
NTR_BNR_FRENCH = 2,
NTR_BNR_GERMAN = 3,
NTR_BNR_ITALIAN = 4,
NTR_BNR_SPANISH = 5,
NTR_BNR_CHINESE = 6,
NTR_BNR_HANGUL = 7,
NTR_BNR_LANG_NUM
}NTRBannerLangCode;
typedef struct NTRBannerHeader {
u8 version;
u8 reserved_A;
u16 crc16_v1;
u16 crc16_v2;
u16 crc16_v3;
u8 reserved_B[ BNR_HEADER_RSV_SIZE ];
}NTRBannerHeader;
typedef struct BannerFileV1 {
u8 image[ BNR_IMAGE_SIZE ];
GXRgba pltt [ BNR_PLTT_NUM ];
u16 comment[ BNR_LANG_NUM_V1 ][ BNR_LANG_LENGTH ];
}BannerFileV1;
typedef struct BannerFileV2{
u16 comment[ BNR_LANG_NUM_V2 ][ BNR_LANG_LENGTH ];
}BannerFileV2;
typedef struct BannerFileV3{
u16 comment[ BNR_LANG_NUM_V3 ][ BNR_LANG_LENGTH ];
}BannerFileV3;
typedef struct NTRBannerFile {
NTRBannerHeader h;
BannerFileV1 v1;
BannerFileV2 v2;
BannerFileV3 v3;
}NTRBannerFile;
#ifdef __cplusplus
} /* extern "C" */
#endif
/* NTR_BANNER_H_ */
#endif

View File

@ -1,82 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: TWLBanner.c
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef TWL_BANNER_H_
#define TWL_BANNER_H_
#include <twl/types.h>
#include <sysmenu/banner/common/NTRBanner.h>
#ifdef __cplusplus
extern "C" {
#endif
#define TWL_BNR_VER_MIN 0x80
#define TWL_BNR_VER_MAX 0x80
#define TWL_BNR_ICON_NUM 8
#define TWL_BNR_ICON_DISP_FRAME_MAX 60
#define TWL_BNR_HEADER_RSV_SIZE ( BNR_HEADER_RSV_SIZE - sizeof(BannerAnimeCtrl) )
typedef enum BannerAnimeLoopType {
BNR_ANIME_LOOP_NORMAL = 1,
BNR_ANIME_LOOP_BACK = 2
}BannerAnimeLoopType;
typedef struct BannerAnimeCtrl {
BannerAnimeLoopType loopType;
u8 dispFrameCount[ TWL_BNR_ICON_NUM ];
}BannerAnimeCtrl;
typedef struct TWLBannerHeader {
u8 version;
u8 reserved_A;
u16 crc16_v1;
u16 crc16_v2;
u16 crc16_v3;
u8 reserved_B[ TWL_BNR_HEADER_RSV_SIZE ];
BannerAnimeCtrl anime;
}TWLBannerHeader;
typedef struct BannerIcon {
u8 image[ BNR_IMAGE_SIZE ];
GXRgba pltt [ BNR_PLTT_NUM ];
}BannerIcon;
typedef struct BannerCommentRsv {
u16 comment[ BNR_LANG_MAX - NTR_BNR_LANG_NUM ][ BNR_LANG_LENGTH ];
}BannerCommentRsv;
typedef struct TWLBannerFile {
TWLBannerHeader h;
BannerFileV1 v1;
BannerFileV2 v2;
BannerFileV3 v3;
BannerCommentRsv rsv;
BannerIcon icon[ TWL_BNR_ICON_NUM - 1 ]; // 先頭の個はBannerFileV1内にある。
}TWLBannerFile;
#ifdef __cplusplus
} /* extern "C" */
#endif
/* TWL_BANNER_H_ */
#endif

View File

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

View File

@ -1,86 +0,0 @@
/*---------------------------------------------------------------------------*
Project: TwlIPL
File: mb_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:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#if !defined(_LOADER_H_)
#define _LOADER_H_
#include <twl.h>
#include <nitro/mb.h> // twl/mb.hがない。
#ifdef __cplusplus
extern "C" {
#endif
#define PXI_FIFO_TAG_MB PXI_FIFO_TAG_USER_0
/*
FIFO_TAGとかちあわないTAG番号に指定してください
*/
/*---------------------------------------------------------------------------*
Type definition
*---------------------------------------------------------------------------*/
typedef void (*MB_LoaderCallback)(void);
/*---------------------------------------------------------------------------*
functions
*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*
Name: LOADER_Init
Description:
Arguments: callback -
Returns: None.
*---------------------------------------------------------------------------*/
void LOADER_Init(MB_LoaderCallback callback);
/*---------------------------------------------------------------------------*
Name: LOADER_Start
Description:
Arguments: None.
Returns: None.
*---------------------------------------------------------------------------*/
void LOADER_Start( void );
/*---------------------------------------------------------------------------*
Name: MIm_CpuCopy32
Description: CpuCopy32関数
Arguments:
Returns: TRUE - success FALSE - failed
*---------------------------------------------------------------------------*/
void MIm_CpuCopy32( register const void *srcp, register void *destp, register u32 size );
#ifdef __cplusplus
}
#endif
#endif /* _LOADER_H_ */