mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
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:
parent
47853b4402
commit
8634f14535
@ -68,32 +68,6 @@ endif
|
|||||||
|
|
||||||
SYSMENU_LIBDIR := $(SYSMENU_ROOT)/lib/$(TWL_LIBTYPE)
|
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
|
# MY BUILD TOOLS
|
||||||
#
|
#
|
||||||
@ -115,7 +89,6 @@ ifneq ($(ES_ROOT),)
|
|||||||
GINCLUDES += $(ES_ROOT)/twl/include
|
GINCLUDES += $(ES_ROOT)/twl/include
|
||||||
endif
|
endif
|
||||||
GLIBRARY_DIRS := $(SYSMENU_LIBDIR) $(GLIBRARY_DIRS)
|
GLIBRARY_DIRS := $(SYSMENU_LIBDIR) $(GLIBRARY_DIRS)
|
||||||
GLIBRARIES := $(SYSMENU_LIBS) $(GLIBRARIES)
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
# TWLSYSMENU_INSTALL_ROOT
|
# TWLSYSMENU_INSTALL_ROOT
|
||||||
|
|||||||
@ -93,13 +93,25 @@ LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \
|
|||||||
$(ROOT)/build/libraries/reboot/common/include \
|
$(ROOT)/build/libraries/reboot/common/include \
|
||||||
$(SYSMENU_ROOT)/build/libraries_sysmenu/sysmenu/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 \
|
libaes_sp.firm.LTD.a \
|
||||||
libsea_sp.TWL.LTD.a \
|
libsea_sp.TWL.LTD.a \
|
||||||
libreboot_sp$(TWL_LIBSUFFIX).a
|
libreboot_sp$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
|
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
|
||||||
|
|
||||||
|
LLIBRARY_DIRS += ./
|
||||||
|
|
||||||
LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES)
|
LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -22,18 +22,19 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
|||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
SUBDIRS_P = reloc_info \
|
SUBDIRS = reloc_info \
|
||||||
sysmenu \
|
sysmenu \
|
||||||
mb_loader \
|
|
||||||
acsign \
|
acsign \
|
||||||
boot \
|
boot \
|
||||||
hotsw \
|
hotsw \
|
||||||
namut \
|
namut \
|
||||||
mcu \
|
mcu \
|
||||||
ds \
|
ds \
|
||||||
|
sharedFont \
|
||||||
|
banner \
|
||||||
|
util \
|
||||||
dht \
|
dht \
|
||||||
wds \
|
wds \
|
||||||
sharedFont
|
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -26,14 +26,13 @@ TWL_PROC = ARM9
|
|||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
SRCDIR = ../common/src
|
SRCDIR = ./src
|
||||||
|
|
||||||
INCDIR = ../common/include \
|
INCDIR =
|
||||||
$(ROOT)/build/libraries/mb/common/include
|
|
||||||
|
|
||||||
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
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
@ -16,8 +16,8 @@
|
|||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <sysmenu.h>
|
#include <twl/nam.h>
|
||||||
#include "internal_api.h"
|
#include <sysmenu/banner.h>
|
||||||
|
|
||||||
// define data-----------------------------------------------------------------
|
// define data-----------------------------------------------------------------
|
||||||
typedef struct BannerCheckParam {
|
typedef struct BannerCheckParam {
|
||||||
@ -27,8 +27,6 @@ typedef struct BannerCheckParam {
|
|||||||
|
|
||||||
// extern data-----------------------------------------------------------------
|
// extern data-----------------------------------------------------------------
|
||||||
// function's prototype-------------------------------------------------------
|
// function's prototype-------------------------------------------------------
|
||||||
static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner );
|
|
||||||
static BOOL SYSMi_CheckSubBannerFile( TWLSubBannerFile *pBanner );
|
|
||||||
|
|
||||||
// global variable-------------------------------------------------------------
|
// global variable-------------------------------------------------------------
|
||||||
// static 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;
|
BOOL isRead;
|
||||||
u16 id = (u16)OS_GetLockID();
|
u16 id = (u16)OS_GetLockID();
|
||||||
|
|
||||||
@ -68,17 +53,17 @@ BOOL SYSMi_ReadCardBannerFile( u32 bannerOffset, TWLBannerFile *pBanner )
|
|||||||
CARD_UnlockRom( id );
|
CARD_UnlockRom( id );
|
||||||
OS_ReleaseLockID( id );
|
OS_ReleaseLockID( id );
|
||||||
|
|
||||||
isRead = SYSMi_CheckBannerFile( (TWLBannerFile *)pBanner );
|
isRead = BANNER_CheckBanner( (TWLBannerFile *)pBanner );
|
||||||
|
|
||||||
if( !isRead ) {
|
if( !isRead ) {
|
||||||
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
|
MI_CpuClearFast( pBanner, sizeof(TWLBannerFile) );
|
||||||
}
|
}
|
||||||
return isRead;
|
return isRead;
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// NANDアプリバナーリード
|
// NANDアプリバナーリード
|
||||||
BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
|
BOOL BANNER_ReadBannerFromNAND( OSTitleId titleID, TWLBannerFile *pDst )
|
||||||
{
|
{
|
||||||
#define PATH_LENGTH 1024
|
#define PATH_LENGTH 1024
|
||||||
OSTick start;
|
OSTick start;
|
||||||
@ -104,7 +89,7 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
|
|||||||
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
|
bSuccess = FS_OpenFileEx(file, path, FS_FILEMODE_R);
|
||||||
if( ! bSuccess )
|
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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,14 +97,14 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
|
|||||||
bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET);
|
bSuccess = FS_SeekFile(file, 0x68, FS_SEEK_SET);
|
||||||
if( ! bSuccess )
|
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);
|
FS_CloseFile(file);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
readLen = FS_ReadFile(file, &offset, sizeof(offset));
|
readLen = FS_ReadFile(file, &offset, sizeof(offset));
|
||||||
if( readLen != 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);
|
FS_CloseFile(file);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -129,18 +114,18 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
|
|||||||
bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET);
|
bSuccess = FS_SeekFile(file, offset, FS_SEEK_SET);
|
||||||
if( ! bSuccess )
|
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);
|
FS_CloseFile(file);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
readLen = FS_ReadFile( file, pDst, (s32)sizeof(TWLBannerFile) );
|
readLen = FS_ReadFile( file, pDst, (s32)sizeof(TWLBannerFile) );
|
||||||
if( readLen != (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);
|
FS_CloseFile(file);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if( !SYSMi_CheckBannerFile( pDst ) )
|
if( !BANNER_CheckBanner( pDst ) )
|
||||||
{
|
{
|
||||||
// 正当性チェック失敗の場合はバッファクリア
|
// 正当性チェック失敗の場合はバッファクリア
|
||||||
MI_CpuClearFast( pDst, sizeof(TWLBannerFile) );
|
MI_CpuClearFast( pDst, sizeof(TWLBannerFile) );
|
||||||
@ -163,19 +148,19 @@ BOOL SYSMi_ReadBanner_NAND( NAMTitleId titleID, TWLBannerFile *pDst )
|
|||||||
if( readLen == sizeof(TWLSubBannerFile) )
|
if( readLen == sizeof(TWLSubBannerFile) )
|
||||||
{
|
{
|
||||||
// 読み込みには成功したので正当性チェック
|
// 読み込みには成功したので正当性チェック
|
||||||
if( SYSMi_CheckSubBannerFile(&subBanner) )
|
if( BANNER_CheckSubBanner(&subBanner) )
|
||||||
{
|
{
|
||||||
// 成功したのでコピーする
|
// 成功したのでコピーする
|
||||||
pDst->h = subBanner.h;
|
pDst->h = subBanner.h;
|
||||||
pDst->anime = subBanner.anime;
|
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
|
}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
|
}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;
|
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;
|
int i;
|
||||||
BOOL retval = TRUE;
|
BOOL retval = TRUE;
|
||||||
@ -235,3 +209,16 @@ static BOOL SYSMi_CheckBannerFile( TWLBannerFile *pBanner )
|
|||||||
return retval;
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
@ -17,7 +17,7 @@
|
|||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
TARGET_FIRM = SYSTEMMENU
|
TARGET_FIRM = SYSTEMMENU
|
||||||
SUBDIRS = ARM7 ARM9
|
SUBDIRS = ARM9
|
||||||
|
|
||||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
|
|
||||||
@ -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 =====
|
|
||||||
|
|
||||||
@ -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
|
|
||||||
@ -28,12 +28,10 @@ REVISION_SRC = src/revision.c
|
|||||||
|
|
||||||
SRCDIR = src
|
SRCDIR = src
|
||||||
SRCS = sysmenu_lib.c \
|
SRCS = sysmenu_lib.c \
|
||||||
util.c \
|
|
||||||
ninLogoFunc.c \
|
ninLogoFunc.c \
|
||||||
device.c \
|
device.c \
|
||||||
keys.c \
|
keys.c \
|
||||||
title.c \
|
title.c \
|
||||||
banner.c \
|
|
||||||
fs_wram.c \
|
fs_wram.c \
|
||||||
../common/src/status.c \
|
../common/src/status.c \
|
||||||
../common/src/pxi.c \
|
../common/src/pxi.c \
|
||||||
|
|||||||
@ -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クロック補正値をセット
|
// RTCクロック補正値をセット
|
||||||
void SYSMi_WriteAdjustRTC( void )
|
void SYSMi_WriteAdjustRTC( void )
|
||||||
{
|
{
|
||||||
@ -175,8 +155,8 @@ void SYSMi_CheckRTC( void )
|
|||||||
|
|
||||||
// RTCのリセット or おかしい値を検出した場合は初回起動シーケンスへ。
|
// RTCのリセット or おかしい値を検出した場合は初回起動シーケンスへ。
|
||||||
( void )RTC_GetDateTime( &date, &time );
|
( void )RTC_GetDateTime( &date, &time );
|
||||||
if( !SYSM_CheckRTCDate( &date ) ||
|
if( !UTL_CheckRTCDate( &date ) ||
|
||||||
!SYSM_CheckRTCTime( &time )
|
!UTL_CheckRTCTime( &time )
|
||||||
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
#ifndef __IS_DEBUGGER_BUILD // 青デバッガではRTCの電池がないので、毎回ここにひっかかって設定データが片方クリアされてしまう。これを防ぐスイッチ。
|
||||||
||
|
||
|
||||||
SYSMi_GetWork()->flags.common.isResetRTC
|
SYSMi_GetWork()->flags.common.isResetRTC
|
||||||
|
|||||||
@ -153,9 +153,6 @@ TitleProperty *SYSM_ReadParameters( void )
|
|||||||
{
|
{
|
||||||
TitleProperty *pBootTitle = NULL;
|
TitleProperty *pBootTitle = NULL;
|
||||||
|
|
||||||
//NAMの初期化
|
|
||||||
NAM_Init( SYSM_Alloc, SYSM_Free );
|
|
||||||
|
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
// HW情報のリード
|
// HW情報のリード
|
||||||
//-----------------------------------------------------
|
//-----------------------------------------------------
|
||||||
@ -218,8 +215,6 @@ TitleProperty *SYSM_ReadParameters( void )
|
|||||||
}
|
}
|
||||||
#endif // SDK_SUPPORT_PMIC_2
|
#endif // SDK_SUPPORT_PMIC_2
|
||||||
|
|
||||||
// TPキャリブレーション
|
|
||||||
SYSM_CaribrateTP();
|
|
||||||
// RTC補正
|
// RTC補正
|
||||||
SYSMi_WriteAdjustRTC();
|
SYSMi_WriteAdjustRTC();
|
||||||
// RTC値のチェック
|
// RTC値のチェック
|
||||||
|
|||||||
@ -320,21 +320,30 @@ BOOL SYSMi_CopyCardRomHeader( void )
|
|||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// カードバナーのARM7バッファからARM9バッファへのコピー
|
// カードバナーのARM7バッファからARM9バッファへのコピー
|
||||||
BOOL SYSMi_CopyCardBanner( void )
|
BOOL SYSMi_CopyCardBanner( void )
|
||||||
{
|
{
|
||||||
BOOL retval = FALSE;
|
BOOL retval = FALSE;
|
||||||
|
|
||||||
if( SYSM_IsExistCard() ) {
|
if( SYSM_IsExistCard() ) {
|
||||||
// バナーデータのリード
|
// バナーデータのコピー
|
||||||
SYSMi_ReadCardBannerFile( SYSM_GetCardRomHeader()->banner_offset, &s_bannerBuf[ CARD_BANNER_INDEX ] );
|
TWLBannerFile *pBanner = &s_bannerBuf[ CARD_BANNER_INDEX ];
|
||||||
|
if( SYSMi_GetWork()->flags.hotsw.isValidCardBanner ) {
|
||||||
retval = TRUE;
|
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;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// インポートされているすべてのNANDアプリを列挙したリストの準備
|
// インポートされているすべてのNANDアプリを列挙したリストの準備
|
||||||
// SYSM_GetNandTitleListおよびSYSM_TryToBootTitle前に呼ぶ必要あり
|
// SYSM_GetNandTitleListおよびSYSM_TryToBootTitle前に呼ぶ必要あり
|
||||||
BOOL SYSM_InitNandTitleList( void )
|
BOOL SYSM_InitNandTitleList( void )
|
||||||
@ -388,7 +397,7 @@ int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand, int listNum )
|
|||||||
// "Not Launch"でない かつ "Data Only"でない なら有効なタイトルとしてリストに追加
|
// "Not Launch"でない かつ "Data Only"でない なら有効なタイトルとしてリストに追加
|
||||||
if( ( s_pTitleIDList[ l ] & ( TITLE_ID_NOT_LAUNCH_FLAG_MASK | TITLE_ID_DATA_ONLY_FLAG_MASK ) ) == 0 ) {
|
if( ( s_pTitleIDList[ l ] & ( TITLE_ID_NOT_LAUNCH_FLAG_MASK | TITLE_ID_DATA_ONLY_FLAG_MASK ) ) == 0 ) {
|
||||||
titleIDArray[ validNum ] = s_pTitleIDList[ l ];
|
titleIDArray[ validNum ] = s_pTitleIDList[ l ];
|
||||||
SYSMi_ReadBanner_NAND( s_pTitleIDList[ l ], &s_bannerBuf[ validNum ] );
|
BANNER_ReadBannerFromNAND( s_pTitleIDList[ l ], &s_bannerBuf[ validNum ] );
|
||||||
validNum++;
|
validNum++;
|
||||||
if( !( validNum < LAUNCHER_TITLE_LIST_NUM - 1 ) )// 最大(LAUNCHER_TITLE_LIST_NUM - 1)まで
|
if( !( validNum < LAUNCHER_TITLE_LIST_NUM - 1 ) )// 最大(LAUNCHER_TITLE_LIST_NUM - 1)まで
|
||||||
{
|
{
|
||||||
@ -1543,7 +1552,8 @@ static void SYSMi_makeTitleIdList( void )
|
|||||||
}
|
}
|
||||||
}else
|
}else
|
||||||
{
|
{
|
||||||
if(s_pTitleIDList[l] == NULL)
|
// 無効なTitleID または、DataOnlyアプリはスキップ
|
||||||
|
if( (s_pTitleIDList[l] == NULL) || !( s_pTitleIDList[l] & TITLE_ID_DATA_ONLY_FLAG_MASK ) )
|
||||||
{
|
{
|
||||||
continue;
|
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
|
// リストに追加してジャンプ可能フラグON
|
||||||
list->TitleID[count] = pe_hs->titleID;
|
list->TitleID[count] = pe_hs->titleID;
|
||||||
|
|||||||
@ -68,22 +68,6 @@ void SYSMi_WriteAdjustRTC( void );
|
|||||||
void SYSMi_CheckRTC( 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
|
#endif // SDK_ARM9
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
255
build/libraries_sysmenu/util/ARM9/src/device.c
Normal file
255
build/libraries_sysmenu/util/ARM9/src/device.c
Normal 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
|
||||||
@ -1,6 +1,6 @@
|
|||||||
/*---------------------------------------------------------------------------*
|
/*---------------------------------------------------------------------------*
|
||||||
Project: TwlIPL
|
Project: TwlIPL
|
||||||
File: SYSM_util.c
|
File: util.c
|
||||||
|
|
||||||
Copyright 2007 Nintendo. All rights reserved.
|
Copyright 2007 Nintendo. All rights reserved.
|
||||||
|
|
||||||
@ -19,26 +19,41 @@
|
|||||||
#include <sysmenu.h>
|
#include <sysmenu.h>
|
||||||
|
|
||||||
// define data------------------------------------------
|
// define data------------------------------------------
|
||||||
|
|
||||||
// extern data------------------------------------------
|
// extern data------------------------------------------
|
||||||
|
|
||||||
// function's prototype declaration---------------------
|
// function's prototype declaration---------------------
|
||||||
static s64 SYSMi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep );
|
static s64 UTLi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep );
|
||||||
|
|
||||||
// global variable -------------------------------------
|
// global variable -------------------------------------
|
||||||
|
|
||||||
// static variable -------------------------------------
|
// static variable -------------------------------------
|
||||||
|
|
||||||
// const data -----------------------------------------
|
// const data -----------------------------------------
|
||||||
|
|
||||||
// function's description-------------------------------
|
// 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オフセット制御
|
||||||
//======================================================================
|
//======================================================================
|
||||||
|
|
||||||
// RTCに新しい設定値をセットして、その値をもとにrtcOffset値を算出する。
|
// RTCに新しい設定値をセットして、その値をもとにrtcOffset値を算出する。
|
||||||
s64 SYSM_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep )
|
s64 UTL_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep )
|
||||||
{
|
{
|
||||||
RTCDate oldDate;
|
RTCDate oldDate;
|
||||||
RTCTime oldTime;
|
RTCTime oldTime;
|
||||||
@ -56,8 +71,8 @@ s64 SYSM_CalcRTCOffset( RTCDate *newDatep, RTCTime *newTimep )
|
|||||||
}
|
}
|
||||||
LCFG_TSD_SetRTCLastSetYear( (u8)newDatep->year );
|
LCFG_TSD_SetRTCLastSetYear( (u8)newDatep->year );
|
||||||
|
|
||||||
offset0 = SYSMi_CalcRTCSecOffset( &oldDate, &oldTime ); // 設定直前のRTC値のオフセットを算出
|
offset0 = UTLi_CalcRTCSecOffset( &oldDate, &oldTime ); // 設定直前のRTC値のオフセットを算出
|
||||||
offset1 = SYSMi_CalcRTCSecOffset( newDatep, newTimep ); // 新しくセットされたRTC値のオフセットを算出
|
offset1 = UTLi_CalcRTCSecOffset( newDatep, newTimep ); // 新しくセットされたRTC値のオフセットを算出
|
||||||
offset = LCFG_TSD_GetRTCOffset() + offset1 - offset0; // 新RTC_ofs と 現在のRTC_ofs の差分の値を加算してリターン。
|
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",
|
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オフセット値の算出
|
// RTCオフセット値の算出
|
||||||
#define SECOND_OFFSET
|
#define SECOND_OFFSET
|
||||||
static s64 SYSMi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep )
|
static s64 UTLi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep )
|
||||||
{
|
{
|
||||||
u32 i;
|
u32 i;
|
||||||
int uruu = 0;
|
int uruu = 0;
|
||||||
@ -93,7 +108,7 @@ static s64 SYSMi_CalcRTCSecOffset( RTCDate *datep, RTCTime *timep )
|
|||||||
// 月、日を 日数に換算してから、 秒 or 分オフセットに
|
// 月、日を 日数に換算してから、 秒 or 分オフセットに
|
||||||
dayNum = (int)datep->day - 1;
|
dayNum = (int)datep->day - 1;
|
||||||
for( i = 1; i < datep->month; i++ ) {
|
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;
|
u32 dayNum = 31;
|
||||||
if( month == 2 ) {
|
if( month == 2 ) {
|
||||||
if( SYSM_IsLeapYear100( year ) ) {
|
if( UTL_IsLeapYear100( year ) ) {
|
||||||
dayNum -= 2;
|
dayNum -= 2;
|
||||||
}else {
|
}else {
|
||||||
dayNum -= 3;
|
dayNum -= 3;
|
||||||
@ -131,7 +146,7 @@ u32 SYSM_GetDayNum( u32 year, u32 month )
|
|||||||
|
|
||||||
|
|
||||||
// 簡易うるう年の判定 (うるう年:1、通常の年:0)※RTCのとりうる範2000~2100年に限定する。
|
// 簡易うるう年の判定 (うるう年:1、通常の年:0)※RTCのとりうる範2000~2100年に限定する。
|
||||||
BOOL SYSM_IsLeapYear100( u32 year )
|
BOOL UTL_IsLeapYear100( u32 year )
|
||||||
{
|
{
|
||||||
if( ( year & 0x03 ) || ( year == 100 ) ) { // うるう年は、「4で割り切れ かつ 100で割り切れない年」または「400で割り切れる年」
|
if( ( year & 0x03 ) || ( year == 100 ) ) { // うるう年は、「4で割り切れ かつ 100で割り切れない年」または「400で割り切れる年」
|
||||||
return FALSE;
|
return FALSE;
|
||||||
@ -142,7 +157,7 @@ BOOL SYSM_IsLeapYear100( u32 year )
|
|||||||
|
|
||||||
|
|
||||||
// RTCの日付が正しいかチェック
|
// RTCの日付が正しいかチェック
|
||||||
BOOL SYSM_CheckRTCDate( RTCDate *datep )
|
BOOL UTL_CheckRTCDate( RTCDate *datep )
|
||||||
{
|
{
|
||||||
if( ( datep->year >= 100 )
|
if( ( datep->year >= 100 )
|
||||||
|| ( datep->month < 1 ) || ( datep->month > 12 )
|
|| ( datep->month < 1 ) || ( datep->month > 12 )
|
||||||
@ -155,7 +170,7 @@ BOOL SYSM_CheckRTCDate( RTCDate *datep )
|
|||||||
|
|
||||||
|
|
||||||
// RTCの時刻が正しいかチェック
|
// RTCの時刻が正しいかチェック
|
||||||
BOOL SYSM_CheckRTCTime( RTCTime *timep )
|
BOOL UTL_CheckRTCTime( RTCTime *timep )
|
||||||
{
|
{
|
||||||
if( ( timep->hour > 23 )
|
if( ( timep->hour > 23 )
|
||||||
|| ( timep->minute > 59 )
|
|| ( timep->minute > 59 )
|
||||||
@ -41,9 +41,6 @@ export DISABLE_WLFIRM_LOAD = FALSE
|
|||||||
export IGNORE_WLFIRM_SIGNCHECK = FALSE
|
export IGNORE_WLFIRM_SIGNCHECK = FALSE
|
||||||
export DISABLE_SLEEP = TRUE
|
export DISABLE_SLEEP = TRUE
|
||||||
|
|
||||||
# COMPILE SWITCH ※最終ROM作成時は、全てTRUEにセットする
|
|
||||||
export LOAD_APP_VIA_WRAM = FALSE
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# MAKEROM SWITCH ※最終ROM作成時は、全てTRUEにセットする
|
# MAKEROM SWITCH ※最終ROM作成時は、全てTRUEにセットする
|
||||||
@ -87,16 +84,30 @@ LINCLUDES = $(MISC_DIR)/include \
|
|||||||
$(ROOT)/build/libraries/wm/ARM9.TWL/nwm/inc \
|
$(ROOT)/build/libraries/wm/ARM9.TWL/nwm/inc \
|
||||||
$(ROOT)/build/libraries/reboot/common/include
|
$(ROOT)/build/libraries/reboot/common/include
|
||||||
|
|
||||||
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
|
SYSMENU_LIBS = \
|
||||||
libboc$(TWL_LIBSUFFIX).a \
|
liblcfg$(TWL_LIBSUFFIX).a \
|
||||||
libsfs$(TWL_LIBSUFFIX).a \
|
libsysmenu$(TWL_LIBSUFFIX).a \
|
||||||
libnam$(TWL_LIBSUFFIX).a \
|
libsysmmcu$(TWL_LIBSUFFIX).a \
|
||||||
libsea$(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 \
|
libreloc_info$(TWL_LIBSUFFIX).a \
|
||||||
libnamut$(TWL_LIBSUFFIX).a \
|
libnamut$(TWL_LIBSUFFIX).a \
|
||||||
libsharedfont_launcher$(TWL_LIBSUFFIX).a \
|
libsharedfont_launcher$(TWL_LIBSUFFIX).a \
|
||||||
WDS$(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
|
REBOOT_LIB = libreboot$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
LDEPENDS_NEF += $(REBOOT_LIB)
|
LDEPENDS_NEF += $(REBOOT_LIB)
|
||||||
|
|||||||
@ -113,7 +113,10 @@ void TwlMain( void )
|
|||||||
#ifdef USE_WRAM_LOAD
|
#ifdef USE_WRAM_LOAD
|
||||||
HOTSW_Init();
|
HOTSW_Init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
//NAMの初期化
|
||||||
|
NAM_Init( Alloc, Free );
|
||||||
|
|
||||||
OS_TPrintf( "SYSM_work size = 0x%x\n", sizeof(SYSM_work) );
|
OS_TPrintf( "SYSM_work size = 0x%x\n", sizeof(SYSM_work) );
|
||||||
|
|
||||||
// 割り込み許可--------------------
|
// 割り込み許可--------------------
|
||||||
@ -128,7 +131,10 @@ void TwlMain( void )
|
|||||||
|
|
||||||
// 各種パラメータの取得------------
|
// 各種パラメータの取得------------
|
||||||
pBootTitle = SYSM_ReadParameters(); // 本体設定データ、リセットパラメータのリード、検査用オート起動カード判定、量産ライン用キーショートカット起動判定等のリード
|
pBootTitle = SYSM_ReadParameters(); // 本体設定データ、リセットパラメータのリード、検査用オート起動カード判定、量産ライン用キーショートカット起動判定等のリード
|
||||||
|
|
||||||
|
// TPキャリブレーション
|
||||||
|
UTL_CaribrateTP( LCFG_TSD_GetTPCalibrationPtr() );
|
||||||
|
|
||||||
if( SYSM_IsFatalError() ) {
|
if( SYSM_IsFatalError() ) {
|
||||||
// FATALエラー処理
|
// FATALエラー処理
|
||||||
}
|
}
|
||||||
|
|||||||
@ -16,9 +16,9 @@
|
|||||||
# $Author$
|
# $Author$
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
SUBDIRS = \
|
SUBDIRS =
|
||||||
# ../../../libraries_sysmenu/sysmenu \
|
SUBMAKES = \
|
||||||
# ../../../libraries_sysmenu/settings
|
$(ROOT)/build/libraries/os/ARM9.TWL/Makefile.sharedFont
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
@ -66,12 +66,24 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
|
|||||||
|
|
||||||
MAKETAD_OPTION += -s
|
MAKETAD_OPTION += -s
|
||||||
|
|
||||||
LLIBRARIES = libes$(TWL_LIBSUFFIX).a \
|
# libsysmenu.a は、RED本体設定でSVNのリビジョンを取得するためだけに使用しているので、
|
||||||
libboc$(TWL_LIBSUFFIX).a \
|
# 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 \
|
libsfs$(TWL_LIBSUFFIX).a \
|
||||||
libnam$(TWL_LIBSUFFIX).a \
|
libnam$(TWL_LIBSUFFIX).a \
|
||||||
libsea$(TWL_LIBSUFFIX).a \
|
libsea$(TWL_LIBSUFFIX).a \
|
||||||
libnamut$(TWL_LIBSUFFIX).a
|
libsharedfont$(TWL_LIBSUFFIX).a
|
||||||
|
|
||||||
|
LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS)
|
||||||
|
|
||||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
|
|
||||||
|
|||||||
@ -349,10 +349,10 @@ void CheckOKCancelButton(BOOL *tp_ok, BOOL *tp_cancel)
|
|||||||
BOOL MY_WriteTWLSettings( void )
|
BOOL MY_WriteTWLSettings( void )
|
||||||
{
|
{
|
||||||
BOOL retval = FALSE;
|
BOOL retval = FALSE;
|
||||||
u8 *pBuffer = SYSM_Alloc( LCFG_WRITE_TEMP );
|
u8 *pBuffer = Alloc( LCFG_WRITE_TEMP );
|
||||||
if( pBuffer != NULL ) {
|
if( pBuffer != NULL ) {
|
||||||
retval = LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
|
retval = LCFG_WriteTWLSettings( (u8 (*)[ LCFG_WRITE_TEMP ] )pBuffer );
|
||||||
SYSM_Free( pBuffer );
|
Free( pBuffer );
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -17,7 +17,9 @@
|
|||||||
|
|
||||||
#include <twl.h>
|
#include <twl.h>
|
||||||
#include <twl/sea.h>
|
#include <twl/sea.h>
|
||||||
|
#include <twl/lcfg.h>
|
||||||
#include <sysmenu/namut.h>
|
#include <sysmenu/namut.h>
|
||||||
|
#include <sysmenu/util.h>
|
||||||
#include "misc.h"
|
#include "misc.h"
|
||||||
#include "MachineSetting.h"
|
#include "MachineSetting.h"
|
||||||
|
|
||||||
@ -84,24 +86,20 @@ void TwlMain(void)
|
|||||||
OS_TPrintf( "LCFGTWLSettingsData : 0x%04x\n", sizeof(LCFGTWLSettingsData) );
|
OS_TPrintf( "LCFGTWLSettingsData : 0x%04x\n", sizeof(LCFGTWLSettingsData) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// TWL設定のリード
|
|
||||||
SYSM_SetAllocFunc( Alloc, Free ); // SYSM_ReadTWLSettingsFile()の実行に必要。
|
|
||||||
|
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
// TWL設定データファイルの読み込み
|
// TWL設定データファイルの読み込み
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
(void)LCFG_ReadHWSecureInfo();
|
(void)LCFG_ReadHWSecureInfo();
|
||||||
{
|
{
|
||||||
u8 *pBuffer = SYSM_Alloc( LCFG_READ_TEMP );
|
u8 *pBuffer = Alloc( LCFG_READ_TEMP );
|
||||||
g_isValidTSD = FALSE;
|
g_isValidTSD = FALSE;
|
||||||
if( pBuffer) {
|
if( pBuffer) {
|
||||||
g_isValidTSD = LCFG_ReadTWLSettings( (u8 (*)[ LCFG_READ_TEMP ] )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();
|
InitBG();
|
||||||
GetAndDrawRTCData( &g_rtcDraw, TRUE );
|
GetAndDrawRTCData( &g_rtcDraw, TRUE );
|
||||||
|
|||||||
@ -153,8 +153,10 @@ int SelectRegionMain( void )
|
|||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
TSD_SetLanguage( default_lang_list[s_regionCode] ); // デフォルト言語に強制設定
|
TSD_SetLanguage( default_lang_list[s_regionCode] ); // デフォルト言語に強制設定
|
||||||
TSD_SetCountry( default_country_list[s_regionCode] ); // デフォルト国に強制設定
|
TSD_SetCountry( default_country_list[s_regionCode] ); // デフォルト国に強制設定
|
||||||
(void)SYSM_WriteTWLSettingsFile();
|
if( !MY_WriteTWLSettings() ) {
|
||||||
|
OS_TPrintf( "TWL settings write failed.\n" );
|
||||||
|
}
|
||||||
|
|
||||||
MachineSettingInit();
|
MachineSettingInit();
|
||||||
return 0;
|
return 0;
|
||||||
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
|
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
|
||||||
|
|||||||
@ -676,7 +676,7 @@ static void CheckDate( void )
|
|||||||
u8 maxday;
|
u8 maxday;
|
||||||
if( s_temp_birthday.month == 0 ) s_temp_birthday.month = 12;
|
if( s_temp_birthday.month == 0 ) s_temp_birthday.month = 12;
|
||||||
if( s_temp_birthday.month == 13 ) s_temp_birthday.month = 1;
|
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 == 0 ) s_temp_birthday.day = maxday;
|
||||||
if( s_temp_birthday.day > maxday ) s_temp_birthday.day = 1;
|
if( s_temp_birthday.day > maxday ) s_temp_birthday.day = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -307,7 +307,7 @@ static int InputRtcDateTimeMain( void )
|
|||||||
case SEQ_DAY_INIT:
|
case SEQ_DAY_INIT:
|
||||||
s_pWork->inp.pos_x = DAY_TOP_X;
|
s_pWork->inp.pos_x = DAY_TOP_X;
|
||||||
s_pWork->inp.keta_max = 2;
|
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;
|
s_pWork->inp.value_min = 1;
|
||||||
if(s_pWork->dtp.Date.day > s_pWork->inp.value_max) {
|
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 ) ||
|
if( ( s_pWork->dtp.seq == SEQ_YEAR_SET ) ||
|
||||||
( s_pWork->dtp.seq == SEQ_MONTH_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 ) {
|
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_WHITE, "%02d", s_pWork->dtp.Date.day );
|
||||||
PrintfSJIS( DAY_TOP_X, DATE_TOP_Y, TXT_COLOR_BLACK, "%02d", dayNum );
|
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) );
|
MI_CpuCopy32( &s_pWork->dtp.Date, &date, sizeof(RTCDate) );
|
||||||
date.year -= 2000;
|
date.year -= 2000;
|
||||||
(void)RTC_SetDateTime( &date, &s_pWork->dtp.Time );
|
(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 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||||
|
|||||||
@ -43,8 +43,15 @@ SRCS = main.c HWInfoWriter.c hwi.c \
|
|||||||
|
|
||||||
LINCLUDES = $(MISC_DIR)/include \
|
LINCLUDES = $(MISC_DIR)/include \
|
||||||
$(ROOT)/build/libraries/lcfg/ARM9.TWL/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)
|
||||||
|
|
||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@ -75,14 +75,19 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
|
|||||||
-DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
|
-DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
|
||||||
MAKETAD_FLAGS += -s
|
MAKETAD_FLAGS += -s
|
||||||
|
|
||||||
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
|
SYSMENU_LIBS = \
|
||||||
libboc$(TWL_LIBSUFFIX).a \
|
libacsign$(TWL_LIBSUFFIX).a \
|
||||||
libsfs$(TWL_LIBSUFFIX).a \
|
libnamut$(TWL_LIBSUFFIX).a
|
||||||
libnam$(TWL_LIBSUFFIX).a \
|
|
||||||
libsea$(TWL_LIBSUFFIX).a \
|
SDK_APPEND_LIBS = \
|
||||||
libacsign$(TWL_LIBSUFFIX).a \
|
libes$(TWL_LIBSUFFIX).a \
|
||||||
libacsign_enc$(TWL_LIBSUFFIX).a \
|
libboc$(TWL_LIBSUFFIX).a \
|
||||||
libnamut$(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
|
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
|
||||||
|
|||||||
@ -124,14 +124,20 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
|
|||||||
|
|
||||||
MAKETAD_FLAGS += -s
|
MAKETAD_FLAGS += -s
|
||||||
|
|
||||||
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
|
SYSMENU_LIBS = \
|
||||||
libboc$(TWL_LIBSUFFIX).a \
|
libacsign$(TWL_LIBSUFFIX).a \
|
||||||
libsfs$(TWL_LIBSUFFIX).a \
|
libacsign_enc$(TWL_LIBSUFFIX).a \
|
||||||
libnam$(TWL_LIBSUFFIX).a \
|
libnamut$(TWL_LIBSUFFIX).a
|
||||||
libsea$(TWL_LIBSUFFIX).a \
|
|
||||||
libacsign$(TWL_LIBSUFFIX).a \
|
SDK_APPEND_LIBS = \
|
||||||
libacsign_enc$(TWL_LIBSUFFIX).a \
|
libes$(TWL_LIBSUFFIX).a \
|
||||||
libnamut$(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
|
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
|
||||||
|
|
||||||
|
|||||||
@ -107,14 +107,20 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
|
|||||||
|
|
||||||
MAKETAD_FLAGS += -s
|
MAKETAD_FLAGS += -s
|
||||||
|
|
||||||
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
|
SYSMENU_LIBS = \
|
||||||
libboc$(TWL_LIBSUFFIX).a \
|
libacsign$(TWL_LIBSUFFIX).a \
|
||||||
libsfs$(TWL_LIBSUFFIX).a \
|
libacsign_enc$(TWL_LIBSUFFIX).a \
|
||||||
libnam$(TWL_LIBSUFFIX).a \
|
libnamut$(TWL_LIBSUFFIX).a
|
||||||
libsea$(TWL_LIBSUFFIX).a \
|
|
||||||
libacsign$(TWL_LIBSUFFIX).a \
|
SDK_APPEND_LIBS = \
|
||||||
libacsign_enc$(TWL_LIBSUFFIX).a \
|
libes$(TWL_LIBSUFFIX).a \
|
||||||
libnamut$(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
|
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
|
||||||
|
|
||||||
|
|||||||
@ -102,14 +102,20 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
|
|||||||
|
|
||||||
MAKETAD_FLAGS += -s
|
MAKETAD_FLAGS += -s
|
||||||
|
|
||||||
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
|
SYSMENU_LIBS = \
|
||||||
libboc$(TWL_LIBSUFFIX).a \
|
libacsign$(TWL_LIBSUFFIX).a \
|
||||||
libsfs$(TWL_LIBSUFFIX).a \
|
libacsign_enc$(TWL_LIBSUFFIX).a \
|
||||||
libnam$(TWL_LIBSUFFIX).a \
|
libnamut$(TWL_LIBSUFFIX).a
|
||||||
libsea$(TWL_LIBSUFFIX).a \
|
|
||||||
libacsign$(TWL_LIBSUFFIX).a \
|
SDK_APPEND_LIBS = \
|
||||||
libacsign_enc$(TWL_LIBSUFFIX).a \
|
libes$(TWL_LIBSUFFIX).a \
|
||||||
libnamut$(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
|
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
|
||||||
|
|
||||||
|
|||||||
@ -89,15 +89,21 @@ MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
|
|||||||
-DDISABLE_DEBUG='$(DISABLE_DEBUG)'
|
-DDISABLE_DEBUG='$(DISABLE_DEBUG)'
|
||||||
MAKETAD_FLAGS += -s
|
MAKETAD_FLAGS += -s
|
||||||
|
|
||||||
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
|
SYSMENU_LIBS = \
|
||||||
libboc$(TWL_LIBSUFFIX).a \
|
libacsign$(TWL_LIBSUFFIX).a \
|
||||||
libsfs$(TWL_LIBSUFFIX).a \
|
libacsign_enc$(TWL_LIBSUFFIX).a \
|
||||||
libnam$(TWL_LIBSUFFIX).a \
|
libnamut$(TWL_LIBSUFFIX).a \
|
||||||
libsea$(TWL_LIBSUFFIX).a \
|
libsysmenu$(TWL_LIBSUFFIX).a
|
||||||
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
|
MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,6 @@ export DISABLE_WDS_SCAN = TRUE
|
|||||||
export IGNORE_WLFIRM_SIGNCHECK = FALSE
|
export IGNORE_WLFIRM_SIGNCHECK = FALSE
|
||||||
export DISABLE_WLFIRM_LOAD = FALSE
|
export DISABLE_WLFIRM_LOAD = FALSE
|
||||||
export DISABLE_SLEEP = FASLE
|
export DISABLE_SLEEP = FASLE
|
||||||
export LOAD_APP_VIA_WRAM = FALSE
|
|
||||||
export SYSM_OUTSIDE_UI = TRUE
|
export SYSM_OUTSIDE_UI = TRUE
|
||||||
export SYSM_BROADON_UI = FALSE
|
export SYSM_BROADON_UI = FALSE
|
||||||
|
|
||||||
|
|||||||
@ -32,8 +32,9 @@
|
|||||||
#include <sysmenu/boot.h>
|
#include <sysmenu/boot.h>
|
||||||
#include <sysmenu/memorymap.h>
|
#include <sysmenu/memorymap.h>
|
||||||
#include <sysmenu/hotsw.h>
|
#include <sysmenu/hotsw.h>
|
||||||
#include <sysmenu/mb_loader.h>
|
|
||||||
#include <sysmenu/sharedFont.h>
|
#include <sysmenu/sharedFont.h>
|
||||||
|
#include <sysmenu/banner.h>
|
||||||
|
#include <sysmenu/util.h>
|
||||||
|
|
||||||
/* SYSMENU_H_ */
|
/* SYSMENU_H_ */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -15,20 +15,40 @@
|
|||||||
$Author$
|
$Author$
|
||||||
*---------------------------------------------------------------------------*/
|
*---------------------------------------------------------------------------*/
|
||||||
|
|
||||||
#ifndef BANNER_H_
|
#ifndef SYSM_BANNER_H_
|
||||||
#define BANNER_H_
|
#define SYSM_BANNER_H_
|
||||||
|
|
||||||
#include <twl/types.h>
|
#include <twl/types.h>
|
||||||
#include <sysmenu/banner/common/NTRBanner.h>
|
#include <twl/os/common/banner.h>
|
||||||
#include <sysmenu/banner/common/TWLBanner.h>
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#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
|
#ifdef __cplusplus
|
||||||
} /* extern "C" */
|
} /* extern "C" */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* BANNER_H_ */
|
/* SYSM_BANNER_H_ */
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -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
|
|
||||||
@ -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 ]; // 先頭の1個はBannerFileV1内にある。
|
|
||||||
}TWLBannerFile;
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef __cplusplus
|
|
||||||
} /* extern "C" */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* TWL_BANNER_H_ */
|
|
||||||
#endif
|
|
||||||
@ -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
|
|
||||||
@ -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_ */
|
|
||||||
Loading…
Reference in New Issue
Block a user