mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
systemMenu_REDのフォルダ再構成
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@73 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
1952c74fb3
commit
c52da9b005
@ -29,7 +29,9 @@ SPACE ?= $(EMPTY) $(EMPTY)
|
||||
|
||||
SYSMENU_ROOT := $(subst $(SPACE),\ ,$(subst \,/,$(TWLIPL_ROOT)))
|
||||
SYSMENU_BUILDTOOLSDIR := $(SYSMENU_ROOT)/build/buildtools
|
||||
SYSMENU_INCDIR := $(SYSMENU_ROOT)/include
|
||||
SYSMENU_INCDIR := $(SYSMENU_ROOT)/include \
|
||||
$(TWLSDK_ROOT)/build/libraries/spi/arm9/include \
|
||||
$(TWLSDK_ROOT)/build/libraries/mb/common/include
|
||||
SYSMENU_TOOLSDIR := $(SYSMENU_ROOT)/tools
|
||||
SYSMENU_COMPONENTSDIR := $(SYSMENU_ROOT)/components
|
||||
|
||||
|
||||
@ -19,10 +19,6 @@
|
||||
#include <sysmenu/machineSettings/common/nitroSettings.h>
|
||||
#include "spi.h"
|
||||
|
||||
#ifndef USED_COMPONENT
|
||||
#include <sysmenu/sysmenu_work.h>
|
||||
#endif
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
|
||||
#define NCD_EX_FORCE_ENABLE // このスイッチを定義すると、SYSMバージョンに関わらず強制的にNitroConfigDataExが有効になる。
|
||||
@ -39,6 +35,9 @@
|
||||
#define SR_WEN 0x02 // 0:ライト禁止 1:ライト許可
|
||||
#define SR_EER 0x20 // 1:イレースエラー発生(SANYO製FLASHのみ)
|
||||
|
||||
#define READ_IPL2_HEADER_ADDR 0x18 // IPL2ヘッダのうち、読み込みが必要な部分の先頭アドレス
|
||||
#define READ_IPL2_HEADER_SIZE 0x0a // IPL2ヘッダのうち、読み込みが必要なサイズ
|
||||
#define NCD_ROM_ADDR_SHIFT 3
|
||||
|
||||
// NVRAM関連送信コマンドステート
|
||||
static enum NvramCommState{
|
||||
@ -52,49 +51,22 @@ static enum NvramCommState{
|
||||
}NvramCommState;
|
||||
|
||||
|
||||
// SYSMヘッダ情報
|
||||
typedef struct SYSMHeader {
|
||||
u16 bm_arm9_rom_addr;
|
||||
u16 bm_arm7_rom_addr;
|
||||
u16 bm_crc16;
|
||||
u16 ipl2_crc16;
|
||||
u8 ipl2_key[4];
|
||||
u16 ipl2_arm9_rom_addr;
|
||||
u16 ipl2_arm9_ram_addr;
|
||||
u16 ipl2_arm7_rom_addr;
|
||||
u16 ipl2_arm7_ram_addr;
|
||||
u16 ipl2_arm9_romOffsetUnit:3;
|
||||
u16 ipl2_arm9_ramOffsetUnit:3;
|
||||
u16 ipl2_arm7_romOffsetUnit:3;
|
||||
u16 ipl2_arm7_ramOffsetUnit:3;
|
||||
u16 ipl2_arm7_ramSelect:1;
|
||||
u16 ipl2_header_ver:3;
|
||||
u16 ipl2_data_rom_addr;
|
||||
union {
|
||||
struct {
|
||||
u8 timestamp[5]; // SYSMタイムスタンプ [0]:分,[1]:時,[2]:日,[3]:月,[4]:年
|
||||
u8 ipl2_type; // SYSMタイプ(nitroConfigData.hで定義のSYSM_TYPE...)
|
||||
u8 rsv[2];
|
||||
} version;
|
||||
u8 card_key[8];
|
||||
} info;
|
||||
// IPL2ヘッダの一部(0x18からのデータ)
|
||||
typedef struct IPL2HeaderPart {
|
||||
struct {
|
||||
u8 timestamp[5]; // IPL2タイムスタンプ [0]:分,[1]:時,[2]:日,[3]:月,[4]:年
|
||||
u8 ipl2_type; // IPL2タイプ(nitroConfigData.hで定義のIPL2_TYPE...)
|
||||
u8 rsv[2];
|
||||
} version;
|
||||
|
||||
u16 ncd_rom_addr;
|
||||
union { // SYSMHeader.info.version.type == SYSM_TYPE_I_DISPLAY_JAPANもしくは
|
||||
u16 sys_rsv_rom_addr; // SYSMHeader.info.version.timestamp >= 0x0502280851(SYSM_TYPE_NORMAL 3rd.以降)
|
||||
u16 font_bncmp_offset; // ならば、font_bncmp_offset, font_bnfr_offsetが有効。
|
||||
} rom_addr1; // ※なお、sys_rsv_rom_addr, app_rsv_rom_addrは、アドレスが変わったので
|
||||
union { // ここに入っている値は無効。ncd_rom_addrからの相対値で算出。
|
||||
u16 app_rsv_rom_addr;
|
||||
u16 font_bnfr_offset;
|
||||
} rom_addr2;
|
||||
u16 ipl2_data_crc16;
|
||||
|
||||
u8 pad[ 0x18 ]; // ※キャッシュラインに合わせるためのパディング。本来は必要なし。
|
||||
|
||||
} SYSMHeader; // 0x40bytes
|
||||
u8 pad[ 0x16 ]; // ※キャッシュラインに合わせるためのパディング。本来は必要なし。
|
||||
} IPL2HeaderPart; // 0x20bytes
|
||||
|
||||
|
||||
// function's prototype-------------------------------------------------
|
||||
static void NCD_ReadIPL2Header( void );
|
||||
static int NVRAMm_checkCorrectNCD(NCDStoreEx *ncdsp);
|
||||
static BOOL NCD_CheckDataValue( NCDStoreEx *ncdsp );
|
||||
static BOOL NVRAMm_ExecuteCommand( int nv_state, u32 addr, u16 size, u8 *srcp );
|
||||
@ -103,7 +75,7 @@ static void Callback_NVRAM(PXIFifoTag tag, u32 data, BOOL err);
|
||||
// const data-----------------------------------------------------------
|
||||
|
||||
// global variables-----------------------------------------------------
|
||||
NitroConfigDataEx ncdEx;
|
||||
NitroConfigDataEx ncdEx;
|
||||
|
||||
// static variables-----------------------------------------------------
|
||||
static volatile BOOL nv_cb_occurred;
|
||||
@ -112,98 +84,48 @@ static u16 ena_ncd_num = NCD_NOT_CORRECT;
|
||||
static u16 next_saveCount;
|
||||
static NCDStoreEx ncds[2] ATTRIBUTE_ALIGN(32);
|
||||
|
||||
#ifdef USED_COMPONENT
|
||||
static SYSMHeader ipl2Header ATTRIBUTE_ALIGN(32);
|
||||
static IPL2HeaderPart ipl2Header ATTRIBUTE_ALIGN(32);
|
||||
static BOOL read_ipl2h = FALSE;
|
||||
#endif
|
||||
|
||||
|
||||
// function's description-----------------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// SYSMヘッダ情報の読み出し
|
||||
// IPL2ヘッダ情報の読み出し
|
||||
//----------------------------------------------------------------------
|
||||
#ifndef USED_COMPONENT
|
||||
// SYSM上での使用時
|
||||
|
||||
// SYSMタイプの取得
|
||||
#define NCD_GetSYSMType() ( (u32)GetSYSMWork()->ipl2_type )
|
||||
|
||||
// NCD格納ROMアドレスの取得
|
||||
#define NCD_GetNCDRomAddr() ( (u32)GetSYSMWork()->ncd_rom_adr )
|
||||
|
||||
#else
|
||||
// コンポーネント上での使用時
|
||||
|
||||
// SYSMヘッダの読み出し
|
||||
void NCD_ReadSYSMHeader( void )
|
||||
// IPL2ヘッダの読み出し
|
||||
static void NCD_ReadIPL2Header( void )
|
||||
{
|
||||
if( !read_ipl2h ) {
|
||||
OS_TPrintf( "SYSMHeader:%x\n", sizeof(SYSMHeader) );
|
||||
DC_InvalidateRange( &ipl2Header, sizeof(SYSMHeader) );
|
||||
while( !NVRAMm_ExecuteCommand( COMM_RD, 0, sizeof(SYSMHeader), (u8 *)&ipl2Header ) ) {}
|
||||
read_ipl2h = TRUE;
|
||||
OS_TPrintf( "IPL2Header:%x\n", sizeof(IPL2HeaderPart) );
|
||||
DC_InvalidateRange( &ipl2Header, sizeof(IPL2HeaderPart) );
|
||||
while( !NVRAMm_ExecuteCommand( COMM_RD, READ_IPL2_HEADER_ADDR, READ_IPL2_HEADER_SIZE, (u8 *)&ipl2Header ) ) {}
|
||||
read_ipl2h = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// SYSMタイプの取得
|
||||
u8 NCD_GetSYSMType( void )
|
||||
// IPL2タイプの取得
|
||||
u8 NCD_GetIPL2Type( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
return ipl2Header.info.version.ipl2_type;
|
||||
NCD_ReadIPL2Header();
|
||||
return ipl2Header.version.ipl2_type;
|
||||
}
|
||||
|
||||
// SYSMバージョンの取得
|
||||
u8 *NCD_GetSYSMVersion( void )
|
||||
// IPL2バージョンの取得
|
||||
u8 *NCD_GetIPL2Version( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
return ipl2Header.info.version.timestamp;
|
||||
NCD_ReadIPL2Header();
|
||||
return ipl2Header.version.timestamp;
|
||||
}
|
||||
|
||||
// NCD格納ROMアドレスの取得
|
||||
u32 NCD_GetNCDRomAddr( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
NCD_ReadIPL2Header();
|
||||
return (u32)( ipl2Header.ncd_rom_addr << NCD_ROM_ADDR_SHIFT );
|
||||
}
|
||||
|
||||
// システム予約領域ROMアドレスの取得
|
||||
u32 NCD_GetSysRsvRomAddr( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
return (u32)( ipl2Header.ncd_rom_addr << NCD_ROM_ADDR_SHIFT ) - NCD_SYS_RSV_SIZE;
|
||||
}
|
||||
|
||||
// アプリ予約領域ROMアドレスの取得
|
||||
u32 NCD_GetAppRsvRomAddr( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
return (u32)( ipl2Header.ncd_rom_addr << NCD_ROM_ADDR_SHIFT ) - NCD_SYS_RSV_SIZE - NCD_APP_RSV_SIZE;
|
||||
}
|
||||
|
||||
// SYSMデータ格納ROMアドレスの取得
|
||||
u32 NCD_GetSYSMDataRomAddr( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
return (u32)( ipl2Header.ipl2_data_rom_addr << NCD_ROM_ADDR_SHIFT );
|
||||
}
|
||||
|
||||
// bncmpフォントデータ格納ROMアドレスの取得
|
||||
u32 NCD_GetFontBncmpRomAddr( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
return (u32)( ipl2Header.rom_addr1.font_bncmp_offset << FONT_ROM_ADDR_SHIFT );
|
||||
}
|
||||
|
||||
// bnfrフォントデータ格納ROMアドレスの取得
|
||||
u32 NCD_GetFontBnfrRomAddr( void )
|
||||
{
|
||||
NCD_ReadSYSMHeader();
|
||||
return (u32)( ipl2Header.rom_addr2.font_bnfr_offset << FONT_ROM_ADDR_SHIFT );
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
//----------------------------------------------------------------------
|
||||
// NITRO設定データのリード
|
||||
//----------------------------------------------------------------------
|
||||
@ -228,7 +150,7 @@ int NVRAMm_ReadNitroConfigData(NitroConfigData *dstp)
|
||||
next_saveCount = (u8)((ncdsp[ena_ncd_num].saveCount + 1) & SAVE_COUNT_MASK);
|
||||
|
||||
// 有効なNITRO設定データをバッファに転送
|
||||
if(dstp!=NULL) {
|
||||
if( dstp != NULL ) {
|
||||
SVC_CpuCopy( (void *)&ncdsp[ ena_ncd_num ].ncd, (void *)dstp, sizeof(NitroConfigData), 16);
|
||||
SVC_CpuCopy( (void *)&ncdsp[ ena_ncd_num ].ncd_ex, (void *)&ncdEx, sizeof(NitroConfigDataEx), 16);
|
||||
}
|
||||
@ -264,11 +186,12 @@ void NVRAMm_WriteNitroConfigData( NitroConfigData *srcp )
|
||||
|
||||
// NCD_EXのCRC算出。
|
||||
#ifndef NCD_EX_FORCE_ENABLE
|
||||
if( ( NCD_GetSYSMType() != SYSM_TYPE_NTR_WW ) && ( NCD_GetSYSMType() & SYSM_TYPE_NCD_EX_FLAG ) )
|
||||
if( ( NCD_GetIPL2Type() != IPL2_TYPE_NTR_WW ) && ( NCD_GetIPL2Type() & IPL2_TYPE_NCD_EX_FLAG ) )
|
||||
#endif
|
||||
{
|
||||
ncdsp->ncd_ex = *GetNCDExWork();
|
||||
ncdsp->ncd_ex.version = NITRO_CONFIG_DATA_EX_VERSION; // バージョンを現在のものに設定。
|
||||
ncdsp->ncd_ex.valid_language_bitmap = VALID_LANG_BITMAP;
|
||||
ncdsp->crc16_ex = SVC_GetCRC16( 0xffff, (const void *)&ncdsp->ncd_ex, sizeof(NitroConfigDataEx) );
|
||||
size = sizeof(NCDStoreEx); // ※書き込みサイズをNCDStoreExに拡張。
|
||||
}
|
||||
@ -314,9 +237,9 @@ static int NVRAMm_checkCorrectNCD(NCDStoreEx *ncdsp)
|
||||
invalid = TRUE;
|
||||
}
|
||||
|
||||
// NCDExが有効なSYSMTypeならば、NCDExのCRCチェックを行う。
|
||||
// NCDExが有効なIPL2Typeならば、NCDExのCRCチェックを行う。
|
||||
#ifndef NCD_EX_FORCE_ENABLE
|
||||
if( ( NCD_GetSYSMType() != SYSM_TYPE_NTR_WW ) && ( NCD_GetSYSMType() & SYSM_TYPE_NCD_EX_FLAG ) )
|
||||
if( ( NCD_GetIPL2Type() != IPL2_TYPE_NTR_WW ) && ( NCD_GetIPL2Type() & IPL2_TYPE_NCD_EX_FLAG ) )
|
||||
#endif
|
||||
{
|
||||
crc = SVC_GetCRC16( 0xffff, (const void *)&ncdsp[i].ncd_ex, sizeof(NitroConfigDataEx) );
|
||||
@ -374,9 +297,9 @@ static BOOL NCD_CheckDataValue( NCDStoreEx *ncdsp )
|
||||
ncdp->option.language, ncdexp->language, ncdexp->valid_language_bitmap );
|
||||
return FALSE;
|
||||
}
|
||||
// NCDExのlanguageチェック(NCDExが有効なのは、下記のSYSMタイプのもの)
|
||||
// NCDExのlanguageチェック(NCDExが有効なのは、下記のIPL2タイプのもの)
|
||||
#ifndef NCD_EX_FORCE_ENABLE
|
||||
if( ( NCD_GetSYSMType() != SYSM_TYPE_NTR_WW ) && ( NCD_GetSYSMType() & SYSM_TYPE_NCD_EX_FLAG ) )
|
||||
if( ( NCD_GetIPL2Type() != IPL2_TYPE_NTR_WW ) && ( NCD_GetIPL2Type() & IPL2_TYPE_NCD_EX_FLAG ) )
|
||||
#endif
|
||||
{
|
||||
if( ( ~VALID_LANG_BITMAP & ( 0x0001 << ncdexp->language ) )
|
||||
|
||||
@ -32,21 +32,6 @@ typedef struct BannerCheckParam {
|
||||
u32 size;
|
||||
}BannerCheckParam;
|
||||
|
||||
|
||||
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
|
||||
u64 titleID; // アプリケーション識別ID
|
||||
u32 platform; // NTR, TWL (HYBLIDはTWLを返す)
|
||||
void *pBanner; // 固定長フォーマットなら偽造されても大丈夫だろう。
|
||||
}TitleProperty;
|
||||
|
||||
typedef enum AuthState {
|
||||
AUTH_PROCESSING = 0,
|
||||
AUTH_RESULT_SUCCEEDED = 1,
|
||||
AUTH_RESULT_TITLE_POINTER_ERROR = 2,
|
||||
AUTH_RESULT_AUTHENTICATE_FAILED = 3,
|
||||
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 4
|
||||
}AuthState;
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
extern void ReturnFromMain( void );
|
||||
extern void BootFuncEnd( void );
|
||||
@ -55,9 +40,14 @@ FS_EXTERN_OVERLAY( ipl2_data );
|
||||
FS_EXTERN_OVERLAY( bm_mainp );
|
||||
|
||||
// function's prototype-------------------------------------------------------
|
||||
static void SYSMi_WaitInitARM7( void );
|
||||
static BOOL SYSMi_IsDebuggerBannerViewMode( void );
|
||||
|
||||
static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle );
|
||||
AuthState SYSM_AuthAndLoadTitle( TitleProperty *pBootTitle );
|
||||
void SYSM_Finalize( void );
|
||||
void SYSM_RebootLauncher( void );
|
||||
void SYSM_RebootTitle( u64 titleID );
|
||||
|
||||
|
||||
|
||||
static void INTR_SubpIRQ( void );
|
||||
@ -74,8 +64,7 @@ static void SYSMi_CopyInfoFromIPL1( void );
|
||||
static void SYSMi_ReadNTRSetting( void );
|
||||
static void SYSMi_ReadTWLSetting( void );
|
||||
static void SYSMi_VerifyNTRSetting( void );
|
||||
static void SYSMi_CheckEntryAddress( void );
|
||||
static void SYSMi_CaribrateTP( void );
|
||||
static BOOL SYSMi_CheckEntryAddress( void );
|
||||
static void SYSMi_WriteAdjustRTC( void );
|
||||
static BOOL SYSMi_SendMessageToARM7( u32 msg );
|
||||
static BOOL SYSMi_CheckNitroCardRightly( void );
|
||||
@ -134,7 +123,10 @@ void SYSM_Init( void )
|
||||
ncdp = GetNCDWork();
|
||||
// SYSMi_DispInitialDebugData(); // 初期デバッグ情報表示
|
||||
#endif /* __SYSM_DEBUG */
|
||||
|
||||
|
||||
TP_Init();
|
||||
RTC_Init();
|
||||
|
||||
// WRAM設定はいる?
|
||||
// MI_SetMainMemoryPriority(MI_PROCESSOR_ARM7);
|
||||
// MI_SetWramBank(MI_WRAM_ARM7_ALL);
|
||||
@ -142,11 +134,12 @@ void SYSM_Init( void )
|
||||
SVC_CpuClearFast(0x0000, (u16 *)GetSYSMWork(), sizeof(SYSM_work)); // SYSMワークのクリア
|
||||
|
||||
// ※ISデバッガかどうかの判定。 BootROMからのパラメータ引渡し?
|
||||
SYSMi_WaitInitARM7();
|
||||
}
|
||||
|
||||
|
||||
// ARM7側の初期化待ち
|
||||
BOOL SYSM_WaitARM7Init( void )
|
||||
static void SYSMi_WaitInitARM7( void )
|
||||
{
|
||||
/* while( !( SYSM_GetBootFlag() & BFLG_ARM7_INIT_COMPLETED ) ) {
|
||||
SVC_WaitByLoop(0x1000); // ARM7の初期化が終了するのを待つ。
|
||||
@ -154,14 +147,15 @@ BOOL SYSM_WaitARM7Init( void )
|
||||
*/
|
||||
reg_OS_PAUSE |= REG_OS_PAUSE_CHK_MASK; // PAUSEレジスタのチェックフラグのセット
|
||||
|
||||
SYSMi_ReadNTRSetting(); // NOR からNTR本体設定データをリード
|
||||
SYSMi_ReadTWLSetting(); // NANDからTWL本体設定データをリード
|
||||
PMm_SetBackLightBrightness();
|
||||
SYSMi_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。
|
||||
SYSMi_WriteAdjustRTC(); // 読み出したTWL本体設定データをもとにRTCクロック補正値をセット。
|
||||
|
||||
SYSMi_ReadNTRSetting(); // NOR からNTR本体設定データをリード
|
||||
SYSMi_VerifyNTRSetting(); // NVRAMのNTR本体設定データをリードし、不一致箇所があればNTR側をリカバリ。
|
||||
|
||||
SYSM_CaribrateTP(); // 読み出したTWL本体設定データをもとにTPキャリブレーション。
|
||||
SYSMi_WriteAdjustRTC(); // 読み出したTWL本体設定データをもとにRTCクロック補正値をセット。
|
||||
|
||||
SYSMi_CheckCardCloneBoot(); // カードがクローンブートかチェック
|
||||
SYSMi_ReadCardBannerFile(); // カードバナーファイルの読み出し。
|
||||
|
||||
@ -169,33 +163,32 @@ BOOL SYSM_WaitARM7Init( void )
|
||||
// デバッガ対応コード
|
||||
#ifdef __IS_DEBUGGER_BUILD
|
||||
if( GetSYSMWork()->isOnDebugger ) {
|
||||
if( !SYSM_IsDebuggerBannerViewMode() ){ // デバッガ上動作の場合は、この中でカードブートまでやってしまう。
|
||||
|
||||
( void )OS_EnableIrqMask( OS_IE_V_BLANK );
|
||||
( void )OS_EnableIrq();
|
||||
( void )OS_EnableInterrupts();
|
||||
( void )GX_VBlankIntr( TRUE );
|
||||
|
||||
if( SYSMi_ExistCard() ) {
|
||||
( void )SYSM_Main();
|
||||
SYSM_SetBootFlag( BFLG_BOOT_CARD );
|
||||
( void )SYSM_BootCARD();
|
||||
SYSM_PermitToBootSelectedTarget();
|
||||
while(1) {
|
||||
OS_WaitIrq( 1, OS_IE_V_BLANK ); // Vブランク割込終了待ち
|
||||
if( SYSM_Main() ) { // システムのメイン
|
||||
return TRUE; // TRUEが帰ってきたらメインループからリターン(カード起動)
|
||||
}
|
||||
}
|
||||
}
|
||||
if( SYSMi_ExistCard() &&
|
||||
!SYSMi_IsDebuggerBannerViewMode() ){ // デバッガ上動作の場合は、この中でカードブートまでやってしまう。
|
||||
SYSM_GetResetParam()->isLogoSkip = TRUE;
|
||||
SYSM_GetResetParam()->bootTitleID = SYSM_GetCardTitleID();
|
||||
}
|
||||
}else {
|
||||
while( 1 ) {} // ISデバッガビルドでISデバッガが検出できなかったら停止。
|
||||
}
|
||||
#endif // __IS_DEBUGGER_BUILD
|
||||
// ==============================================================
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
|
||||
int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card )
|
||||
{
|
||||
#pragma unused( pTitleList_Card )
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand )
|
||||
{
|
||||
#pragma unused( pTitleList_Nand )
|
||||
// filter_flag : ALL, ALL_APP, SYS_APP, USER_APP, Data only, 等の条件を指定してタイトルリストを取得する。
|
||||
// return : *TitleProperty Array
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -209,16 +202,21 @@ static BOOL SYSMi_CheckTitlePointer( TitleProperty *pBootTitle )
|
||||
|
||||
|
||||
// 指定タイトルの認証&ロード ※1フレームじゃ終わらん。
|
||||
AuthState SYSM_AuthAndLoadTitle( TitleProperty *pBootTitle )
|
||||
AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle )
|
||||
{
|
||||
#pragma unused( pBootTitle )
|
||||
// メインメモリのクリア
|
||||
// DSダウンロードプレイの時は、ROMヘッダを退避する
|
||||
// アプリロード
|
||||
// アプリ認証
|
||||
|
||||
// エントリアドレスの正当性をチェックし、無効な場合は無限ループに入る。
|
||||
SYSMi_CheckEntryAddress();
|
||||
// パラメータチェック
|
||||
if( !SYSMi_CheckTitlePointer( pBootTitle ) ) {
|
||||
return AUTH_RESULT_TITLE_POINTER_ERROR;
|
||||
}
|
||||
// エントリアドレスの正当性をチェック
|
||||
if( !SYSMi_CheckEntryAddress() ) {
|
||||
return AUTH_RESULT_ENTRY_ADDRESS_ERROR;
|
||||
}
|
||||
|
||||
return AUTH_RESULT_SUCCEEDED;
|
||||
}
|
||||
@ -260,6 +258,20 @@ void SYSM_Finalize( void )
|
||||
}
|
||||
|
||||
|
||||
// ランチャーをリブート
|
||||
void SYSM_RebootLauncher( void )
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
// 再起動タイトルを指定してのリブート
|
||||
void SYSM_RebootTitle( u64 titleID )
|
||||
{
|
||||
#pragma unused( titleID )
|
||||
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
// NITRO起動をARM7に通知
|
||||
BOOL SYSM_BootCard( void )
|
||||
@ -278,13 +290,14 @@ BOOL SYSM_BootCard( void )
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if 0
|
||||
// TPリード可能かどうかを調べる。
|
||||
BOOL SYSM_IsTPReadable( void )
|
||||
{
|
||||
if( SYSM_GetBootFlag() & BFLG_BOOT_DECIDED ) return FALSE;
|
||||
else return TRUE;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
// ARM7-ARM9共有リソースのbootFlagへの値のセット
|
||||
@ -326,7 +339,7 @@ static void INTR_SubpIRQ( void )
|
||||
// ============================================================================
|
||||
|
||||
// エントリアドレスの正当性チェック
|
||||
static void SYSMi_CheckEntryAddress( void )
|
||||
static BOOL SYSMi_CheckEntryAddress( void )
|
||||
{
|
||||
// エントリアドレスがROM内登録エリアかAGBカートリッジエリアなら、無限ループに入る。
|
||||
if( !( ( (u32)GetRomHeaderAddr()->main_entry_address >= HW_MAIN_MEM )
|
||||
@ -340,9 +353,10 @@ static void SYSMi_CheckEntryAddress( void )
|
||||
#ifdef __DEBUG_SECURITY_CODE
|
||||
DispSingleColorScreen( SCREEN_YELLOW );
|
||||
#endif
|
||||
while( 1 ) {}
|
||||
return FALSE;
|
||||
}
|
||||
OS_TPrintf("entry address valid.\n");
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
@ -401,8 +415,16 @@ static void SYSMi_MainpRegisterAndRamClear( BOOL isPlatformTWL )
|
||||
// サブルーチン
|
||||
// ============================================================================
|
||||
|
||||
// ロゴデモスキップか?
|
||||
BOOL SYSM_IsLogoDemoSkip( void )
|
||||
{
|
||||
// ※システムアプリからのハードリセットによるロゴデモ飛ばしも判定に入れる。
|
||||
|
||||
return SYSMi_IsDebuggerBannerViewMode();
|
||||
}
|
||||
|
||||
// ISデバッガのバナービューモード起動かどうか?
|
||||
BOOL SYSM_IsDebuggerBannerViewMode( void )
|
||||
static BOOL SYSMi_IsDebuggerBannerViewMode( void )
|
||||
{
|
||||
#ifdef __IS_DEBUGGER_BUILD
|
||||
return ( GetSYSMWork()->isOnDebugger &&
|
||||
@ -567,15 +589,15 @@ static void SYSMi_CheckCardCloneBoot( void )
|
||||
|
||||
|
||||
// タッチパネルキャリブレーション
|
||||
static void SYSMi_CaribrateTP( void )
|
||||
void SYSM_CaribrateTP( void )
|
||||
{
|
||||
#ifndef __TP_OFF
|
||||
TPCalibrateParam calibrate;
|
||||
|
||||
( void )TP_CalcCalibrateParam(&calibrate, // タッチパネル初期化
|
||||
( void )TP_CalcCalibrateParam( &calibrate, // タッチパネル初期化
|
||||
GetNCDWork()->tp.raw_x1, GetNCDWork()->tp.raw_y1, (u16)GetNCDWork()->tp.dx1, (u16)GetNCDWork()->tp.dy1,
|
||||
GetNCDWork()->tp.raw_x2, GetNCDWork()->tp.raw_y2, (u16)GetNCDWork()->tp.dx2, (u16)GetNCDWork()->tp.dy2 );
|
||||
TP_SetCalibrateParam(&calibrate);
|
||||
TP_SetCalibrateParam( &calibrate );
|
||||
OS_Printf("TP_calib: %4d %4d %4d %4d %4d %4d\n",
|
||||
GetNCDWork()->tp.raw_x1, GetNCDWork()->tp.raw_y1, (u16)GetNCDWork()->tp.dx1, (u16)GetNCDWork()->tp.dy1,
|
||||
GetNCDWork()->tp.raw_x2, GetNCDWork()->tp.raw_y2, (u16)GetNCDWork()->tp.dx2, (u16)GetNCDWork()->tp.dy2 );
|
||||
|
||||
@ -1,8 +0,0 @@
|
||||
#define WAVE_VGROUP000 0
|
||||
#define BANK_VGROUP000 0
|
||||
#define SEQ_SONG0 0
|
||||
#define SEQ_DUMMY 0
|
||||
#define DUMMY 0
|
||||
|
||||
extern const u8 _binary_sound_data_sdat[]; // サウンドデータ
|
||||
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 42 KiB |
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 270 KiB |
@ -1,128 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: DS_Setting.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 "main.h"
|
||||
#include "DS_Setting.h"
|
||||
|
||||
// define data-----------------------------------------------------------------
|
||||
|
||||
// function's prototype--------------------------------------------------------
|
||||
int DS_SettingMain();
|
||||
void VBlankIntr_bm(void);
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
// global variable-------------------------------------------------------------
|
||||
|
||||
// static variable-------------------------------------------------------------
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// function's description
|
||||
// ============================================================================
|
||||
|
||||
int DS_SettingMain()
|
||||
{
|
||||
(void)OS_DisableIrq();
|
||||
|
||||
// GXS_DispOff(); // LCDC OFF
|
||||
|
||||
// reg_GX_POWCNT = 0x7fff; // 表示画面を下LCDに切り替え
|
||||
|
||||
OS_Printf("ARM9 bootMenu start.\n");
|
||||
|
||||
//---- VRAM クリア
|
||||
// GX_SetBankForLCDC(GX_VRAM_LCDC_ALL); // VRAMクリアのために一時的にLCDCにVRAMを全て割り当てる。
|
||||
// MI_CpuClearFast((void*)HW_LCDC_VRAM, HW_LCDC_VRAM_SIZE);
|
||||
// (void)GX_DisableBankForLCDC();
|
||||
|
||||
//---- OAMとパレットクリア
|
||||
// MI_CpuFillFast( (void*)HW_DB_OAM, 192, HW_DB_OAM_SIZE );
|
||||
// MI_CpuClearFast((void*)HW_DB_PLTT, HW_PLTT_SIZE);
|
||||
|
||||
//---- VRAMの割り当て
|
||||
// GX_SetBankForBG(GX_VRAM_BG_64_E); // VRAM割り当て
|
||||
// GX_SetBankForOBJ(GX_VRAM_OBJ_32_FG);
|
||||
|
||||
//---- グラフィックス表示モードにする
|
||||
// GX_SetGraphicsMode(GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D);
|
||||
|
||||
//---- BG1の設定
|
||||
// G2_SetBG1Control(GX_BG_SCRSIZE_TEXT_256x256, GX_BG_COLORMODE_16, GX_BG_SCRBASE_0xf000,
|
||||
// GX_BG_CHARBASE_0x00000, GX_BG_EXTPLTT_01 );
|
||||
// G2_SetBG1Priority(3); // BGコントロール セット
|
||||
|
||||
//---- OBJ,BG1の表示のみON
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_OBJ | GX_PLANEMASK_BG1);
|
||||
|
||||
//---- OBJは2Dマップモードで使用
|
||||
GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_2D);
|
||||
|
||||
//---- データロード
|
||||
// MI_CpuCopyFast(myChar, (void *)HW_BG_VRAM, sizeof(myChar)); // BGキャラクタ セット
|
||||
// MI_CpuCopyFast(myChar, (void *)HW_OBJ_VRAM, sizeof(myChar)); // OBJキャラクタ セット
|
||||
// MI_CpuCopyFast(myPlttData, (void *)HW_BG_PLTT, sizeof(myPlttData));// BGパレット セット
|
||||
// MI_CpuCopyFast(myPlttData, (void *)HW_OBJ_PLTT, sizeof(myPlttData));// OBJパレット セット
|
||||
|
||||
//---- Vブランク割込切り替え
|
||||
(void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr_bm);
|
||||
(void)OS_EnableIrq();
|
||||
|
||||
//---- 表示開始
|
||||
OS_WaitIrq(1, OS_IE_V_BLANK);
|
||||
// SVC_WaitVBlankIntr();
|
||||
// GXS_DispOn();
|
||||
|
||||
//---- メインループ前処理
|
||||
SEQ_MainMenu_init();
|
||||
|
||||
//================ メインループ
|
||||
while(1)
|
||||
{
|
||||
OS_WaitIrq(1, OS_IE_V_BLANK);
|
||||
// SVC_WaitVBlankIntr(); // Vブランク割込終了待ち
|
||||
ReadKeyPad();
|
||||
mf_KEYPAD_rapid();
|
||||
|
||||
(void)nowProcess(); // メインプロセス実行
|
||||
|
||||
if (PAD_DetectFold() == TRUE) { // スリープモードへの遷移
|
||||
SYSM_GoSleepMode();
|
||||
}
|
||||
|
||||
OS_PrintServer(); // ARM7からのプリントデバッグを処理する
|
||||
}
|
||||
}
|
||||
|
||||
//=============================================================================
|
||||
// 割り込みルーチン
|
||||
//=============================================================================
|
||||
|
||||
// Vブランク割り込み
|
||||
void VBlankIntr_bm(void)
|
||||
{
|
||||
//---- OAM、BG-VRAMの更新
|
||||
DC_FlushRange(oamBakS, sizeof(oamBakS));
|
||||
MI_CpuCopyFast(oamBakS,(void*)HW_DB_OAM, sizeof(oamBakS));
|
||||
DC_FlushRange(bgBakS, sizeof(bgBakS));
|
||||
MI_CpuCopyFast(bgBakS, (void*)(HW_DB_BG_VRAM+0xf000), sizeof(bgBakS));
|
||||
//---- 割り込みチェックフラグ
|
||||
OS_SetIrqCheckFlag(OS_IE_V_BLANK);
|
||||
}
|
||||
@ -1,141 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: langSelect.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 "misc.h"
|
||||
#include "DS_Setting.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
#define CANCEL_BUTTON_LT_X 2
|
||||
#define CANCEL_BUTTON_LT_Y 21
|
||||
#define CANCEL_BUTTON_RB_X (CANCEL_BUTTON_LT_X+8)
|
||||
#define CANCEL_BUTTON_RB_Y (CANCEL_BUTTON_LT_Y+2)
|
||||
|
||||
// extern data------------------------------------------
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
void SEQ_LangSelect_init(void);
|
||||
int SEQ_LangSelect(void);
|
||||
|
||||
// global variable -------------------------------------
|
||||
|
||||
// static variable -------------------------------------
|
||||
static NvLangCode langCode; // 言語コード
|
||||
|
||||
// const data -----------------------------------------
|
||||
static const u8 *const str_language[] ATTRIBUTE_ALIGN(2) = {
|
||||
(const u8 *)"にほんご ",
|
||||
(const u8 *)"English ",
|
||||
(const u8 *)"Francais",
|
||||
(const u8 *)"Deutsch ",
|
||||
(const u8 *)"Italiano",
|
||||
(const u8 *)"Espanol ",
|
||||
};
|
||||
|
||||
static const MenuComponent langSel = {
|
||||
(u16)LANG_CODE_MAX,
|
||||
10,
|
||||
5,
|
||||
0,
|
||||
2,
|
||||
8,
|
||||
WHITE,
|
||||
HIGHLIGHT_Y,
|
||||
(const u8 **)&str_language,
|
||||
};
|
||||
|
||||
|
||||
//======================================================
|
||||
// function's description
|
||||
//======================================================
|
||||
|
||||
// 言語設定の初期化
|
||||
void SEQ_LangSelect_init(void)
|
||||
{
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_NONE);
|
||||
|
||||
MI_CpuClearFast(bgBakS, sizeof(bgBakS));
|
||||
SVC_CpuClearFast(0xc0, oamBakS, sizeof(oamBakS));
|
||||
|
||||
ClearAllStringSJIS();
|
||||
|
||||
(void)DrawStringSJIS( 1, 0, YELLOW, (const u8 *)"LANGUAGE SELECT");
|
||||
(void)DrawStringSJIS( CANCEL_BUTTON_LT_X, CANCEL_BUTTON_LT_Y,HIGHLIGHT_C, (const u8 *)" CANCEL ");
|
||||
if( initialSet ) {
|
||||
(void)DrawStringSJIS( 8, 18, RED, (const u8 *)"Select language.");
|
||||
}
|
||||
|
||||
if((GetSYSMWork()->ncd_invalid) || (GetNCDWork()->option.language >= LANG_CODE_MAX)) {
|
||||
langCode = LANG_ENGLISH;
|
||||
}else {
|
||||
langCode = (NvLangCode)GetNCDWork()->option.language;
|
||||
}
|
||||
|
||||
DrawMenu((u16)langCode, &langSel);
|
||||
SVC_CpuClear(0x0000,&tpd, sizeof(TpWork),16);
|
||||
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_OBJ | GX_PLANEMASK_BG1);
|
||||
}
|
||||
|
||||
|
||||
// 言語選択
|
||||
int SEQ_LangSelect(void)
|
||||
{
|
||||
BOOL tp_select,tp_cancel = FALSE;
|
||||
|
||||
ReadTpData(); // タッチパネル入力の取得
|
||||
|
||||
//--------------------------------------
|
||||
// キー入力処理
|
||||
//--------------------------------------
|
||||
if(pad.trg & PAD_KEY_DOWN){ // カーソルの移動
|
||||
if(++langCode == LANG_CODE_MAX) langCode = (NvLangCode)0;
|
||||
}
|
||||
if(pad.trg & PAD_KEY_UP){
|
||||
if(--langCode < 0) langCode = (NvLangCode)(LANG_CODE_MAX-1);
|
||||
}
|
||||
tp_select = SelectMenuByTp((u16 *)&langCode, &langSel);
|
||||
DrawMenu((u16)langCode, &langSel);
|
||||
|
||||
// [CANCEL]ボタン押下チェック
|
||||
if(tpd.disp.touch) {
|
||||
tp_cancel = InRangeTp(CANCEL_BUTTON_LT_X*8, CANCEL_BUTTON_LT_Y*8-4,
|
||||
CANCEL_BUTTON_RB_X*8, CANCEL_BUTTON_RB_Y*8-4, &tpd.disp);
|
||||
}
|
||||
|
||||
if((pad.trg & PAD_BUTTON_A) || (tp_select)) { // メニュー項目への分岐
|
||||
GetSYSMWork()->ncd_invalid = 0;
|
||||
GetNCDWork()->option.input_language = 1; // 言語入力フラグを立てる
|
||||
GetNCDWork()->option.language = langCode;
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// NVRAMへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)NVRAMm_WriteNitroConfigData (GetNCDWork());
|
||||
SEQ_MainMenu_init();
|
||||
return 0;
|
||||
}else if((pad.trg & PAD_BUTTON_B) || (tp_cancel)) {
|
||||
SEQ_MainMenu_init();
|
||||
return 0;
|
||||
}
|
||||
|
||||
ReadTpData();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -1,553 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: rtcSet.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 "misc.h"
|
||||
#include "DS_Setting.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
|
||||
//#define __RTC_MINUTE_OFFSET // この定義が有効な場合はrtcOffsetは分オフセットで算出されます。また、無効な場合は秒オフセットとなります。
|
||||
|
||||
// RETURNボタンLCD領域
|
||||
#define RETURN_BUTTON_LT_X 2
|
||||
#define RETURN_BUTTON_LT_Y 21
|
||||
#define RETURN_BUTTON_RB_X (RETURN_BUTTON_LT_X + 8)
|
||||
#define RETURN_BUTTON_RB_Y (RETURN_BUTTON_LT_Y + 2)
|
||||
// 日付データLCD領域
|
||||
#define DATE_LT_X 5
|
||||
#define DATE_LT_Y 10
|
||||
// 時刻データLCD領域
|
||||
#define TIME_LT_X (DATE_LT_X + 14)
|
||||
#define TIME_LT_Y DATE_LT_Y
|
||||
|
||||
// RTC設定メニュー要素
|
||||
#define RTC_MENU_ELEM_NUM 1
|
||||
|
||||
// 文字入力タッチパネル用カウンタ
|
||||
#define S_UPDOWN_COUNT_MAX 16
|
||||
// 数値入力タッチパネル用カウンタ
|
||||
#define D_DOWN_COUNT_MAX -50
|
||||
#define D_UP_COUNT_MAX 50
|
||||
|
||||
|
||||
// 日付時刻入力シーケンス用ワーク
|
||||
typedef struct DateTimeParam {
|
||||
int seq; // シーケンス番号
|
||||
int *tgtp; // 入力対象の変数へのポインタ
|
||||
RTCDate Date;
|
||||
RTCTime Time;
|
||||
}DateTimeParam;
|
||||
|
||||
|
||||
// RTC設定シーケンス用ワーク
|
||||
typedef struct SetRtcWork {
|
||||
int csr; // カーソル位置
|
||||
s64 rtcOffset[2]; // RTCオフセット値([0]:設定変更前の値、[1]:変更後の値)
|
||||
DateTimeParam dtp; // 日付時刻入力シーケンス用ワーク
|
||||
InputNumParam inp; // 数値入力インターフェース用ワーク
|
||||
}SetRtcWork;
|
||||
|
||||
// extern data------------------------------------------
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
void SEQ_RtcSet_init(void);
|
||||
int SEQ_RtcSet(void);
|
||||
RTCWeek CalcWeekFromDate( u32 year, u32 month, u32 day );
|
||||
void InputDecimal(int *tgtp, InputNumParam *inpp);
|
||||
|
||||
static void SEQ_InputRtcDateTime_init(int start);
|
||||
static int SEQ_InputRtcDateTime(void);
|
||||
static void TransmitRtcData(DateTimeParam *dtpp, RtcDateTime *rtcp);
|
||||
static void SelectString( int *tgtp, const u8 **const strpp, InputNumParam *inpp);
|
||||
static void BcdToHex(int *bcdp);
|
||||
static void HexToBcd(int *hexp);
|
||||
static BOOL CheckLeapYear( u32 year );
|
||||
|
||||
// global variable -------------------------------------
|
||||
|
||||
// static variable -------------------------------------
|
||||
SetRtcWork *pRtcWork; // RTC設定用ワーク
|
||||
|
||||
// const data -----------------------------------------
|
||||
|
||||
//======================================================
|
||||
// 日付&時刻設定
|
||||
//======================================================
|
||||
|
||||
// RTC設定シーケンスの初期化
|
||||
void SEQ_RtcSet_init(void)
|
||||
{
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_NONE);
|
||||
|
||||
MI_CpuClearFast(bgBakS, sizeof(bgBakS));
|
||||
SVC_CpuClearFast(0xc0, oamBakS, sizeof(oamBakS));
|
||||
|
||||
ClearAllStringSJIS();
|
||||
|
||||
(void)DrawStringSJIS( 1, 0, YELLOW, (const u8 *)"DATE & TIME SET");
|
||||
(void)DrawStringSJIS( DATE_LT_X + 3, DATE_LT_Y, WHITE, (const u8 *)"/ / [ ] : :");
|
||||
(void)DrawStringSJIS( RETURN_BUTTON_LT_X, RETURN_BUTTON_LT_Y, HIGHLIGHT_C, (const u8 *)" RETURN ");
|
||||
if( initialSet ) {
|
||||
if( GetSYSMWork()->rtcStatus & 0x01) {
|
||||
(void)DrawStringSJIS( 8, 18, RED, (const u8 *)"RTC reset is detected!");
|
||||
}else {
|
||||
(void)DrawStringSJIS( 8, 18, RED, (const u8 *)"Set RTC.");
|
||||
}
|
||||
}
|
||||
|
||||
pRtcWork=OS_Alloc(sizeof(SetRtcWork)); // RTC設定用ワークの確保
|
||||
#ifdef __SYSM_DEBUG
|
||||
if(pRtcWork==NULL) OS_Panic("ARM9- Fail to allocate memory...\n");
|
||||
#endif /* __SYSM_DEBUG */
|
||||
OS_Printf("Alloc :SetRtcWork\n");
|
||||
SVC_CpuClear(0x0000, pRtcWork, sizeof(SetRtcWork), 16);
|
||||
|
||||
SVC_CpuClear(0x0000, &tpd, sizeof(TpWork), 16);
|
||||
|
||||
InitGetAndDrawRtcData( DATE_LT_X, DATE_LT_Y, TIME_LT_X, TIME_LT_Y); // RTCデータ表示位置の指定
|
||||
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_OBJ | GX_PLANEMASK_BG1);
|
||||
|
||||
/* if(0){
|
||||
s64 offset;
|
||||
RTCDate date;
|
||||
RTCTime time;
|
||||
|
||||
date.year = 99;
|
||||
date.month = 12;
|
||||
date.day = 31;
|
||||
time.hour = 23;
|
||||
time.minute = 59;
|
||||
time.second = 0;
|
||||
offset = IPL2i_CalcRtcSecOffset( &date, &time ); // 設定直前のRTC値のオフセットを算出
|
||||
OS_Printf( " 99/12/31 23:59:00 offset = %x\n", offset );
|
||||
date.year = 100;
|
||||
date.month = 1;
|
||||
date.day = 1;
|
||||
time.hour = 0;
|
||||
time.minute = 0;
|
||||
time.second = 0;
|
||||
offset = IPL2i_CalcRtcSecOffset( &date, &time ); // 設定直前のRTC値のオフセットを算出
|
||||
OS_Printf( "100/01/01 00:00:00 offset = %x\n", offset );
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
// RTC設定シーケンス
|
||||
int SEQ_RtcSet(void)
|
||||
{
|
||||
BOOL tp_set = FALSE;
|
||||
BOOL tp_return = FALSE;
|
||||
|
||||
ReadTpData(); // タッチパネル入力の取得
|
||||
GetAndDrawRtcData();
|
||||
|
||||
if(tpd.disp.touch) {
|
||||
tp_set = InRangeTp( DATE_LT_X*8, DATE_LT_Y*8-4, // [RTC設定]領域押下チェック
|
||||
(TIME_LT_X + 8)*8, (TIME_LT_Y+2)*8-4, &tpd.disp);
|
||||
// [RETURN]ボタン押下チェック
|
||||
tp_return = InRangeTp(RETURN_BUTTON_LT_X*8, RETURN_BUTTON_LT_Y*8-4,
|
||||
RETURN_BUTTON_RB_X*8, RETURN_BUTTON_RB_Y*8-4, &tpd.disp);
|
||||
}
|
||||
if( initialSet && !GetNCDWork()->option.input_rtc ) {
|
||||
tp_set = TRUE;
|
||||
}
|
||||
//--------------------------------------
|
||||
// キー入力処理
|
||||
//--------------------------------------
|
||||
if(pad.trg & PAD_KEY_DOWN){ // カーソルの移動
|
||||
if(++pRtcWork->csr == RTC_MENU_ELEM_NUM) pRtcWork->csr = 0;
|
||||
}
|
||||
if(pad.trg & PAD_KEY_UP){
|
||||
if(--pRtcWork->csr < 0) pRtcWork->csr = RTC_MENU_ELEM_NUM - 1;
|
||||
}
|
||||
|
||||
if((pad.trg & PAD_BUTTON_A) || (tp_set)) { // RTC設定開始
|
||||
if(pRtcWork->csr == 0) {
|
||||
SEQ_InputRtcDateTime_init(1);
|
||||
nowProcess = SEQ_InputRtcDateTime;
|
||||
}
|
||||
}else if((pad.trg & PAD_BUTTON_B) || (tp_return)) { // メニューに戻る
|
||||
OS_Free(pRtcWork); // RTC設定用ワークの解放
|
||||
pRtcWork = NULL;
|
||||
OS_Printf("Free :SetRtcWork\n");
|
||||
SEQ_MainMenu_init();
|
||||
}
|
||||
|
||||
#ifdef __SYSM_DEBUG
|
||||
if(pad.trg & PAD_BUTTON_START) {
|
||||
ClearRTC();
|
||||
OS_Printf("RTC offset in NVRAM is ZERO clear!\n");
|
||||
}
|
||||
#endif /* __SYSM_DEBUG */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//======================================================
|
||||
// 日付&時刻入力処理
|
||||
//======================================================
|
||||
|
||||
// 日付時刻入力初期化
|
||||
static void SEQ_InputRtcDateTime_init(int start)
|
||||
{
|
||||
mf_clearRect( RETURN_BUTTON_LT_X, RETURN_BUTTON_LT_Y, 2, 28);
|
||||
if(start) {
|
||||
DrawOKCancelButton();
|
||||
pRtcWork->dtp.seq = 0;
|
||||
}else {
|
||||
(void)DrawStringSJIS( RETURN_BUTTON_LT_X, RETURN_BUTTON_LT_Y, HIGHLIGHT_C, (const u8 *)" RETURN ");
|
||||
}
|
||||
SVC_CpuClear(0x0000, &tpd, sizeof(TpWork), 16);
|
||||
}
|
||||
|
||||
|
||||
// 日付時刻入力
|
||||
static int SEQ_InputRtcDateTime(void)
|
||||
{
|
||||
BOOL tp_ok = FALSE;
|
||||
BOOL tp_cancel = FALSE;
|
||||
int new_seq, x_base, y_base, abs_y_offset;
|
||||
|
||||
enum { // 日付時刻入力シーケンス番号
|
||||
SEQ_INIT=0,
|
||||
SEQ_YEAR_INIT=2, SEQ_YEAR_SET,
|
||||
SEQ_MONTH_INIT, SEQ_MONTH_SET,
|
||||
SEQ_DAY_INIT, SEQ_DAY_SET,
|
||||
SEQ_HOUR_INIT, SEQ_HOUR_SET,
|
||||
SEQ_MINUTE_INIT, SEQ_MINUTE_SET,
|
||||
SEQ_SECOND_INIT, SEQ_SECOND_SET,
|
||||
SEQ_END,
|
||||
SEQ_RETURN=64
|
||||
};
|
||||
|
||||
ReadTpData(); // タッチパネル入力の取得
|
||||
CheckOKCancelButton(&tp_ok, &tp_cancel); // [OK],[CANCEL]ボタン押下チェック
|
||||
|
||||
pRtcWork->inp.y_offset = 0;
|
||||
if(tpd.disp.touch) { // [CANCEL]ボタン押下チェック
|
||||
if((pRtcWork->dtp.seq & 0x01) && (pRtcWork->dtp.seq < SEQ_END)) { // SEQ_**_SETの時のみ有効
|
||||
new_seq = pRtcWork->dtp.seq;
|
||||
x_base = DATE_LT_X * 8;
|
||||
y_base = DATE_LT_Y * 8 + 6;
|
||||
// 入力項目移動のチェック
|
||||
if( InRangeTp( x_base, (y_base - 6), (x_base + 22 * 8), (y_base + 6), &tpd.disp) ) {
|
||||
if(tpd.disp.x < x_base + 28) {
|
||||
new_seq = SEQ_YEAR_SET;
|
||||
}else if((tpd.disp.x >= x_base + 4*8) && (tpd.disp.x < x_base + 6*8)) {
|
||||
new_seq = SEQ_MONTH_SET;
|
||||
}else if((tpd.disp.x >= x_base + 7*8) && (tpd.disp.x < x_base + 9*8)) {
|
||||
new_seq = SEQ_DAY_SET;
|
||||
}else if((tpd.disp.x >= x_base + 14*8) && (tpd.disp.x < x_base + 16*8)) {
|
||||
new_seq = SEQ_HOUR_SET;
|
||||
}else if((tpd.disp.x >= x_base + 17*8) && (tpd.disp.x < x_base + 19*8)) {
|
||||
new_seq = SEQ_MINUTE_SET;
|
||||
}else if(tpd.disp.x >= x_base + 20*8) {
|
||||
new_seq = SEQ_SECOND_SET;
|
||||
}
|
||||
}
|
||||
if(pRtcWork->dtp.seq != new_seq) {
|
||||
pRtcWork->dtp.seq = new_seq - 1;
|
||||
}else {
|
||||
// 入力値の増減
|
||||
if(InRangeTp( pRtcWork->inp.pos_x * 8, (y_base - 30), (pRtcWork->inp.pos_x + pRtcWork->inp.keta_max)*8, (y_base + 30), &tpd.disp)) {
|
||||
pRtcWork->inp.y_offset = tpd.disp.y - y_base;
|
||||
abs_y_offset = (pRtcWork->inp.y_offset >= 0) ? pRtcWork->inp.y_offset : -pRtcWork->inp.y_offset;
|
||||
if(abs_y_offset <= 6) {
|
||||
pRtcWork->inp.y_offset = 0;
|
||||
}else if(abs_y_offset <= 14){
|
||||
pRtcWork->inp.y_offset >>= 2;
|
||||
}else if(abs_y_offset <= 22){
|
||||
pRtcWork->inp.y_offset >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// タッチパネル or キー入力によって、カーソル位置が動いた時に、元の位置のカーソルを消す。
|
||||
if((pRtcWork->dtp.seq > 0) && ((pRtcWork->dtp.seq & 0x01) == 0)) { // SEQ_INITの時は実行しない
|
||||
(void)DrawDecimalSJIS( pRtcWork->inp.pos_x, pRtcWork->inp.pos_y, WHITE, pRtcWork->dtp.tgtp, (u8)pRtcWork->inp.keta_max, 4);
|
||||
}
|
||||
|
||||
// 各シーケンスの処理
|
||||
switch(pRtcWork->dtp.seq){
|
||||
|
||||
case SEQ_INIT:
|
||||
pRtcWork->dtp.Date = GetSYSMWork()->rtc[0].Date;
|
||||
pRtcWork->dtp.Time = GetSYSMWork()->rtc[0].Time;
|
||||
pRtcWork->dtp.Date.year += 2000; // yearを+2000する。
|
||||
pRtcWork->dtp.seq = SEQ_YEAR_INIT;
|
||||
// ※SEQ_INITは直通でSEQ_YEAR_INITへ
|
||||
|
||||
case SEQ_YEAR_INIT:
|
||||
pRtcWork->inp.pos_x = DATE_LT_X;
|
||||
pRtcWork->inp.pos_y = DATE_LT_Y;
|
||||
pRtcWork->inp.keta_max = 4;
|
||||
pRtcWork->inp.value_max = 2099;
|
||||
pRtcWork->inp.value_min = 2000;
|
||||
// pRtcWork->inp.value_min = 2004;
|
||||
// if(pRtcWork->dtp.Date.year < 2004) {
|
||||
// pRtcWork->dtp.Date.year = 2004;
|
||||
// }
|
||||
pRtcWork->dtp.tgtp = (int *)&pRtcWork->dtp.Date.year;
|
||||
break;
|
||||
|
||||
case SEQ_MONTH_INIT:
|
||||
pRtcWork->inp.pos_x = DATE_LT_X + 4;
|
||||
pRtcWork->inp.keta_max = 2;
|
||||
pRtcWork->inp.value_max = 12;
|
||||
pRtcWork->inp.value_min = 1;
|
||||
pRtcWork->dtp.tgtp = (int *)&pRtcWork->dtp.Date.month;
|
||||
break;
|
||||
|
||||
case SEQ_DAY_INIT:
|
||||
pRtcWork->inp.pos_x = DATE_LT_X + 7;
|
||||
pRtcWork->inp.keta_max = 2;
|
||||
pRtcWork->inp.value_max = (int)SYSM_GetDayNum( pRtcWork->dtp.Date.year, pRtcWork->dtp.Date.month );
|
||||
// 年・月をもとにその月の日数を算出する。
|
||||
pRtcWork->inp.value_min = 1;
|
||||
if(pRtcWork->dtp.Date.day > pRtcWork->inp.value_max) {
|
||||
pRtcWork->dtp.Date.day = (u32)pRtcWork->inp.value_max;
|
||||
}
|
||||
pRtcWork->dtp.tgtp = (int *)&pRtcWork->dtp.Date.day;
|
||||
break;
|
||||
|
||||
case SEQ_HOUR_INIT:
|
||||
pRtcWork->inp.pos_x = TIME_LT_X;
|
||||
pRtcWork->inp.keta_max = 2;
|
||||
pRtcWork->inp.value_max = 23;
|
||||
pRtcWork->inp.value_min = 0;
|
||||
pRtcWork->dtp.tgtp = (int *)&pRtcWork->dtp.Time.hour;
|
||||
break;
|
||||
|
||||
case SEQ_MINUTE_INIT:
|
||||
pRtcWork->inp.pos_x = TIME_LT_X + 3;
|
||||
pRtcWork->inp.keta_max = 2;
|
||||
pRtcWork->inp.value_max = 59;
|
||||
pRtcWork->inp.value_min = 0;
|
||||
pRtcWork->dtp.tgtp = (int *)&pRtcWork->dtp.Time.minute;
|
||||
break;
|
||||
|
||||
case SEQ_SECOND_INIT:
|
||||
pRtcWork->inp.pos_x = TIME_LT_X + 6;
|
||||
pRtcWork->inp.keta_max = 2;
|
||||
pRtcWork->inp.value_max = 59;
|
||||
pRtcWork->inp.value_min = 0;
|
||||
pRtcWork->dtp.tgtp = (int *)&pRtcWork->dtp.Time.second;
|
||||
break;
|
||||
|
||||
case SEQ_YEAR_SET:
|
||||
case SEQ_MONTH_SET:
|
||||
case SEQ_DAY_SET:
|
||||
case SEQ_HOUR_SET:
|
||||
case SEQ_MINUTE_SET:
|
||||
case SEQ_SECOND_SET:
|
||||
InputDecimal( pRtcWork->dtp.tgtp, &pRtcWork->inp);
|
||||
|
||||
// 年月日入力ならば、曜日を算出して表示。
|
||||
if( (pRtcWork->dtp.seq == SEQ_YEAR_SET) || (pRtcWork->dtp.seq == SEQ_MONTH_SET) || (pRtcWork->dtp.seq == SEQ_DAY_SET) ) {
|
||||
pRtcWork->dtp.Date.week = CalcWeekFromDate(pRtcWork->dtp.Date.year, pRtcWork->dtp.Date.month, pRtcWork->dtp.Date.day);
|
||||
(void)DrawStringSJIS( DATE_LT_X + 10, DATE_LT_Y, WHITE, g_strWeek[pRtcWork->dtp.Date.week]);
|
||||
}
|
||||
|
||||
// 年・月入力ならば、日数を算出して、現在の入力日が日数を超えていたら修正する。
|
||||
if( (pRtcWork->dtp.seq == SEQ_YEAR_SET) || (pRtcWork->dtp.seq == SEQ_MONTH_SET) ) {
|
||||
u32 dayNum = SYSM_GetDayNum( pRtcWork->dtp.Date.year, pRtcWork->dtp.Date.month );
|
||||
if( dayNum < pRtcWork->dtp.Date.day) {
|
||||
pRtcWork->dtp.Date.day = dayNum;
|
||||
(void)DrawDecimalSJIS( DATE_LT_X + 7, DATE_LT_Y, WHITE, &pRtcWork->dtp.Date.day, 2, 4);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_END:
|
||||
pRtcWork->dtp.Date.year -= 2000; // yearを-2000する。
|
||||
|
||||
/* // RTCへの新しい値の設定
|
||||
(void)RTC_GetDateTime(&now_dtp.Date, &now_dtp.Time); // ライト直前に現在のRTC値を取得する。
|
||||
(void)RTC_SetDateTime(&pRtcWork->dtp.Date, &pRtcWork->dtp.Time); // 新RTC設定値のセット。
|
||||
|
||||
if((GetSYSMWork()->rtc[0].Date.year == 99) && (now_dtp.Date.year == 0)) {
|
||||
now_dtp.Date.year = 100; // 設定前~設定完了の間にRTCが一周してしまったら、yearは100としてoffsetを計算する。
|
||||
}
|
||||
// RTC設定時は、今回の設定でどれだけRTC値が変化したか(秒オフセット単位)を算出してNVRAMに保存する。(とりあえず実装)
|
||||
pRtcWork->rtcOffset[0] = IPL2i_CalcRtcSecOffset( &now_dtp.Date, &now_dtp.Time ); // 現在のRTC値のオフセットを算出
|
||||
pRtcWork->rtcOffset[1] = IPL2i_CalcRtcSecOffset( &pRtcWork->dtp.Date, &pRtcWork->dtp.Time ); // 新しくセットされたRTC値のオフセットを算出
|
||||
GetNCDWork()->option.rtcOffset += pRtcWork->rtcOffset[1] - pRtcWork->rtcOffset[0];
|
||||
// 新RTC_ofs と 現在のRTC_ofs の差分の値を加算。
|
||||
*/
|
||||
|
||||
pRtcWork->dtp.Time.second = 0;
|
||||
NCD_SetRtcOffset( SYSM_CalcRtcOffsetAndSetDateTime( &pRtcWork->dtp.Date, &pRtcWork->dtp.Time ) );
|
||||
|
||||
GetSYSMWork()->rtc[0].Date = pRtcWork->dtp.Date;
|
||||
GetSYSMWork()->rtc[0].Time = pRtcWork->dtp.Time;
|
||||
GetSYSMWork()->ncd_invalid = 0;
|
||||
GetNCDWork()->option.input_rtc = 1; // RTC入力フラグを立てる。
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// NVRAMへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)NVRAMm_WriteNitroConfigData (GetNCDWork());
|
||||
|
||||
// SEQ_ENDの時はこのままリターンする。
|
||||
|
||||
case SEQ_RETURN:
|
||||
nowProcess = SEQ_RtcSet;
|
||||
SEQ_InputRtcDateTime_init(0); // 日付入力画面のクリア
|
||||
return 0;
|
||||
}
|
||||
|
||||
if(pRtcWork->dtp.seq & 0x01) { // SEQ_**_SETの時のみ有効
|
||||
if((pad.trg & PAD_BUTTON_A) || (tp_ok)) {
|
||||
pRtcWork->dtp.seq = SEQ_END; // Aボタンで決定
|
||||
}else if((pad.trg & PAD_BUTTON_B) || (tp_cancel)) { // Bボタンでキャンセル
|
||||
pRtcWork->dtp.seq = SEQ_RETURN;
|
||||
}else if(pad.trg & PAD_KEY_LEFT) {
|
||||
if(pRtcWork->dtp.seq == SEQ_YEAR_SET) pRtcWork->dtp.seq = SEQ_SECOND_INIT;
|
||||
else pRtcWork->dtp.seq -= 3;
|
||||
}else if(pad.trg & PAD_KEY_RIGHT) {
|
||||
if(pRtcWork->dtp.seq == SEQ_SECOND_SET) pRtcWork->dtp.seq = SEQ_YEAR_INIT;
|
||||
else pRtcWork->dtp.seq++;
|
||||
}
|
||||
}else { // SEQ_**_INITの時のみ有効
|
||||
pRtcWork->dtp.seq++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// うるう年の判定 (うるう年:1、通常の年:0リターン)
|
||||
BOOL CheckLeapYear( u32 year)
|
||||
{
|
||||
if((year & 0x03) == 0) { // うるう年は、「4で割り切れ かつ 100で割り切れない年」
|
||||
CP_SetDiv32_32(year, 100); // 「400で割り切れる年」
|
||||
if(CP_GetDivRemainder32() != 0) {
|
||||
return TRUE;
|
||||
}else {
|
||||
CP_SetDiv32_32(year, 400);
|
||||
if(CP_GetDivRemainder32() == 0) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
*/
|
||||
|
||||
// 日付から曜日を求める。
|
||||
RTCWeek CalcWeekFromDate( u32 year, u32 month, u32 day )
|
||||
{
|
||||
if(month == 1 || month == 2 ){
|
||||
year--;
|
||||
month += 12;
|
||||
}
|
||||
return (RTCWeek)( (year + year/4 - year/100 + year/400 + (13*month + 8)/5 + day) % 7 );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// 文字列によるパラメータ選択
|
||||
static void SelectString(int *tgtp, const u8 **const srtpp, InputNumParam *inpp)
|
||||
{
|
||||
BOOL value_up = FALSE;
|
||||
BOOL value_down = FALSE;
|
||||
|
||||
if(inpp->y_offset == 0) {
|
||||
inpp->up_count = S_UPDOWN_COUNT_MAX;
|
||||
}else {
|
||||
inpp->up_count ++;
|
||||
if(inpp->up_count > S_UPDOWN_COUNT_MAX) {
|
||||
inpp->up_count = 0;
|
||||
if(inpp->y_offset < 0) value_up = TRUE;
|
||||
else value_down = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if((pad.trg & PAD_KEY_DOWN) || (value_down)) { // 表示文字列切り替え
|
||||
if(++*tgtp>inpp->value_max) *tgtp = 0;
|
||||
}else if((pad.trg & PAD_KEY_UP) || (value_up)) {
|
||||
if(--*tgtp & 0x8000) *tgtp = inpp->value_max;
|
||||
}
|
||||
|
||||
(void)DrawStringSJIS( inpp->pos_x, inpp->pos_y, HIGHLIGHT_Y, srtpp[*tgtp]); // 現在選択している文字列を表示
|
||||
}
|
||||
*/
|
||||
|
||||
// 10進数数値入力
|
||||
void InputDecimal(int *tgtp, InputNumParam *inpp)
|
||||
{
|
||||
BOOL value_up = FALSE;
|
||||
BOOL value_down = FALSE;
|
||||
|
||||
if(inpp->y_offset == 0) {
|
||||
inpp->up_count = D_UP_COUNT_MAX;
|
||||
inpp->down_count = D_DOWN_COUNT_MAX;
|
||||
}else if(inpp->y_offset < 0) {
|
||||
inpp->down_count += inpp->y_offset;
|
||||
if(inpp->down_count < D_DOWN_COUNT_MAX) {
|
||||
inpp->down_count = 0;
|
||||
value_down = TRUE;
|
||||
}
|
||||
}else { // y_offset > 0
|
||||
inpp->up_count += inpp->y_offset;
|
||||
if(inpp->up_count > D_UP_COUNT_MAX) {
|
||||
inpp->up_count = 0;
|
||||
value_up = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// キー入力に応じて対象値を増減
|
||||
if( (value_down) || (pad.trg & PAD_KEY_UP)
|
||||
|| ((pad.cont & PAD_KEY_UP) && (pad.cont & PAD_BUTTON_R)) ) {
|
||||
if(--*tgtp < inpp->value_min) {
|
||||
*tgtp = inpp->value_max;
|
||||
}
|
||||
}else if( (value_up) || (pad.trg & PAD_KEY_DOWN)
|
||||
|| ((pad.cont & PAD_KEY_DOWN) && (pad.cont & PAD_BUTTON_R)) ) {
|
||||
if(++*tgtp > inpp->value_max) {
|
||||
*tgtp = inpp->value_min;
|
||||
}
|
||||
}
|
||||
|
||||
(void)DrawDecimalSJIS( inpp->pos_x, inpp->pos_y, HIGHLIGHT_Y, tgtp, (u8)inpp->keta_max, 4);
|
||||
// 対象値をハイライト表示
|
||||
}
|
||||
|
||||
|
||||
// RTC設定のクリア
|
||||
void ClearRTC( void )
|
||||
{
|
||||
SVC_CpuClear(0x0000, &GetSYSMWork()->rtc[0].Time, sizeof(RTCTime), 16);
|
||||
GetSYSMWork()->rtc[0].Date.year = 0;
|
||||
GetSYSMWork()->rtc[0].Date.month = 1;
|
||||
GetSYSMWork()->rtc[0].Date.day = 1;
|
||||
(void)RTC_SetDateTime( &GetSYSMWork()->rtc[0].Date, &GetSYSMWork()->rtc[0].Time);
|
||||
GetNCDWork()->option.input_rtc = 0;
|
||||
GetNCDWork()->option.rtcOffset = 0;
|
||||
NCD_SetRtcLastSetYear( 0 );
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// NVRAMへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)NVRAMm_WriteNitroConfigData (GetNCDWork());
|
||||
}
|
||||
|
||||
@ -1,308 +0,0 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: mainMenu.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 "main.h"
|
||||
#include "DS_Setting.h"
|
||||
#include "spi.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
// キャンセルボタンLCD領域
|
||||
#define CANCEL_BUTTON_LT_X 12
|
||||
#define CANCEL_BUTTON_LT_Y 21
|
||||
#define CANCEL_BUTTON_RB_X (CANCEL_BUTTON_LT_X + 8)
|
||||
#define CANCEL_BUTTON_RB_Y (CANCEL_BUTTON_LT_Y + 2)
|
||||
// OKボタンLCD領域
|
||||
#define OK_BUTTON_LT_X 22
|
||||
#define OK_BUTTON_LT_Y 21
|
||||
#define OK_BUTTON_RB_X (OK_BUTTON_LT_X + 8)
|
||||
#define OK_BUTTON_RB_Y (OK_BUTTON_LT_Y + 2)
|
||||
|
||||
|
||||
#define MAIN_MENU_ELEM_NUM 6 // メインメニューの項目数
|
||||
|
||||
// extern data------------------------------------------
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
void SEQ_MainMenu_init(void);
|
||||
int SEQ_MainMenu(void);
|
||||
BOOL SelectMenuByTp(u16 *nowCsr, const MenuComponent *menu);
|
||||
//BOOL InRangeTp(u16 lt_x,u16 lt_y,u16 rb_x,u16 rb_y, TPData *tgt);
|
||||
BOOL InRangeTp(int lt_x, int lt_y, int rb_x, int rb_y, TPData *tgt);
|
||||
|
||||
static void SEQ_SettingEnd_init( void );
|
||||
static int SEQ_SettingEnd( void );
|
||||
|
||||
// global variable -------------------------------------
|
||||
u16 csrMenu = 0; // メニューのカーソル位置(bm_main.cで参照してるので、グローバル)
|
||||
BOOL initialSet = FALSE;
|
||||
|
||||
// static variable -------------------------------------
|
||||
static const u8 *str_MainMenu[MAIN_MENU_ELEM_NUM]; // メインメニュー用文字テーブルへのポインタリスト
|
||||
|
||||
// const data -----------------------------------------
|
||||
|
||||
|
||||
//===============================================
|
||||
// mainMenu.c
|
||||
//===============================================
|
||||
const u8 *const str_MeinMenuElemTbl[ MAIN_MENU_ELEM_NUM ][ LANG_CODE_MAX ] = {
|
||||
{
|
||||
(const u8 *)"ユーザー じょうほう ",
|
||||
(const u8 *)"USER INFORMATION ",
|
||||
(const u8 *)"USER INFORMATION(F)",
|
||||
(const u8 *)"USER INFORMATION(G)",
|
||||
(const u8 *)"USER INFORMATION(I)",
|
||||
(const u8 *)"USER INFORMATION(S)",
|
||||
},
|
||||
{
|
||||
(const u8 *)"ひづけ & じこく ",
|
||||
(const u8 *)"DATE & TIME ",
|
||||
(const u8 *)"DATE & TIME(F) ",
|
||||
(const u8 *)"DATE & TIME(G) ",
|
||||
(const u8 *)"DATE & TIME(I) ",
|
||||
(const u8 *)"DATE & TIME(S) ",
|
||||
},
|
||||
{
|
||||
(const u8 *)"げんご ",
|
||||
(const u8 *)"LANGUAGE ",
|
||||
(const u8 *)"LANGUAGE(F) ",
|
||||
(const u8 *)"LANGUAGE(G) ",
|
||||
(const u8 *)"LANGUAGE(I) ",
|
||||
(const u8 *)"LANGUAGE(S) ",
|
||||
},
|
||||
{
|
||||
(const u8 *)"AGB モード ",
|
||||
(const u8 *)"AGB MODE ",
|
||||
(const u8 *)"AGB MODE(F) ",
|
||||
(const u8 *)"AGB MODE(G) ",
|
||||
(const u8 *)"AGB MODE(I) ",
|
||||
(const u8 *)"AGB MODE(S) ",
|
||||
},
|
||||
{
|
||||
(const u8 *)"タッチパネルほせい ",
|
||||
(const u8 *)"TOUCH PANEL ",
|
||||
(const u8 *)"TOUCH PANEL(F) ",
|
||||
(const u8 *)"TOUCH PANEL(G) ",
|
||||
(const u8 *)"TOUCH PANEL(I) ",
|
||||
(const u8 *)"TOUCH PANEL(S) ",
|
||||
},
|
||||
{
|
||||
(const u8 *)"きどうモード ",
|
||||
(const u8 *)"AUTO BOOT ",
|
||||
(const u8 *)"AUTO BOOT(F) ",
|
||||
(const u8 *)"AUTO BOOT(G) ",
|
||||
(const u8 *)"AUTO BOOT(I) ",
|
||||
(const u8 *)"AUTO BOOT(S) ",
|
||||
},
|
||||
};
|
||||
|
||||
const MenuComponent mainMenu = {
|
||||
MAIN_MENU_ELEM_NUM,
|
||||
2,
|
||||
6,
|
||||
0,
|
||||
2,
|
||||
17,
|
||||
WHITE,
|
||||
HIGHLIGHT_Y,
|
||||
(const u8 **)&str_MainMenu,
|
||||
};
|
||||
|
||||
//======================================================
|
||||
// メインメニュー
|
||||
//======================================================
|
||||
|
||||
// メインメニューの初期化
|
||||
void SEQ_MainMenu_init(void)
|
||||
{
|
||||
#ifdef __DIRECT_BOOT_BMENU_ENABLE
|
||||
// 各種設定が未設定時のダイレクト起動。
|
||||
{
|
||||
if(GetNCDWork()->option.input_language == 0) { // 言語設定がまだ。
|
||||
initialSet = TRUE;
|
||||
csrMenu = 3;
|
||||
SEQ_LangSelect_init();
|
||||
nowProcess = SEQ_LangSelect;
|
||||
return;
|
||||
}else if(GetNCDWork()->option.input_tp == 0) { // TPキャリブレーションがまだ。
|
||||
initialSet = TRUE;
|
||||
csrMenu = 5;
|
||||
SEQ_TP_Calibration_init();
|
||||
nowProcess = SEQ_TP_Calibration;
|
||||
return ;
|
||||
}else if(GetNCDWork()->option.input_rtc == 0) { // RTC設定がまだ。
|
||||
ClearRTC();
|
||||
initialSet = TRUE;
|
||||
csrMenu = 2;
|
||||
SEQ_RtcSet_init();
|
||||
nowProcess = SEQ_RtcSet;
|
||||
return;
|
||||
}else if( (GetNCDWork()->option.input_nickname == 0) // ニックネームまたは好きな色入力がまだ。
|
||||
|| (GetNCDWork()->option.input_favoriteColor == 0) ) {
|
||||
initialSet = TRUE;
|
||||
csrMenu = 1;
|
||||
SEQ_OwnerInfo_init();
|
||||
nowProcess = SEQ_OwnerInfo;
|
||||
return;
|
||||
}
|
||||
|
||||
if( initialSet ) {
|
||||
SEQ_SettingEnd_init();
|
||||
nowProcess = SEQ_SettingEnd;
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif /* __DIRECT_BOOT_BMENU_ENABLE */
|
||||
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_NONE);
|
||||
|
||||
SVC_CpuClearFast(0x0000, bgBakS, sizeof(bgBakS));
|
||||
SVC_CpuClearFast(0xc0, oamBakS, sizeof(oamBakS));
|
||||
|
||||
ClearAllStringSJIS();
|
||||
|
||||
#ifdef __NCD_CLEAR_ENABLE
|
||||
(void)DrawStringSJIS( 18, 21, LIGHTGREEN, (const u8 *)"[START]:NCD clear.");
|
||||
#endif /* __NCD_CLEAR_ENABLE */
|
||||
|
||||
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
|
||||
{
|
||||
int i;
|
||||
NvLangCode langCode = LANG_ENGLISH;
|
||||
if(GetSYSMWork()->ncd_invalid == 0) {
|
||||
langCode = (NvLangCode)GetNCDWork()->option.language;
|
||||
}
|
||||
for(i = 0; i < MAIN_MENU_ELEM_NUM; i++) {
|
||||
str_MainMenu[i] = str_MeinMenuElemTbl[i][langCode];
|
||||
}
|
||||
}
|
||||
DrawMenu(csrMenu, &mainMenu);
|
||||
|
||||
SVC_CpuClear(0x0000,&tpd,sizeof(TpWork),16);
|
||||
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_BG1);
|
||||
|
||||
nowProcess = SEQ_MainMenu;
|
||||
}
|
||||
|
||||
|
||||
// メインメニュー
|
||||
int SEQ_MainMenu(void)
|
||||
{
|
||||
BOOL tp_select;
|
||||
|
||||
ReadTpData(); // タッチパネル入力の取得
|
||||
|
||||
//--------------------------------------
|
||||
// キー入力処理
|
||||
//--------------------------------------
|
||||
if(pad.trg & PAD_KEY_DOWN){ // カーソルの移動
|
||||
if(++csrMenu == MAIN_MENU_ELEM_NUM) csrMenu=0;
|
||||
}
|
||||
if(pad.trg & PAD_KEY_UP){
|
||||
if(--csrMenu & 0x80) csrMenu=MAIN_MENU_ELEM_NUM-1;
|
||||
}
|
||||
tp_select=SelectMenuByTp(&csrMenu, &mainMenu);
|
||||
DrawMenu(csrMenu, &mainMenu);
|
||||
|
||||
if((pad.trg & PAD_BUTTON_A)||(tp_select)) { // メニュー項目への分岐
|
||||
switch(csrMenu) {
|
||||
case 0:
|
||||
SEQ_OwnerInfo_init();
|
||||
nowProcess=SEQ_OwnerInfo;
|
||||
break;
|
||||
case 1:
|
||||
SEQ_RtcSet_init();
|
||||
nowProcess=SEQ_RtcSet;
|
||||
break;
|
||||
case 2:
|
||||
SEQ_LangSelect_init();
|
||||
nowProcess=SEQ_LangSelect;
|
||||
break;
|
||||
case 3:
|
||||
SEQ_AgbLcdSelect_init();
|
||||
nowProcess=SEQ_AgbLcdSelect;
|
||||
break;
|
||||
case 4:
|
||||
SEQ_TP_Calibration_init();
|
||||
nowProcess=SEQ_TP_Calibration;
|
||||
break;
|
||||
case 5:
|
||||
SEQ_AutoBootSelect_init();
|
||||
nowProcess=SEQ_AutoBootSelect;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __NCD_CLEAR_ENABLE
|
||||
if(pad.trg & PAD_BUTTON_START) {
|
||||
SVC_CpuClearFast(0x0000, GetNCDWork(), sizeof(NitroConfigData));
|
||||
(void)SPI_NvramWriteEnable();
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramPageErase(0x3fe00);
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramWriteEnable();
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramPageErase(0x3ff00);
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramWriteDisable();
|
||||
OS_Printf("NitroConfigData zero clear!!\n");
|
||||
}
|
||||
#endif /* __NCD_CLEAR_ENABLE */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// OK / CANCELボタンの描画
|
||||
void DrawOKCancelButton(void)
|
||||
{
|
||||
(void)DrawStringSJIS( CANCEL_BUTTON_LT_X, CANCEL_BUTTON_LT_Y,HIGHLIGHT_C, (const u8 *)" CANCEL ");
|
||||
(void)DrawStringSJIS( OK_BUTTON_LT_X, OK_BUTTON_LT_Y, HIGHLIGHT_C, (const u8 *)" OK ");
|
||||
}
|
||||
|
||||
|
||||
// OK or CANCELボタン押下チェック
|
||||
void CheckOKCancelButton(BOOL *tp_ok, BOOL *tp_cancel)
|
||||
{
|
||||
*tp_cancel = InRangeTp(CANCEL_BUTTON_LT_X*8, CANCEL_BUTTON_LT_Y*8-4,
|
||||
CANCEL_BUTTON_RB_X*8, CANCEL_BUTTON_RB_Y*8-4, &tpd.disp);
|
||||
*tp_ok = InRangeTp(OK_BUTTON_LT_X*8, OK_BUTTON_LT_Y*8-4,
|
||||
OK_BUTTON_RB_X*8, OK_BUTTON_RB_Y*8-4, &tpd.disp);
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------
|
||||
//
|
||||
// 設定終了
|
||||
//
|
||||
//---------------------------------------------------------
|
||||
|
||||
static void SEQ_SettingEnd_init( void )
|
||||
{
|
||||
ClearAllStringSJIS();
|
||||
(void)DrawStringSJIS( 6, 10, WHITE, (const u8 *)" Initial setting completed.");
|
||||
(void)DrawStringSJIS( 6, 12, WHITE, (const u8 *)" Please reboot.");
|
||||
}
|
||||
|
||||
|
||||
static int SEQ_SettingEnd( void )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -23,40 +23,15 @@ SUBDIRS =
|
||||
TARGET_PLATFORM = TWL
|
||||
TWL_ARCHGEN = LIMITED
|
||||
|
||||
TARGET_BIN = main.srl
|
||||
TARGET_BIN = dlplay.srl
|
||||
|
||||
LCFILE_SPEC = ARM9-TS.lsf
|
||||
ROM_SPEC = main.rsf
|
||||
|
||||
LOGO_DIR = Logo
|
||||
SETTING_DIR = DS_Setting
|
||||
MBOOT_DIR = DS_DownloadPlay
|
||||
CHAT_DIR = DS_Chat
|
||||
|
||||
FONT_DIR = font
|
||||
FONTS = f12han.dat
|
||||
FONT_DATAS = $(addprefix $(FONT_DIR)/, $(FONTS))
|
||||
FONT_OBJS = $(FONT_DATAS:.dat=.o)
|
||||
|
||||
SRCS_IPL2 = main.c mainFunc.c launcher.c $(SETTING_DIR)/font.c $(SETTING_DIR)/myChar.c
|
||||
SRCS_LOGO = logoDemo.c logoData.c
|
||||
SRCS_SETTING = DS_Setting.c settingMenu.c unicode.c misc.c \
|
||||
rtcSet.c langSelect.c tpCalib.c ownerInfo.c AgbLcdSel.c autoBoot.c
|
||||
SRCS_MBOOT = DS_DownloadPlay.c
|
||||
SRCS_DSCHAT = DS_Chat.c
|
||||
SRCS = $(SRCS_IPL2) $(addprefix $(LOGO_DIR)/, $(SRCS_LOGO))
|
||||
SRCS_OVERLAY = $(addprefix $(SETTING_DIR)/,$(SRCS_SETTING)) \
|
||||
$(addprefix $(MBOOT_DIR)/,$(SRCS_MBOOT)) \
|
||||
$(addprefix $(CHAT_DIR)/,$(SRCS_DSCHAT)) \
|
||||
|
||||
OBJS_OVERLAY += $(FONT_OBJS)
|
||||
SRCS = main.c mainFunc.c DS_DownloadPlay.c
|
||||
|
||||
LINCLUDES = $(TWLSDK_ROOT)/build/libraries/spi/arm9/include \
|
||||
$(TWLSDK_ROOT)/build/libraries/mb/common/include \
|
||||
$(SRCDIR)/$(LOGO_DIR) \
|
||||
$(SRCDIR)/$(SETTING_DIR) \
|
||||
$(SRCDIR)/$(CHAT_DIR) \
|
||||
$(SRCDIR)/$(MBOOT_DIR) \
|
||||
|
||||
LLIBRARY_DIRS =
|
||||
LLIBRARIES =
|
||||
@ -66,16 +41,11 @@ include $(TWLIPL_ROOT)/build/buildtools/commondefs.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build : $(FONT_OBJS) $(TARGETS)
|
||||
do-build : $(TARGETS)
|
||||
|
||||
|
||||
include $(TWLIPL_ROOT)/build/buildtools/modulerules.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
CW_ROOT := $(subst $(SPACE),\ ,$(subst \,/,$(CWFOLDER_NITRO)))
|
||||
|
||||
$(FONT_DIR)/%.o : $(FONT_DIR)/%.dat
|
||||
$(CW_ROOT)/ARM_Tools/Command_Line_Tools/BinToElf.exe $< -aligndata 4 -endian little -output $@
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
30
build/systemMenu_RED/DS_DownloadPlay/Makefile
Normal file
30
build/systemMenu_RED/DS_DownloadPlay/Makefile
Normal file
@ -0,0 +1,30 @@
|
||||
#! 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:: 2007-10-03#$
|
||||
# $Rev: 1319 $
|
||||
# $Author: kitase_hirotake $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
54
build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lsf
Normal file
54
build/systemMenu_RED/Launcher/ARM9/ARM9-TS.lsf
Normal file
@ -0,0 +1,54 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - include
|
||||
# File: ARM9-BB.lsf
|
||||
#
|
||||
# Copyright 2007 Nintendo. All rights reserved.
|
||||
#
|
||||
# These coded insructions, statements, and computer programs contain
|
||||
# proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
# Company Ltd., and are protected by Federal copyright law. They may
|
||||
# not be disclosed to third parties or copied or duplicated in any form,
|
||||
# in whole or in part, without the prior written consent of Nintendo.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev$
|
||||
# $Author$
|
||||
#----------------------------------------------------------------------------
|
||||
#
|
||||
# TWL LCF SPEC FILE
|
||||
#
|
||||
|
||||
Static $(TARGET_NAME)
|
||||
{
|
||||
Address 0x02800000
|
||||
Object $(OBJS_STATIC)
|
||||
Library $(LLIBS) $(GLIBS) $(CW_LIBS)
|
||||
}
|
||||
|
||||
|
||||
Autoload ITCM
|
||||
{
|
||||
Address 0x01ff8000
|
||||
Object * (.itcm)
|
||||
Object $(OBJS_AUTOLOAD) (.text)
|
||||
Object $(OBJS_AUTOLOAD) (.rodata)
|
||||
}
|
||||
|
||||
Autoload DTCM
|
||||
{
|
||||
Address $(ADDRESS_DTCM)
|
||||
Object * (.dtcm)
|
||||
Object $(OBJS_AUTOLOAD) (.data)
|
||||
Object $(OBJS_AUTOLOAD) (.sdata)
|
||||
Object $(OBJS_AUTOLOAD) (.bss)
|
||||
Object $(OBJS_AUTOLOAD) (.sbss)
|
||||
}
|
||||
|
||||
Ltdautoload LTDMAIN
|
||||
{
|
||||
# NITRO/TWL 共有のオーバーレイが在る場合は、さらにその後ろに配置する必要があります。
|
||||
After $(TARGET_NAME)
|
||||
Object * (.ltdmain)
|
||||
Object $(OBJS_LTDAUTOLOAD)
|
||||
Library $(LLIBS_EX) $(GLIBS_EX)
|
||||
}
|
||||
53
build/systemMenu_RED/Launcher/ARM9/Makefile
Normal file
53
build/systemMenu_RED/Launcher/ARM9/Makefile
Normal file
@ -0,0 +1,53 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - demos - simpleShoot-1
|
||||
# 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_PLATFORM = TWL
|
||||
TWL_ARCHGEN = LIMITED
|
||||
|
||||
TARGET_BIN = main.srl
|
||||
|
||||
LCFILE_SPEC = ARM9-TS.lsf
|
||||
ROM_SPEC = main.rsf
|
||||
|
||||
LOGO_DIR = Logo
|
||||
|
||||
SRCS_LOGO = logoDemo.c logoData.c
|
||||
SRCS = main.c launcher.c misc.c $(addprefix $(LOGO_DIR)/, $(SRCS_LOGO))
|
||||
#SRCS_OVERLAY =
|
||||
|
||||
LINCLUDES = $(SRCDIR)/$(LOGO_DIR)
|
||||
#LLIBRARY_DIRS =
|
||||
#LLIBRARIES =
|
||||
#LDEPENDS_NEF =
|
||||
|
||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build : $(FONT_OBJS) $(TARGETS)
|
||||
|
||||
|
||||
include $(TWLIPL_ROOT)/build/buildtools/modulerules.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
#===== End of Makefile =====
|
||||
147
build/systemMenu_RED/Launcher/ARM9/main.rsf
Normal file
147
build/systemMenu_RED/Launcher/ARM9/main.rsf
Normal file
@ -0,0 +1,147 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - include
|
||||
# File: ROM-BB.rsf
|
||||
#
|
||||
# Copyright 2007 Nintendo. All rights reserved.
|
||||
#
|
||||
# These coded insructions, statements, and computer programs contain
|
||||
# proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
# Company Ltd., and are protected by Federal copyright law. They may
|
||||
# not be disclosed to third parties or copied or duplicated in any form,
|
||||
# in whole or in part, without the prior written consent of Nintendo.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev$
|
||||
# $Author$
|
||||
#----------------------------------------------------------------------------
|
||||
#
|
||||
# TWL ROM SPEC FILE
|
||||
#
|
||||
|
||||
Arm9
|
||||
{
|
||||
Static "$(MAKEROM_ARM9:r).FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayDefs "$(MAKEROM_ARM9:r)_defs.FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayTable "$(MAKEROM_ARM9:r)_table.FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
Elf "$(MAKEROM_ARM9:r).tef"
|
||||
}
|
||||
|
||||
Arm7
|
||||
{
|
||||
Static "$(MAKEROM_ARM7_BASE:r).FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
Elf "$(MAKEROM_ARM7_BASE:r).tef"
|
||||
}
|
||||
|
||||
Arm9.Ltd
|
||||
{
|
||||
Static "$(MAKEROM_ARM9:r).LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayDefs "$(MAKEROM_ARM9:r)_defs.LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayTable "$(MAKEROM_ARM9:r)_table.LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
}
|
||||
|
||||
Arm7.Ltd
|
||||
{
|
||||
Static "$(MAKEROM_ARM7_BASE:r).LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
}
|
||||
|
||||
Property
|
||||
{
|
||||
###
|
||||
### Settings for FinalROM
|
||||
###
|
||||
#### BEGIN
|
||||
#
|
||||
# TITLE NAME: Your product name within 12bytes
|
||||
#
|
||||
#TitleName "YourAppName"
|
||||
|
||||
#
|
||||
# MAKER CODE: Your company ID# in 2 ascii words
|
||||
# issued by NINTENDO
|
||||
#
|
||||
#MakerCode "00"
|
||||
|
||||
#
|
||||
# REMASTER VERSION: Mastering version
|
||||
#
|
||||
#RomVersion 0
|
||||
|
||||
#
|
||||
# ROM SPEED TYPE: [MROM/1TROM/UNDEFINED]
|
||||
#
|
||||
RomSpeedType $(MAKEROM_ROMSPEED)
|
||||
|
||||
#
|
||||
# ROM SIZE: in bit [64M/128M/256M/512M/1G/2G]
|
||||
#
|
||||
#RomSize 128M
|
||||
#RomSize 256M
|
||||
|
||||
#
|
||||
# ROM PADDING: TRUE if finalrom
|
||||
#
|
||||
#RomFootPadding TRUE
|
||||
|
||||
#
|
||||
# ROM HEADER TEMPLATE: Provided to every product by NINTENDO
|
||||
#
|
||||
#RomHeaderTemplate ./etc/rom_header.template.sbin
|
||||
|
||||
#
|
||||
# BANNER FILE: generated from Banner Spec File
|
||||
#
|
||||
#BannerFile ./etc/myGameBanner.bnr
|
||||
BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr
|
||||
|
||||
###
|
||||
### Setting for TWL
|
||||
###
|
||||
#
|
||||
# BANNER FILE:
|
||||
#
|
||||
BannerTWLFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr
|
||||
|
||||
#
|
||||
# Boot allowed Media: [GameCard/NAND/SDCard/DownloadPlay]
|
||||
# possible to choose one or more.
|
||||
#
|
||||
BootMedia GameCard NAND SDCard DownloadPlay
|
||||
|
||||
#
|
||||
# Certification FILE:
|
||||
#
|
||||
Certificate $(TWLSDK_ROOT)/include/twl/specfiles/default_sgn.sbin
|
||||
|
||||
#
|
||||
# Digest parameters:
|
||||
#
|
||||
DigestParam 1024 32
|
||||
|
||||
#
|
||||
# WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD]
|
||||
# don't have to edit
|
||||
#
|
||||
WramMapping $(MAKEROM_WRAM_MAPPING)
|
||||
|
||||
#
|
||||
# Codec mode:
|
||||
# don't have to edit
|
||||
#
|
||||
CodecMode $(MAKEROM_CODEC_MODE)
|
||||
|
||||
###
|
||||
#### END
|
||||
}
|
||||
|
||||
RomSpec
|
||||
{
|
||||
Offset 0x00000000
|
||||
Segment ALL
|
||||
HostRoot ../../data
|
||||
Root /data
|
||||
File NTR_IPL_font_m.NFTR
|
||||
}
|
||||
@ -16,7 +16,7 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <twl.h>
|
||||
#include "main.h"
|
||||
#include "misc.h"
|
||||
|
||||
// define data-----------------------------------------------------------
|
||||
#define NIN_LOGO_LENGTH 0x9c // Nintendoロゴデータサイズ
|
||||
@ -63,6 +63,7 @@ static void LogoInit( void )
|
||||
|
||||
s_logo.value_A = 0;
|
||||
s_logo.value_B = 16;
|
||||
G2_ChangeBlendAlpha( s_logo.value_A, s_logo.value_B );
|
||||
|
||||
// メイン画面のみON
|
||||
GX_DispOn();
|
||||
@ -24,7 +24,6 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
extern void LoadLogo( void );
|
||||
extern int LogoMain( void );
|
||||
extern void SetLogoEnable( BOOL enable );
|
||||
extern BOOL IsLogoEnable( void );
|
||||
@ -16,9 +16,8 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <twl.h>
|
||||
#include "main.h"
|
||||
#include "logoDemo.h"
|
||||
#include "DS_Setting.h"
|
||||
#include "misc.h"
|
||||
#include "launcher.h"
|
||||
|
||||
|
||||
// define data------------------------------------------
|
||||
@ -108,46 +107,44 @@ static const u16 *const str_backlight[] = {
|
||||
//======================================================
|
||||
|
||||
// ランチャーの初期化
|
||||
void LauncherInit(void)
|
||||
void LauncherInit( TitleProperty *pTitleList )
|
||||
{
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
#pragma unused( pTitleList )
|
||||
|
||||
GX_DispOn();
|
||||
int i;
|
||||
GX_DispOff();
|
||||
GXS_DispOff();
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
|
||||
DrawBackLightSwitch();
|
||||
|
||||
PrintfSJIS( 0, 0, TXT_COLOR_BLUE, "TWL-SYSTEM MENU ver.%06x", SYSMENU_VER );
|
||||
|
||||
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
|
||||
{
|
||||
int i;
|
||||
NvLangCode langCode = LANG_ENGLISH;
|
||||
if( GetSYSMWork()->ncd_invalid == 0 ) {
|
||||
langCode = (NvLangCode)GetNCDWork()->option.language;
|
||||
}
|
||||
for( i = 0; i < LAUNCHER_ELEMENT_NUM; i++ ) {
|
||||
s_pStrLauncher[ i ] = s_pStrLauncherElemTbl[ i ][ langCode ];
|
||||
}
|
||||
for( i = 0; i < LAUNCHER_ELEMENT_NUM; i++ ) {
|
||||
s_pStrLauncher[ i ] = s_pStrLauncherElemTbl[ i ][ GetNCDWork()->option.language ];
|
||||
}
|
||||
|
||||
if( !SYSM_IsNITROCard() ) {
|
||||
s_launcherPos[ 0 ].enable = FALSE; // DSカードが無い時は、先頭要素を無効にする。
|
||||
}
|
||||
|
||||
InitGetAndDrawRtcData( RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y );
|
||||
|
||||
DrawLauncher( s_csr, &s_launcherParam );
|
||||
DrawMenu( s_csr, &s_launcherParam );
|
||||
|
||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||
|
||||
InitGetAndDrawRtcData( RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y );
|
||||
|
||||
GX_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||
GX_DispOn();
|
||||
GXS_DispOn();
|
||||
}
|
||||
|
||||
|
||||
// ランチャーメイン
|
||||
IPL2BootType LauncherMain( BOOL boot_decision )
|
||||
TitleProperty *LauncherMain( TitleProperty *pTitleList )
|
||||
{
|
||||
#pragma unused( boot_decision )
|
||||
#pragma unused( pTitleList )
|
||||
|
||||
static BOOL touch_bl = FALSE;
|
||||
BOOL tp_bl_on_off = FALSE;
|
||||
@ -192,19 +189,19 @@ IPL2BootType LauncherMain( BOOL boot_decision )
|
||||
csr_old = s_csr;
|
||||
tp_select = SelectMenuByTP( &s_csr, &s_launcherParam );
|
||||
|
||||
DrawLauncher( s_csr, &s_launcherParam );
|
||||
DrawMenu( s_csr, &s_launcherParam );
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
||||
if( s_launcherPos[ 0 ].enable ) {
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
return (IPL2BootType)( s_csr + 1 );
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
return (IPL2BootType)0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
#if 0
|
||||
// ランチャー描画
|
||||
static void DrawLauncher(u16 nowCsr, const MenuParam *pMenu)
|
||||
{
|
||||
@ -224,7 +221,7 @@ static void DrawLauncher(u16 nowCsr, const MenuParam *pMenu)
|
||||
PutStringUTF16( pMenu->pos[ i ].x, pMenu->pos[ i ].y, color, (pMenu->str_elem)[ i ] );
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
// バックライトスイッチの表示
|
||||
static void DrawBackLightSwitch(void)
|
||||
41
build/systemMenu_RED/Launcher/ARM9/src/launcher.h
Normal file
41
build/systemMenu_RED/Launcher/ARM9/src/launcher.h
Normal file
@ -0,0 +1,41 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: launcher.h
|
||||
|
||||
Copyright 2007 Nintendo. All rights reserved.
|
||||
|
||||
These coded instructions, statements, and computer programs contain
|
||||
proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
Company Ltd., and are protected by Federal copyright law. They may
|
||||
not be disclosed to third parties or copied or duplicated in any form,
|
||||
in whole or in part, without the prior written consent of Nintendo.
|
||||
|
||||
$Date:: $
|
||||
$Rev$
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __LAUNCHER_H__
|
||||
#define __LAUNCHER_H__
|
||||
|
||||
#include <twl.h>
|
||||
#include <sysmenu.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
|
||||
// global variables--------------------------------------------------
|
||||
|
||||
// function-------------------------------------------------------------
|
||||
void LauncherInit( TitleProperty *pTitleList );
|
||||
TitleProperty *LauncherMain( TitleProperty *pTitleList );
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __LAUNCHER_H__
|
||||
@ -16,11 +16,9 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <twl.h>
|
||||
#include "main.h"
|
||||
#include "launcher.h"
|
||||
#include "misc.h"
|
||||
#include "logoDemo.h"
|
||||
#include "DS_Setting.h"
|
||||
#include "DS_DownloadPlay.h"
|
||||
#include "DS_Chat.h"
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
@ -40,88 +38,125 @@ static BannerFile banner; //
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
#if 0
|
||||
#if 1
|
||||
|
||||
typedef struct CardStatus {
|
||||
u16 primarySlot; // PULLOUT, DETECT, VALID, INVALID
|
||||
u16 secondarySlot; // 同上。
|
||||
}CardStatus;
|
||||
|
||||
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
|
||||
u64 titleID; // アプリケーション識別ID
|
||||
u32 platform; // NTR, TWL (HYBLIDはTWLを返す)
|
||||
void *pBanner; // 固定長フォーマットなら偽造されても大丈夫だろう。
|
||||
}TitleProperty;
|
||||
|
||||
|
||||
void TwlMain( void )
|
||||
{
|
||||
enum {
|
||||
START = 0,
|
||||
LOGODEMO = 1,
|
||||
LAUNCHER_INIT = 2,
|
||||
LAUNCHER = 3,
|
||||
AUTHENTICATE = 4,
|
||||
BOOT = 5,
|
||||
STOP = 6
|
||||
};
|
||||
u32 state = START;
|
||||
u32 filter_flag;
|
||||
TitleProperty *pBootTitle = NULL;
|
||||
|
||||
// 初期化
|
||||
SYSM_Init(); // SYSM_CreateCardThread();も含む
|
||||
TitleProperty *pTitleList = NULL;
|
||||
|
||||
// 本体設定データのリード
|
||||
SYSM_ReadTWLSetting( pTWLSetting );
|
||||
OS_Init();
|
||||
|
||||
// リセットパラメータの取得。(PMICの値&メインメモリの値)
|
||||
SYSM_GetResetParam( pResetParam );
|
||||
if( pResetParam->pBootTitle ) { // アプリ直接起動の指定があったらロゴデモを飛ばして起動
|
||||
pBootTitle = pResetParam->pBootTitle;
|
||||
state = BOOT;
|
||||
(void)OS_EnableIrq();
|
||||
(void)OS_EnableInterrupts();
|
||||
|
||||
FS_Init( FS_DMA_NOT_USE );
|
||||
GX_Init();
|
||||
|
||||
// 割り込み許可--------------------
|
||||
(void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank);
|
||||
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
|
||||
(void)GX_VBlankIntr(TRUE);
|
||||
|
||||
// システムメニュー初期化----------
|
||||
SYSM_Init(); // OS_Initの後でコール。
|
||||
|
||||
// システムの初期化----------------
|
||||
InitAllocator( &g_allocator );
|
||||
CMN_InitFileSystem( &g_allocator );
|
||||
|
||||
// リセットパラメータの取得--------
|
||||
if( SYSM_GetResetParam()->isLogoSkip ) {
|
||||
if( SYSM_GetResetParam()->bootTitleID ) { // アプリ直接起動の指定があったらロゴデモを飛ばして指定アプリ起動
|
||||
pBootTitle = (TitleProperty *)SYSM_GetResetParam();
|
||||
state = AUTHENTICATE;
|
||||
}else { // それ以外の場合は、ロゴデモを飛ばしてランチャー起動
|
||||
state = LAUNCHER_INIT;
|
||||
}
|
||||
}
|
||||
|
||||
// NANDアプリリストの取得
|
||||
filter_flag = ALL_APP;
|
||||
SYSM_GetNandTitleList( pTitleList_Nand, filter_flag ); // filter_flag : ALL, ALL_APP, SYS_APP, USER_APP, Data only, 等の条件を指定してタイトルリストを取得する。
|
||||
// return : *TitleProperty Array
|
||||
// コンテント(リソース)ファイルのリード
|
||||
SYSM_ReadContentFile( ContentID );
|
||||
// FS_ReadContentFile( ContentID );
|
||||
|
||||
// 共有コンテントファイルのリード
|
||||
SYSM_ReadSharedContentFile( ContentID );
|
||||
// FS_ReadSharedContentFile( ContentID );
|
||||
|
||||
// NANDアプリリストの取得----------
|
||||
(void)SYSM_GetNandTitleList( pTitleList );
|
||||
|
||||
while( 1 ) {
|
||||
CardStatus cardStatus = SYSM_GetCardTitleList( pTitleList_Card ); // カードアプリリストの取得(スレッドで随時カード挿抜を通知されるものをメインループで取得)
|
||||
OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち
|
||||
|
||||
ReadKeyPad(); // キー入力の取得
|
||||
ReadTpData(); // TP入力の取得
|
||||
|
||||
(void)SYSM_GetCardTitleList( pTitleList ); // カードアプリリストの取得(スレッドで随時カード挿抜を通知されるものをメインループで取得)
|
||||
|
||||
switch( state ) {
|
||||
case START:
|
||||
LogoInit();
|
||||
state = LOGODEMO;
|
||||
break;
|
||||
case LOGODEMO:
|
||||
if( LogoDemo() ) {
|
||||
LauncherInit( pTitleList_Nand, pTitleList_Card );
|
||||
state = LAUNCHER;
|
||||
if( LogoMain() ) {
|
||||
state = LAUNCHER_INIT;
|
||||
}
|
||||
break;
|
||||
case LAUNCHER_INIT:
|
||||
InitBG(); // BG初期化
|
||||
LauncherInit( pTitleList );
|
||||
state = LAUNCHER;
|
||||
break;
|
||||
case LAUNCHER:
|
||||
pBootTitle = Launcher( pTitleList_Card, cardStatus );
|
||||
pBootTitle = LauncherMain( pTitleList );
|
||||
if( pBootTitle ) {
|
||||
state = AUTHENTICATE;
|
||||
}
|
||||
break;
|
||||
case AUTHENTICATE:
|
||||
switch ( SYSM_LoadAndAuthenticateTitle( pBootTitle ) ) { // アプリロード&認証
|
||||
case AUTH_PROCESSING:
|
||||
break;
|
||||
case AUTH_RESULT_SUCCEEDED:
|
||||
state = BOOT;
|
||||
break;
|
||||
case AUTH_RESULT_TITLE_POINTER_ERROR:
|
||||
case AUTH_RESULT_AUTHENTICATE_FAILED:
|
||||
case AUTH_RESULT_ENTRY_ADDRESS_ERROR:
|
||||
state = STOP;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case BOOT:
|
||||
if( pBootTitle ) {
|
||||
if( SYSM_CheckTitlePointer( pBootTitle ) && // ポインタチェック
|
||||
SYSM_AuthAndLoadTitle ( pBootTitle ) ) { // ROMヘッダ認証
|
||||
SYSM_Finalize(); // 終了処理
|
||||
return;
|
||||
}
|
||||
state = STOP;
|
||||
}
|
||||
break;
|
||||
case STOP:
|
||||
SYSM_Finalize(); // 終了処理
|
||||
return;
|
||||
case STOP: // 停止
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
extern void SampleMain(void);
|
||||
|
||||
// ============================================================================
|
||||
// function's description
|
||||
// ============================================================================
|
||||
/*
|
||||
void TwlMain(void)
|
||||
{
|
||||
typedef enum PrgState {
|
||||
@ -164,9 +199,9 @@ void TwlMain(void)
|
||||
// InitAllocSystem();
|
||||
|
||||
// ARM7初期化待ち--------------------------
|
||||
if( SYSM_WaitARM7Init() ) { // ARM7側の初期化が終わるのを待ってからメインループ開始
|
||||
return; // TRUEが返されたら、デバッガブートなのでリターン
|
||||
}
|
||||
// if( SYSM_WaitARM7Init() ) { // ARM7側の初期化が終わるのを待ってからメインループ開始
|
||||
// return; // TRUEが返されたら、デバッガブートなのでリターン
|
||||
// }
|
||||
|
||||
// メインループ----------------------------
|
||||
while(1){
|
||||
@ -194,17 +229,6 @@ void TwlMain(void)
|
||||
// NITROロゴ表示
|
||||
//-----------------------------------
|
||||
case STATE_LOGO_DISP:
|
||||
// 自動起動ONの時のキーショートカット処理
|
||||
if( GetNCDWork()->option.autoBootFlag ) { // TPタッチされるか、Bボタンが押下されたら今回の自動起動をOFFにする。
|
||||
|
||||
ReadTpDataLogoDirectBootCancel(); // ※red_ipl2特有の処理。red_ipl2のTP仕様は特許にひっかかっているので使えないが、ここだけは有効にしたいので、無理やり実装。
|
||||
|
||||
if( (tpd.disp.touch) || (pad.trg & PAD_BUTTON_B) ) {
|
||||
boot_decision = 0;
|
||||
SYSM_ClearBootFlag( BFLG_BOOT_NITRO | BFLG_BOOT_AGB | BFLG_BOOT_BMENU );
|
||||
}
|
||||
}
|
||||
|
||||
if( LogoMain() ) { // ロゴ表示ルーチン(※BFLG_GAMEBOY_LOGO_OFFの時は即終了)
|
||||
InitBG(); // BG初期化
|
||||
LauncherInit(); // ブート未決定時のみロゴメニューを初期化する。
|
||||
@ -280,7 +304,8 @@ void TwlMain(void)
|
||||
// MI_CpuCopyFast( bgBakS, (void*)(HW_DB_BG_VRAM+0xf000), sizeof(bgBakS) );
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
// アロケータの初期化
|
||||
static void InitAllocator( NNSFndAllocator* pAllocator )
|
||||
@ -1,6 +1,6 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: mainFunc.c
|
||||
File: misc.c
|
||||
|
||||
Copyright 2007 Nintendo. All rights reserved.
|
||||
|
||||
@ -16,11 +16,6 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <twl.h>
|
||||
#include <sysmenu.h>
|
||||
#include "main.h"
|
||||
|
||||
#include "DS_Setting.h"
|
||||
#include "logoDemo.h"
|
||||
#include "misc.h"
|
||||
|
||||
// define data-----------------------------------------------------------------
|
||||
@ -41,7 +36,7 @@ enum
|
||||
// デモ共通のカラーパレット
|
||||
GXRgb TXTColorPalette[TXT_NUM_CPALEETE * 16] =
|
||||
{
|
||||
GX_RGB( 0, 0, 0), GX_RGB(31, 31, 31), GX_RGB( 0, 0, 0), GX_RGB(31, 0, 0),
|
||||
GX_RGB(31, 31, 31), GX_RGB(31, 31, 31), GX_RGB( 0, 0, 0), GX_RGB(31, 0, 0),
|
||||
GX_RGB( 0, 31, 0), GX_RGB( 0, 0, 31), GX_RGB( 0, 31, 31), GX_RGB(31, 0, 31),
|
||||
GX_RGB(31, 31, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0),
|
||||
GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0), GX_RGB( 0, 0, 0),
|
||||
@ -84,23 +79,21 @@ static void InitCanvas( void );
|
||||
static void GetAndDrawRtcDataCore( BOOL forceGetFlag );
|
||||
|
||||
// global variable-------------------------------------------------------------
|
||||
GXOamAttr oamBakS[ 128 ] ATTRIBUTE_ALIGN(32); // OAM バックアップ
|
||||
GXOamAttr oamBakS[ 128 ] ATTRIBUTE_ALIGN(32); // OAM バックアップ
|
||||
u16 bgBakM[ 32 * 24 ] ATTRIBUTE_ALIGN(32); // BG バックアップ
|
||||
u16 bgBakS[ 32 * 24 ] ATTRIBUTE_ALIGN(32); // BG バックアップ
|
||||
KeyWork pad; // キーパッド入力データ
|
||||
TpWork tpd; // タッチパネル入力データ
|
||||
|
||||
NNSG2dFont gFont; // フォント
|
||||
NNSG2dCharCanvas gCanvas; // CharCanvas
|
||||
NNSG2dTextCanvas gTextCanvas; // TextCanvas
|
||||
NNSG2dCharCanvas gCanvasSub; // CharCanvas
|
||||
NNSG2dTextCanvas gTextCanvasSub; // TextCanvas
|
||||
|
||||
// static variable-------------------------------------------------------------
|
||||
static int s_detach_count;
|
||||
static int s_detach_count;
|
||||
static RtcDrawPos s_rtcPos;
|
||||
static RTCDate s_rtcDate;
|
||||
static RTCTime s_rtcTime;
|
||||
static u16 s_vcount;
|
||||
static RTCDate s_rtcDate;
|
||||
static RTCTime s_rtcTime;
|
||||
static u16 s_vcount;
|
||||
|
||||
static char s_strBuffer[ STRING_LENGTH_MAX * 2 ] ATTRIBUTE_ALIGN(2);
|
||||
static u16 s_strBufferUTF16[ STRING_LENGTH_MAX ];
|
||||
@ -146,51 +139,40 @@ void InitBG(void)
|
||||
|
||||
MI_CpuClearFast( (void *)HW_BG_VRAM, 0x20000 ); // BG -VRAM クリア
|
||||
MI_CpuClearFast( (void *)HW_OBJ_VRAM, 0x20000 ); // OBJ-VRAM クリア
|
||||
MI_CpuClearFast( (void *)HW_PLTT, HW_PLTT_SIZE ); // パレット クリア // NitroSDKではcrt0.cでクリアしている。
|
||||
MI_DmaFill32( 3, (void *)HW_OAM, 192, HW_OAM_SIZE ); // OAM クリア // NitroSDKではcrt0.cでクリアしている。
|
||||
|
||||
// カラーパレットを設定
|
||||
GX_LoadBGPltt(TXTColorPalette, 0, sizeof(TXTColorPalette));
|
||||
GX_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) );
|
||||
|
||||
// BGモード設定
|
||||
GX_SetGraphicsMode( GX_DISPMODE_GRAPHICS, GX_BGMODE_4, GX_BG0_AS_2D );
|
||||
GX_SetGraphicsMode( GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D );
|
||||
|
||||
GX_SetBGScrOffset ( GX_BGSCROFFSET_0x10000 );
|
||||
GX_SetBGCharOffset( GX_BGCHAROFFSET_0x00000 );
|
||||
|
||||
InitScreen();
|
||||
InitCanvas();
|
||||
}
|
||||
// サブLCD
|
||||
/*
|
||||
{
|
||||
GXS_SetOBJVRamModeChar(GX_OBJVRAMMODE_CHAR_1D_32K);
|
||||
// VRAM割り当て
|
||||
GX_SetBankForSubBG ( GX_VRAM_SUB_BG_128_C ); // VRAM-C for BGs
|
||||
GX_SetBankForSubOBJ( GX_VRAM_SUB_OBJ_128_D ); // VRAM-D for BGs
|
||||
GXS_SetGraphicsMode( GX_BGMODE_0 ); // BGMODE is 0
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG1 ); // display only BG #0
|
||||
G2S_SetBG1Control( GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text
|
||||
GX_BG_COLORMODE_16, // use 256 colors mode
|
||||
GX_BG_SCRBASE_0xf000, // screen base offset + 0x0000 is the address for BG #0 screen
|
||||
GX_BG_CHARBASE_0x00000, // character base offset + 0x04000 is the address for BG #0 characters
|
||||
GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled
|
||||
);
|
||||
G2S_SetBG1Priority( 3 );
|
||||
G2S_BG1Mosaic( FALSE );
|
||||
MI_DmaFill32( 3, (void *)HW_DB_OAM, 192, HW_OAM_SIZE ); // OAM クリア
|
||||
|
||||
MI_CpuClearFast( (void *)HW_DB_BG_VRAM, 0x20000 ); // BG -VRAM クリア
|
||||
MI_CpuClearFast( (void *)HW_DB_OBJ_VRAM, 0x20000 ); // OBJ -VRAM クリア
|
||||
MI_CpuCopyFast( myPlttData, (void *)HW_DB_BG_PLTT, sizeof(myPlttData) ); // BGパレット セット
|
||||
MI_CpuCopyFast( myPlttData, (void *)HW_DB_BG_PLTT, sizeof(myPlttData) ); // OBJパレット セット
|
||||
|
||||
// カラーパレットを設定
|
||||
GXS_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) );
|
||||
|
||||
// BGモード設定
|
||||
GXS_SetGraphicsMode( GX_BGMODE_0 ); // BGMODE is 0
|
||||
}
|
||||
*/
|
||||
InitScreen();
|
||||
InitCanvas();
|
||||
}
|
||||
|
||||
|
||||
// スクリーン初期化
|
||||
static void InitScreen( void )
|
||||
{
|
||||
// BG 0 を設定
|
||||
// メイン画面 BG 0 を設定
|
||||
G2_SetBG0Control(
|
||||
GX_BG_SCRSIZE_TEXT_256x256, // スクリーンサイズ 256x256
|
||||
GX_BG_COLORMODE_16, // カラーモード 16色
|
||||
@ -198,9 +180,17 @@ static void InitScreen( void )
|
||||
GX_BG_CHARBASE_0x00000, // キャラクタベース
|
||||
GX_BG_EXTPLTT_01 // 拡張パレットスロット
|
||||
);
|
||||
|
||||
// BG0 を可視に
|
||||
GX_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||
|
||||
// サブ画面 BG 0 を設定
|
||||
G2S_SetBG0Control(
|
||||
GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text
|
||||
GX_BG_COLORMODE_16, // use 256 colors mode
|
||||
GX_BG_SCRBASE_0xf800, // screen base offset + 0x0000 is the address for BG #0 screen
|
||||
GX_BG_CHARBASE_0x00000, // character base offset + 0x04000 is the address for BG #0 characters
|
||||
GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled
|
||||
);
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 ); // display only BG #0
|
||||
}
|
||||
|
||||
|
||||
@ -216,35 +206,68 @@ static void InitCanvas( void )
|
||||
// NNS_G2dPrintFont(&gFont);
|
||||
}
|
||||
|
||||
// CharCanvas の初期化
|
||||
NNS_G2dCharCanvasInitForBG(
|
||||
&gCanvas,
|
||||
(GXCharFmt16*)G2_GetBG0CharPtr() + CHARACTER_OFFSET,
|
||||
CANVAS_WIDTH,
|
||||
CANVAS_HEIGHT,
|
||||
NNS_G2D_CHARA_COLORMODE_16
|
||||
);
|
||||
|
||||
// TextCanvasの初期化
|
||||
NNS_G2dTextCanvasInit(
|
||||
&gTextCanvas,
|
||||
&gCanvas,
|
||||
&gFont,
|
||||
TEXT_HSPACE,
|
||||
TEXT_VSPACE
|
||||
);
|
||||
|
||||
// スクリーンを設定
|
||||
NNS_G2dMapScrToCharText(
|
||||
G2_GetBG0ScrPtr(),
|
||||
CANVAS_WIDTH,
|
||||
CANVAS_HEIGHT,
|
||||
CANVAS_LEFT,
|
||||
CANVAS_TOP,
|
||||
NNS_G2D_TEXT_BG_WIDTH_256,
|
||||
CHARACTER_OFFSET,
|
||||
TXT_CPALETTE_MAIN
|
||||
);
|
||||
{
|
||||
// CharCanvas の初期化
|
||||
NNS_G2dCharCanvasInitForBG(
|
||||
&gCanvas,
|
||||
(GXCharFmt16*)G2_GetBG0CharPtr() + CHARACTER_OFFSET,
|
||||
CANVAS_WIDTH,
|
||||
CANVAS_HEIGHT,
|
||||
NNS_G2D_CHARA_COLORMODE_16
|
||||
);
|
||||
|
||||
// TextCanvasの初期化
|
||||
NNS_G2dTextCanvasInit(
|
||||
&gTextCanvas,
|
||||
&gCanvas,
|
||||
&gFont,
|
||||
TEXT_HSPACE,
|
||||
TEXT_VSPACE
|
||||
);
|
||||
|
||||
// スクリーンを設定
|
||||
NNS_G2dMapScrToCharText(
|
||||
G2_GetBG0ScrPtr(),
|
||||
CANVAS_WIDTH,
|
||||
CANVAS_HEIGHT,
|
||||
CANVAS_LEFT,
|
||||
CANVAS_TOP,
|
||||
NNS_G2D_TEXT_BG_WIDTH_256,
|
||||
CHARACTER_OFFSET,
|
||||
TXT_CPALETTE_MAIN
|
||||
);
|
||||
}
|
||||
{
|
||||
// CharCanvas の初期化
|
||||
NNS_G2dCharCanvasInitForBG(
|
||||
&gCanvasSub,
|
||||
(GXCharFmt16*)G2S_GetBG0CharPtr() + CHARACTER_OFFSET,
|
||||
CANVAS_WIDTH,
|
||||
CANVAS_HEIGHT,
|
||||
NNS_G2D_CHARA_COLORMODE_16
|
||||
);
|
||||
|
||||
// TextCanvasの初期化
|
||||
NNS_G2dTextCanvasInit(
|
||||
&gTextCanvasSub,
|
||||
&gCanvasSub,
|
||||
&gFont,
|
||||
TEXT_HSPACE,
|
||||
TEXT_VSPACE
|
||||
);
|
||||
|
||||
// スクリーンを設定
|
||||
NNS_G2dMapScrToCharText(
|
||||
G2S_GetBG0ScrPtr(),
|
||||
CANVAS_WIDTH,
|
||||
CANVAS_HEIGHT,
|
||||
CANVAS_LEFT,
|
||||
CANVAS_TOP,
|
||||
NNS_G2D_TEXT_BG_WIDTH_256,
|
||||
CHARACTER_OFFSET,
|
||||
TXT_CPALETTE_MAIN
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -255,6 +278,12 @@ void PutStringUTF16( int x, int y, int color, const u16 *strUTF16 )
|
||||
strUTF16 );
|
||||
}
|
||||
|
||||
void PutStringUTF16Sub( int x, int y, int color, const u16 *strUTF16 )
|
||||
{
|
||||
NNS_G2dTextCanvasDrawText( &gTextCanvasSub, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT,
|
||||
strUTF16 );
|
||||
}
|
||||
|
||||
|
||||
// SJISでPrintf形式で文字表示(内部でUTF16に変換)
|
||||
void PrintfSJIS( int x, int y, int color, const char *fmt, ... )
|
||||
@ -274,6 +303,23 @@ void PrintfSJIS( int x, int y, int color, const char *fmt, ... )
|
||||
s_strBufferUTF16 );
|
||||
}
|
||||
|
||||
void PrintfSJISSub( int x, int y, int color, const char *fmt, ... )
|
||||
{
|
||||
int srcLen;
|
||||
int dstLen = sizeof(s_strBufferUTF16);
|
||||
va_list vlist;
|
||||
va_start(vlist, fmt);
|
||||
srcLen = STD_TVSNPrintf( s_strBuffer, sizeof(s_strBuffer), fmt, vlist);
|
||||
va_end(vlist);
|
||||
s_strBuffer[ srcLen ] = 0;
|
||||
|
||||
(void)STD_ConvertStringSjisToUnicode( s_strBufferUTF16, &dstLen, s_strBuffer, &srcLen, NULL );
|
||||
s_strBufferUTF16[ dstLen ] = 0;
|
||||
|
||||
NNS_G2dTextCanvasDrawText(&gTextCanvasSub, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT,
|
||||
s_strBufferUTF16 );
|
||||
}
|
||||
|
||||
|
||||
// キー入力読み出し--------------------------------
|
||||
void ReadKeyPad(void)
|
||||
@ -287,12 +333,6 @@ void ReadKeyPad(void)
|
||||
// タッチパネルデータの取得-----------------------
|
||||
void ReadTpData(void)
|
||||
{
|
||||
#ifndef __TP_OFF
|
||||
#ifdef __TP_CALIBLATE_ONLY_ENABLE
|
||||
return;
|
||||
#endif /* __TP_CALIBLATE_ONLY_ENABLE */
|
||||
|
||||
|
||||
TP_GetCalibratedPoint( &tpd.last, &tpd.raw ); // 前回のTPデータを退避
|
||||
|
||||
if( TP_RequestRawSampling(&tpd.raw) ) { // タッチパネルのサンプリング
|
||||
@ -323,21 +363,6 @@ void ReadTpData(void)
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif /* __TP_OFF */
|
||||
}
|
||||
|
||||
|
||||
// ロゴメニューの直接ブート時のキャンセルのみタッチパネルを有効にする。
|
||||
void ReadTpDataLogoDirectBootCancel(void)
|
||||
{
|
||||
#ifndef __TP_OFF
|
||||
TP_GetCalibratedPoint( &tpd.last, &tpd.raw ); // 前回のTPデータを退避
|
||||
if( TP_RequestRawSampling(&tpd.raw) ) { // タッチパネルのサンプリング
|
||||
SVC_CpuClear(0x0000, &tpd.raw, sizeof(tpd.raw), 16); // SPI-busyでデータ取得に失敗した時は”データなし”でリターン。
|
||||
return;
|
||||
}
|
||||
TP_GetCalibratedPoint( &tpd.disp, &tpd.raw ); // TP座標からLCD座標に変換。
|
||||
#endif /* __TP_OFF */
|
||||
}
|
||||
|
||||
|
||||
@ -364,110 +389,28 @@ void StartDetachTP( void )
|
||||
}
|
||||
|
||||
|
||||
// バナーアイコンOBJのロード
|
||||
void SetBannerIconOBJ( BannerFileV1 *bannerp )
|
||||
{
|
||||
GXS_LoadOBJPltt( bannerp->pltt, 15, BNR_PLTT_SIZE );
|
||||
MI_CpuCopyFast( bannerp->image, (void *)(HW_DB_OBJ_VRAM + 0x20), BNR_IMAGE_SIZE );
|
||||
G2_SetOBJAttr( (GXOamAttr*)&oamBakS[ 1 ], // OAM pointer
|
||||
32, // X position
|
||||
32, // Y position
|
||||
0, // Priority
|
||||
GX_OAM_MODE_NORMAL, // Bitmap mode
|
||||
FALSE, // mosaic off
|
||||
GX_OAM_EFFECT_NONE, // affine off
|
||||
GX_OAM_SHAPE_32x32, // 16x16 size
|
||||
GX_OAM_COLOR_16, // 16 color
|
||||
1, // charactor
|
||||
15, // palette
|
||||
0); // affine
|
||||
}
|
||||
|
||||
|
||||
//======================================================
|
||||
// メニュー制御
|
||||
//======================================================
|
||||
|
||||
// メニュー描画
|
||||
void DrawMenu(u16 nowCsr, const MenuComponent *menu)
|
||||
void DrawMenu( u16 nowCsr, const MenuParam *pMenu )
|
||||
{
|
||||
int i;
|
||||
int color;
|
||||
|
||||
for( i = 0; i < menu->num; i++) {
|
||||
if(i == nowCsr) color = menu->select_color;
|
||||
else color = menu->normal_color;
|
||||
|
||||
PutStringUTF16( menu->pos_x, (int)menu->pos_y + i * menu->next_y_num, color, (const u16 *)(menu->str_elem)[i] );
|
||||
// (void)DrawStringSJIS( menu->pos_x, (u16)(menu->pos_y + i * menu->next_y_num), color, (menu->str_elem)[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// タッチパネルによるメニュー選択
|
||||
BOOL SelectMenuByTp(u16 *nowCsr, const MenuComponent *menu)
|
||||
{
|
||||
u16 i, lt_x, lt_y, rb_x, rb_y;
|
||||
TPData *target;
|
||||
static u16 detach_count = 0;
|
||||
static u16 csr_old = 0xff;
|
||||
static u16 same_csr_count = 0;
|
||||
|
||||
// detach_countが始動していたら、カウント判定。
|
||||
if(detach_count > 0) {
|
||||
if(tpd.disp.touch == 0) { // TPが押されていなければ、カウント進行し、10カウントでメニュー選択
|
||||
if(++detach_count == TP_CSR_DETACH_COUNT) {
|
||||
detach_count = 0;
|
||||
return TRUE;
|
||||
for( i = 0; i < pMenu->num; i++ ) {
|
||||
if(i == nowCsr) {
|
||||
if( !pMenu->pos[ i ].enable ) {
|
||||
color = pMenu->disable_color;
|
||||
}else {
|
||||
return FALSE;
|
||||
color = pMenu->select_color;
|
||||
}
|
||||
}else {
|
||||
color = pMenu->normal_color;
|
||||
}
|
||||
PutStringUTF16( pMenu->pos[ i ].x, pMenu->pos[ i ].y, color, (pMenu->str_elem)[ i ] );
|
||||
}
|
||||
|
||||
detach_count=0; // detachカウント値のクリア
|
||||
|
||||
// 通常は、TPデータがメニュー上にあるかどうかを判定。
|
||||
lt_x = (u16)(menu->pos_x * 8); // メニュー要素先頭のLCD座標を算出
|
||||
lt_y = (u16)(menu->pos_y * 8 - 4);
|
||||
rb_x = (u16)((menu->pos_x + menu->name_length) * 8);
|
||||
rb_y = (u16)(menu->pos_y * 8 + 12); // ※Y座標は±4のマージン
|
||||
|
||||
if(tpd.disp.touch) target = &tpd.disp;
|
||||
else target = &tpd.last;
|
||||
|
||||
// (void)DrawDecimalSJIS( 20 , 4, WHITE, &csr_old, 2, 2);
|
||||
// (void)DrawDecimalSJIS( 20 , 5, WHITE, &same_csr_count, 2, 2);
|
||||
// (void)DrawDecimalSJIS( 20 , 6, WHITE, &detach_count, 2, 2);
|
||||
|
||||
for(i = 0; i < menu->num; i++) {
|
||||
if(tpd.disp.touch) { // タッチパネルがメニューの要素上でタッチされているなら、
|
||||
if(InRangeTp(lt_x, lt_y, rb_x, rb_y, target)) {
|
||||
if(tpd.disp.validity == TP_VALIDITY_VALID) { // カーソルをその要素に移動
|
||||
if(csr_old == i) {
|
||||
if(same_csr_count < TP_CSR_TOUCH_COUNT) {
|
||||
same_csr_count++;
|
||||
}else {
|
||||
*nowCsr = i;
|
||||
}
|
||||
return FALSE;
|
||||
}else {
|
||||
csr_old = i;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else { // touch==0
|
||||
if(same_csr_count == TP_CSR_TOUCH_COUNT) {
|
||||
detach_count = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
lt_y += (u16)(menu->next_y_num * 8);
|
||||
rb_y += (u16)(menu->next_y_num * 8);
|
||||
}
|
||||
same_csr_count = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
@ -594,13 +537,13 @@ static void GetAndDrawRtcDataCore( BOOL forceGetFlag )
|
||||
// 前RTC情報の消去
|
||||
{
|
||||
year = s_rtcDate.year + 2000;
|
||||
PrintfSJIS( s_rtcPos.date_x, s_rtcPos.date_y, TXT_COLOR_WHITE, "%d/%02d/%02d[%3s]",
|
||||
PrintfSJISSub( s_rtcPos.date_x, s_rtcPos.date_y, TXT_COLOR_WHITE, "%d/%02d/%02d[%3s]",
|
||||
year,
|
||||
date_old.month,
|
||||
date_old.day,
|
||||
g_strWeek[ date_old.week ]
|
||||
);
|
||||
PrintfSJIS( s_rtcPos.time_x, s_rtcPos.time_y, TXT_COLOR_WHITE, "%02d:%02d:%02d",
|
||||
PrintfSJISSub( s_rtcPos.time_x, s_rtcPos.time_y, TXT_COLOR_WHITE, "%02d:%02d:%02d",
|
||||
time_old.hour,
|
||||
time_old.minute,
|
||||
time_old.second
|
||||
@ -609,13 +552,13 @@ static void GetAndDrawRtcDataCore( BOOL forceGetFlag )
|
||||
// RTC情報の表示
|
||||
{
|
||||
year = s_rtcDate.year + 2000;
|
||||
PrintfSJIS( s_rtcPos.date_x, s_rtcPos.date_y, TXT_COLOR_BLACK, "%d/%02d/%02d[%3s]",
|
||||
PrintfSJISSub( s_rtcPos.date_x, s_rtcPos.date_y, TXT_COLOR_BLACK, "%d/%02d/%02d[%3s]",
|
||||
year,
|
||||
s_rtcDate.month,
|
||||
s_rtcDate.day,
|
||||
g_strWeek[ s_rtcDate.week ]
|
||||
);
|
||||
PrintfSJIS( s_rtcPos.time_x, s_rtcPos.time_y, TXT_COLOR_BLACK, "%02d:%02d:%02d",
|
||||
PrintfSJISSub( s_rtcPos.time_x, s_rtcPos.time_y, TXT_COLOR_BLACK, "%02d:%02d:%02d",
|
||||
s_rtcTime.hour,
|
||||
s_rtcTime.minute,
|
||||
s_rtcTime.second
|
||||
@ -624,3 +567,22 @@ static void GetAndDrawRtcDataCore( BOOL forceGetFlag )
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// バナーアイコンOBJのロード
|
||||
void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp )
|
||||
{
|
||||
GXS_LoadOBJPltt( bannerp->pltt, 15, BNR_PLTT_SIZE );
|
||||
MI_CpuCopyFast( bannerp->image, (void *)(HW_DB_OBJ_VRAM + 0x20), BNR_IMAGE_SIZE );
|
||||
G2_SetOBJAttr( pDstOAM, // OAM pointer
|
||||
32, // X position
|
||||
32, // Y position
|
||||
0, // Priority
|
||||
GX_OAM_MODE_NORMAL, // Bitmap mode
|
||||
FALSE, // mosaic off
|
||||
GX_OAM_EFFECT_NONE, // affine off
|
||||
GX_OAM_SHAPE_32x32, // 16x16 size
|
||||
GX_OAM_COLOR_16, // 16 color
|
||||
1, // charactor
|
||||
15, // palette
|
||||
0); // affine
|
||||
}
|
||||
@ -1,6 +1,6 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: main.h
|
||||
File: misc.h
|
||||
|
||||
Copyright 2007 Nintendo. All rights reserved.
|
||||
|
||||
@ -15,12 +15,11 @@
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __MAIN_H__
|
||||
#define __MAIN_H__
|
||||
#ifndef __MISC_H__
|
||||
#define __MISC_H__
|
||||
|
||||
#include <twl.h>
|
||||
#include <sysmenu.h>
|
||||
#include "misc.h"
|
||||
|
||||
#define NNS_G2D_UNICODE
|
||||
#include <nnsys.h>
|
||||
@ -33,6 +32,8 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
#define TP_CSR_TOUCH_COUNT 2 // TPカーソルのチャタリング吸収のためのカウント値
|
||||
#define TP_CSR_DETACH_COUNT 2 // TPカーソルを「選択」と判定するTPデタッチからのカウント値
|
||||
|
||||
// DrawText での左上寄せ
|
||||
#define TXT_DRAWTEXT_FLAG_DEFAULT (NNS_G2D_VERTICALORIGIN_TOP | NNS_G2D_HORIZONTALORIGIN_LEFT | NNS_G2D_HORIZONTALALIGN_LEFT)
|
||||
@ -77,19 +78,10 @@ enum
|
||||
|
||||
|
||||
// 時計表示場所
|
||||
#define RTC_DATE_TOP_X ( 18 * 8 )
|
||||
#define RTC_DATE_TOP_Y ( 2 * 8 )
|
||||
#define RTC_TIME_TOP_X ( 25 * 8 )
|
||||
#define RTC_TIME_TOP_Y ( 4 * 8 )
|
||||
|
||||
// IPL2のブートタイプ指定
|
||||
typedef enum IPL2BootType {
|
||||
BOOT_TYPE_UNSOLVED = 0,
|
||||
BOOT_TYPE_NITRO,
|
||||
BOOT_TYPE_PICT_CHAT,
|
||||
BOOT_TYPE_WIRELESS_BOOT,
|
||||
BOOT_TYPE_BMENU
|
||||
}IPL2BootType;
|
||||
#define RTC_DATE_TOP_X ( 9 * 8 )
|
||||
#define RTC_DATE_TOP_Y ( 10 * 8 )
|
||||
#define RTC_TIME_TOP_X ( 12 * 8 )
|
||||
#define RTC_TIME_TOP_Y ( 12 * 8 )
|
||||
|
||||
|
||||
// キーデータワーク
|
||||
@ -108,26 +100,14 @@ typedef struct {
|
||||
}TpWork;
|
||||
|
||||
|
||||
// メニュー構成パラメータ構造体
|
||||
typedef struct MenuComponent {
|
||||
int num;
|
||||
int pos_x;
|
||||
int pos_y;
|
||||
int next_x_num;
|
||||
int next_y_num;
|
||||
int name_length;
|
||||
int normal_color;
|
||||
int select_color;
|
||||
const u8 **str_elem;
|
||||
}MenuComponent;
|
||||
|
||||
|
||||
// メニュー要素座標
|
||||
typedef struct MenuPos {
|
||||
BOOL enable;
|
||||
int x;
|
||||
int y;
|
||||
}MenuPos;
|
||||
|
||||
|
||||
// メニュー構成パラメータ構造体
|
||||
typedef struct MenuParam {
|
||||
int num;
|
||||
@ -140,44 +120,34 @@ typedef struct MenuParam {
|
||||
|
||||
|
||||
// global variables--------------------------------------------------
|
||||
extern GXOamAttr oamBakS[ 128 ]; // OAM バックアップ
|
||||
extern u16 bgBakM[ 32*24 ]; // BG バックアップ
|
||||
extern u16 bgBakS[ 32*24 ]; // BG バックアップ
|
||||
extern TpWork tpd; // タッチパネルデータ
|
||||
extern KeyWork pad; // キーパッド入力データ
|
||||
extern const u8 *const g_strWeek[ 7 ];
|
||||
extern const u8 *const g_strWeek[ 7 ]; // 曜日文字列
|
||||
|
||||
extern NNSFndAllocator g_allocator;
|
||||
extern NNSG2dFont gFont; // フォント
|
||||
extern NNSG2dCharCanvas gCanvas; // CharCanvas
|
||||
extern NNSG2dTextCanvas gTextCanvas; // TextCanvas
|
||||
extern NNSFndAllocator g_allocator; // メモリアロケータ
|
||||
extern NNSG2dFont gFont; // フォント
|
||||
extern NNSG2dCharCanvas gCanvas; // CharCanvas
|
||||
extern NNSG2dTextCanvas gTextCanvas; // TextCanvas
|
||||
|
||||
// function-------------------------------------------------------------
|
||||
void LauncherInit( void );
|
||||
IPL2BootType LauncherMain( BOOL boot_decision );
|
||||
|
||||
|
||||
void InitBG( void );
|
||||
void PutStringUTF16( int x, int y, int color, const u16 *strUTF16 );
|
||||
void PrintfSJIS( int x, int y, int color, const char *fmt, ... );
|
||||
|
||||
void PutStringUTF16 ( int x, int y, int color, const u16 *strUTF16 );
|
||||
void PutStringUTF16Sub( int x, int y, int color, const u16 *strUTF16 );
|
||||
void PrintfSJIS ( int x, int y, int color, const char *fmt, ... );
|
||||
void PrintfSJISSub( int x, int y, int color, const char *fmt, ... );
|
||||
void ReadKeyPad( void );
|
||||
void ReadTpData( void );
|
||||
void ReadTpDataLogoDirectBootCancel( void );
|
||||
BOOL WaitDetachTP( void );
|
||||
void StartDetachTP( void );
|
||||
void SetBannerIconOBJ( BannerFileV1 *bannerp );
|
||||
|
||||
void DrawMenu( u16 nowCsr, const MenuComponent *menu );
|
||||
BOOL SelectMenuByTp( u16 *nowCsr, const MenuComponent *menu );
|
||||
void DrawMenu( u16 nowCsr, const MenuParam *pMenu );
|
||||
BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu );
|
||||
BOOL InRangeTp( int top_x, int top_y, int bottom_x, int bottom_y, TPData *tgt );
|
||||
|
||||
void InitGetAndDrawRtcData( int drawDatePos_x, int drawDatePos_y, int drawTimePos_x, int drawTimePos_y );
|
||||
void GetAndDrawRtcData( void );
|
||||
void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __MAIN_H__
|
||||
#endif // __MISC_H__
|
||||
30
build/systemMenu_RED/Launcher/Makefile
Normal file
30
build/systemMenu_RED/Launcher/Makefile
Normal file
@ -0,0 +1,30 @@
|
||||
#! 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:: 2007-10-03#$
|
||||
# $Rev: 1319 $
|
||||
# $Author: kitase_hirotake $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
55
build/systemMenu_RED/MachineSettings/ARM9/Makefile
Normal file
55
build/systemMenu_RED/MachineSettings/ARM9/Makefile
Normal file
@ -0,0 +1,55 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - demos - simpleShoot-1
|
||||
# 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_PLATFORM = TWL
|
||||
TWL_ARCHGEN = LIMITED
|
||||
|
||||
TARGET_BIN = main.srl
|
||||
|
||||
#LCFILE_SPEC =
|
||||
ROM_SPEC = main.rsf
|
||||
|
||||
MISC_DIR = ../../Launcher/ARM9/src
|
||||
|
||||
SRCS = main.c $(MISC_DIR)/misc.c \
|
||||
MachineSetting.c setRTC.c selectLanguage.c calibrationTP.c
|
||||
#setOwnerInfo.c
|
||||
|
||||
#SRCS_OVERLAY =
|
||||
|
||||
LINCLUDES = $(MISC_DIR)
|
||||
#LLIBRARY_DIRS =
|
||||
#LLIBRARIES =
|
||||
#LDEPENDS_NEF =
|
||||
|
||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build : $(FONT_OBJS) $(TARGETS)
|
||||
|
||||
|
||||
include $(TWLIPL_ROOT)/build/buildtools/modulerules.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
#===== End of Makefile =====
|
||||
147
build/systemMenu_RED/MachineSettings/ARM9/main.rsf
Normal file
147
build/systemMenu_RED/MachineSettings/ARM9/main.rsf
Normal file
@ -0,0 +1,147 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - include
|
||||
# File: ROM-BB.rsf
|
||||
#
|
||||
# Copyright 2007 Nintendo. All rights reserved.
|
||||
#
|
||||
# These coded insructions, statements, and computer programs contain
|
||||
# proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
# Company Ltd., and are protected by Federal copyright law. They may
|
||||
# not be disclosed to third parties or copied or duplicated in any form,
|
||||
# in whole or in part, without the prior written consent of Nintendo.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev$
|
||||
# $Author$
|
||||
#----------------------------------------------------------------------------
|
||||
#
|
||||
# TWL ROM SPEC FILE
|
||||
#
|
||||
|
||||
Arm9
|
||||
{
|
||||
Static "$(MAKEROM_ARM9:r).FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayDefs "$(MAKEROM_ARM9:r)_defs.FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayTable "$(MAKEROM_ARM9:r)_table.FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
Elf "$(MAKEROM_ARM9:r).tef"
|
||||
}
|
||||
|
||||
Arm7
|
||||
{
|
||||
Static "$(MAKEROM_ARM7_BASE:r).FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
Elf "$(MAKEROM_ARM7_BASE:r).tef"
|
||||
}
|
||||
|
||||
Arm9.Ltd
|
||||
{
|
||||
Static "$(MAKEROM_ARM9:r).LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayDefs "$(MAKEROM_ARM9:r)_defs.LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayTable "$(MAKEROM_ARM9:r)_table.LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
}
|
||||
|
||||
Arm7.Ltd
|
||||
{
|
||||
Static "$(MAKEROM_ARM7_BASE:r).LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
}
|
||||
|
||||
Property
|
||||
{
|
||||
###
|
||||
### Settings for FinalROM
|
||||
###
|
||||
#### BEGIN
|
||||
#
|
||||
# TITLE NAME: Your product name within 12bytes
|
||||
#
|
||||
#TitleName "YourAppName"
|
||||
|
||||
#
|
||||
# MAKER CODE: Your company ID# in 2 ascii words
|
||||
# issued by NINTENDO
|
||||
#
|
||||
#MakerCode "00"
|
||||
|
||||
#
|
||||
# REMASTER VERSION: Mastering version
|
||||
#
|
||||
#RomVersion 0
|
||||
|
||||
#
|
||||
# ROM SPEED TYPE: [MROM/1TROM/UNDEFINED]
|
||||
#
|
||||
RomSpeedType $(MAKEROM_ROMSPEED)
|
||||
|
||||
#
|
||||
# ROM SIZE: in bit [64M/128M/256M/512M/1G/2G]
|
||||
#
|
||||
#RomSize 128M
|
||||
#RomSize 256M
|
||||
|
||||
#
|
||||
# ROM PADDING: TRUE if finalrom
|
||||
#
|
||||
#RomFootPadding TRUE
|
||||
|
||||
#
|
||||
# ROM HEADER TEMPLATE: Provided to every product by NINTENDO
|
||||
#
|
||||
#RomHeaderTemplate ./etc/rom_header.template.sbin
|
||||
|
||||
#
|
||||
# BANNER FILE: generated from Banner Spec File
|
||||
#
|
||||
#BannerFile ./etc/myGameBanner.bnr
|
||||
BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr
|
||||
|
||||
###
|
||||
### Setting for TWL
|
||||
###
|
||||
#
|
||||
# BANNER FILE:
|
||||
#
|
||||
BannerTWLFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr
|
||||
|
||||
#
|
||||
# Boot allowed Media: [GameCard/NAND/SDCard/DownloadPlay]
|
||||
# possible to choose one or more.
|
||||
#
|
||||
BootMedia GameCard NAND SDCard DownloadPlay
|
||||
|
||||
#
|
||||
# Certification FILE:
|
||||
#
|
||||
Certificate $(TWLSDK_ROOT)/include/twl/specfiles/default_sgn.sbin
|
||||
|
||||
#
|
||||
# Digest parameters:
|
||||
#
|
||||
DigestParam 1024 32
|
||||
|
||||
#
|
||||
# WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD]
|
||||
# don't have to edit
|
||||
#
|
||||
WramMapping $(MAKEROM_WRAM_MAPPING)
|
||||
|
||||
#
|
||||
# Codec mode:
|
||||
# don't have to edit
|
||||
#
|
||||
CodecMode $(MAKEROM_CODEC_MODE)
|
||||
|
||||
###
|
||||
#### END
|
||||
}
|
||||
|
||||
RomSpec
|
||||
{
|
||||
Offset 0x00000000
|
||||
Segment ALL
|
||||
HostRoot ../../data
|
||||
Root /data
|
||||
File NTR_IPL_font_m.NFTR
|
||||
}
|
||||
296
build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c
Normal file
296
build/systemMenu_RED/MachineSettings/ARM9/src/MachineSetting.c
Normal file
@ -0,0 +1,296 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: mainMenu.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 "misc.h"
|
||||
#include "MachineSetting.h"
|
||||
#include "spi.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
// キャンセルボタンLCD領域
|
||||
#define CANCEL_BUTTON_LT_X ( 12 * 8 )
|
||||
#define CANCEL_BUTTON_LT_Y ( 21 * 8 )
|
||||
#define CANCEL_BUTTON_RB_X ( (CANCEL_BUTTON_LT_X + 8) * 8 )
|
||||
#define CANCEL_BUTTON_RB_Y ( (CANCEL_BUTTON_LT_Y + 2) * 8 )
|
||||
// OKボタンLCD領域
|
||||
#define OK_BUTTON_LT_X ( 22 * 8 )
|
||||
#define OK_BUTTON_LT_Y ( 21 * 8 )
|
||||
#define OK_BUTTON_RB_X ( (OK_BUTTON_LT_X + 8) * 8 )
|
||||
#define OK_BUTTON_RB_Y ( (OK_BUTTON_LT_Y + 2) * 8 )
|
||||
|
||||
|
||||
#define SETTING_MENU_ELEMENT_NUM 4 // メインメニューの項目数
|
||||
|
||||
// extern data------------------------------------------
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
static BOOL InitialSetting( void );
|
||||
static void InitialSettingFinalizeInit( void );
|
||||
static int InitialSettingFinalizeMain( void );
|
||||
|
||||
// global variable -------------------------------------
|
||||
BOOL g_initialSet = FALSE;
|
||||
|
||||
// static variable -------------------------------------
|
||||
static u16 s_csr = 0;
|
||||
static const u16 *s_pStrSetting[ SETTING_MENU_ELEMENT_NUM ]; // メインメニュー用文字テーブルへのポインタリスト
|
||||
|
||||
// const data -----------------------------------------
|
||||
|
||||
|
||||
//===============================================
|
||||
// mainMenu.c
|
||||
//===============================================
|
||||
static const u16 *const s_pStrSettingElemTbl[ SETTING_MENU_ELEMENT_NUM ][ LANG_CODE_MAX ] = {
|
||||
{
|
||||
(const u16 *)L"言語",
|
||||
(const u16 *)L"LANGUAGE",
|
||||
(const u16 *)L"LANGUAGE(F)",
|
||||
(const u16 *)L"LANGUAGE(G)",
|
||||
(const u16 *)L"LANGUAGE(I)",
|
||||
(const u16 *)L"LANGUAGE(S)",
|
||||
},
|
||||
{
|
||||
(const u16 *)L"日付 & 時刻",
|
||||
(const u16 *)L"DATE & TIME",
|
||||
(const u16 *)L"DATE & TIME(F)",
|
||||
(const u16 *)L"DATE & TIME(G)",
|
||||
(const u16 *)L"DATE & TIME(I)",
|
||||
(const u16 *)L"DATE & TIME(S)",
|
||||
},
|
||||
{
|
||||
(const u16 *)L"ユーザー情報",
|
||||
(const u16 *)L"USER INFORMATION",
|
||||
(const u16 *)L"USER INFORMATION(F)",
|
||||
(const u16 *)L"USER INFORMATION(G)",
|
||||
(const u16 *)L"USER INFORMATION(I)",
|
||||
(const u16 *)L"USER INFORMATION(S)",
|
||||
},
|
||||
{
|
||||
(const u16 *)L"タッチパネル補正",
|
||||
(const u16 *)L"TOUCH PANEL",
|
||||
(const u16 *)L"TOUCH PANEL(F)",
|
||||
(const u16 *)L"TOUCH PANEL(G)",
|
||||
(const u16 *)L"TOUCH PANEL(I)",
|
||||
(const u16 *)L"TOUCH PANEL(S)",
|
||||
},
|
||||
};
|
||||
|
||||
static MenuPos s_settingPos[] = {
|
||||
{ TRUE, 4 * 8, 8 * 8 },
|
||||
{ TRUE, 4 * 8, 10 * 8 },
|
||||
{ FALSE, 4 * 8, 12 * 8 },
|
||||
{ TRUE, 4 * 8, 14 * 8 },
|
||||
};
|
||||
|
||||
|
||||
static const MenuParam s_settingParam = {
|
||||
SETTING_MENU_ELEMENT_NUM,
|
||||
TXT_COLOR_BLACK,
|
||||
TXT_COLOR_GREEN,
|
||||
TXT_COLOR_RED,
|
||||
&s_settingPos[ 0 ],
|
||||
(const u16 **)&s_pStrSetting,
|
||||
};
|
||||
|
||||
//======================================================
|
||||
// メインメニュー
|
||||
//======================================================
|
||||
|
||||
// メインメニューの初期化
|
||||
void MachineSettingInit( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// 初回起動シーケンス
|
||||
if( InitialSetting() ) {
|
||||
return;
|
||||
}
|
||||
|
||||
GX_DispOff();
|
||||
GXS_DispOff();
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
|
||||
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"MACHINE SETTINGS" );
|
||||
#ifdef __NCD_CLEAR_ENABLE
|
||||
(void)PutStringUTF16( 18 * 8, 21 * 8, TXT_COLOR_BLACK, (const u16 *)L"[START]:NCD clear.");
|
||||
#endif /* __NCD_CLEAR_ENABLE */
|
||||
|
||||
// NITRO設定データのlanguageに応じたメインメニュー構成言語の切り替え
|
||||
for( i = 0; i < SETTING_MENU_ELEMENT_NUM; i++ ) {
|
||||
s_pStrSetting[ i ] = s_pStrSettingElemTbl[ i ][ GetNCDWork()->option.language ];
|
||||
}
|
||||
|
||||
DrawMenu( s_csr, &s_settingParam );
|
||||
|
||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||
|
||||
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 );
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||
GX_DispOn();
|
||||
GXS_DispOn();
|
||||
|
||||
g_pNowProcess = MachineSettingMain;
|
||||
}
|
||||
|
||||
|
||||
// メインメニュー
|
||||
int MachineSettingMain( void )
|
||||
{
|
||||
BOOL tp_select;
|
||||
|
||||
GetAndDrawRtcData();
|
||||
ReadTpData();
|
||||
|
||||
//--------------------------------------
|
||||
// キー入力処理
|
||||
//--------------------------------------
|
||||
if( pad.trg & PAD_KEY_DOWN ){ // カーソルの移動
|
||||
if( ++s_csr == SETTING_MENU_ELEMENT_NUM ) {
|
||||
s_csr=0;
|
||||
}
|
||||
}
|
||||
if( pad.trg & PAD_KEY_UP ){
|
||||
if( --s_csr & 0x80 ) {
|
||||
s_csr=SETTING_MENU_ELEMENT_NUM - 1;
|
||||
}
|
||||
}
|
||||
tp_select = SelectMenuByTP( &s_csr, &s_settingParam );
|
||||
DrawMenu( s_csr, &s_settingParam );
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || ( tp_select ) ) { // メニュー項目への分岐
|
||||
if( s_settingPos[ s_csr ].enable ) {
|
||||
switch( s_csr ) {
|
||||
case 0:
|
||||
SelectLanguageInit();
|
||||
g_pNowProcess = SelectLanguageMain;
|
||||
break;
|
||||
case 1:
|
||||
SetRTCInit();
|
||||
g_pNowProcess = SetRTCMain;
|
||||
break;
|
||||
case 2:
|
||||
// SetOwnerInfoInit();
|
||||
// g_pNowProcess = SetOwnerInfoMain;
|
||||
break;
|
||||
case 3:
|
||||
TP_CalibrationInit();
|
||||
g_pNowProcess = TP_CalibrationMain;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __NCD_CLEAR_ENABLE
|
||||
if( pad.trg & PAD_BUTTON_START ) {
|
||||
SVC_CpuClearFast( 0x0000, GetNCDWork(), sizeof(NitroConfigData) );
|
||||
(void)SPI_NvramWriteEnable();
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramPageErase( 0x3fe00 );
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramWriteEnable();
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramPageErase( 0x3ff00 );
|
||||
SVC_WaitVBlankIntr();
|
||||
(void)SPI_NvramWriteDisable();
|
||||
OS_TPrintf("NitroConfigData zero clear!!\n");
|
||||
}
|
||||
#endif /* __NCD_CLEAR_ENABLE */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
// OK / CANCELボタンの描画
|
||||
void DrawOKCancelButton(void)
|
||||
{
|
||||
(void)PutStringUTF16( CANCEL_BUTTON_LT_X, CANCEL_BUTTON_LT_Y, TXT_COLOR_CYAN, (const u16 *)L" CANCEL ");
|
||||
(void)PutStringUTF16( OK_BUTTON_LT_X, OK_BUTTON_LT_Y, TXT_COLOR_CYAN, (const u16 *)L" OK ");
|
||||
}
|
||||
|
||||
|
||||
// OK or CANCELボタン押下チェック
|
||||
void CheckOKCancelButton(BOOL *tp_ok, BOOL *tp_cancel)
|
||||
{
|
||||
*tp_cancel = InRangeTp( CANCEL_BUTTON_LT_X, CANCEL_BUTTON_LT_Y - 4,
|
||||
CANCEL_BUTTON_RB_X, CANCEL_BUTTON_RB_Y - 4, &tpd.disp );
|
||||
*tp_ok = InRangeTp( OK_BUTTON_LT_X, OK_BUTTON_LT_Y - 4,
|
||||
OK_BUTTON_RB_X, OK_BUTTON_RB_Y - 4, &tpd.disp );
|
||||
}
|
||||
|
||||
|
||||
//---------------------------------------------------------
|
||||
//
|
||||
// 設定終了
|
||||
//
|
||||
//---------------------------------------------------------
|
||||
|
||||
// 初回起動シーケンス
|
||||
static BOOL InitialSetting( void )
|
||||
{
|
||||
#if 0
|
||||
if(GetNCDWork()->option.input_language == 0) { // 言語設定がまだ。
|
||||
g_initialSet = TRUE;
|
||||
s_csr = 2;
|
||||
SelectLangageInit();
|
||||
g_pNowProcess = SelectLanguageMain;
|
||||
return TRUE;
|
||||
}else if(GetNCDWork()->option.input_tp == 0) { // TPキャリブレーションがまだ。
|
||||
g_initialSet = TRUE;
|
||||
s_csr = 3;
|
||||
TP_CalibrationInit();
|
||||
g_pNowProcess = TP_CalibrationMain;
|
||||
return TRUE;
|
||||
}else if(GetNCDWork()->option.input_rtc == 0) { // RTC設定がまだ。
|
||||
ClearRTC();
|
||||
g_initialSet = TRUE;
|
||||
s_csr = 1;
|
||||
SetRTCInit();
|
||||
g_pNowProcess = SetRTCMain;
|
||||
return TRUE;
|
||||
}else if( (GetNCDWork()->option.input_nickname == 0) // ニックネームまたは好きな色入力がまだ。
|
||||
|| (GetNCDWork()->option.input_favoriteColor == 0) ) {
|
||||
/* g_initialSet = TRUE;
|
||||
s_csr = 0;
|
||||
SetOwnerInfoInit();
|
||||
g_pNowProcess = SetOwnerInfoMain;
|
||||
return TRUE;
|
||||
*/ }
|
||||
|
||||
if( g_initialSet ) {
|
||||
InitialSettingFinalizeInit();
|
||||
g_pNowProcess = InitialSettingFinalizeMain();
|
||||
return TRUE;
|
||||
}
|
||||
#endif
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static void InitialSettingFinalizeInit( void )
|
||||
{
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
(void)PutStringUTF16( 6 * 8, 10 * 8, TXT_COLOR_BLACK, (const u16 *)L" Initial setting completed.");
|
||||
(void)PutStringUTF16( 6 * 8, 12 * 8, TXT_COLOR_BLACK, (const u16 *)L" Please reboot.");
|
||||
}
|
||||
|
||||
|
||||
static int InitialSettingFinalizeMain( void )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: DS_Setting/DS_Setting.h
|
||||
File: MachineSetting.h
|
||||
|
||||
Copyright 2007 Nintendo. All rights reserved.
|
||||
|
||||
@ -15,8 +15,8 @@
|
||||
$Author$
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef __DS_SETTING_H__
|
||||
#define __DS_SETTING_H__
|
||||
#ifndef __MACHINE_SETTING_H__
|
||||
#define __MACHINE_SETTING_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
@ -24,8 +24,7 @@ extern "C" {
|
||||
|
||||
|
||||
#include <twl.h>
|
||||
#include "font.h"
|
||||
#include "unicode.h"
|
||||
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
#define TP_CSR_TOUCH_COUNT 2 // TPカーソルのチャタリング吸収のためのカウント値
|
||||
@ -49,35 +48,23 @@ typedef struct InputNumParam {
|
||||
}InputNumParam;
|
||||
|
||||
// global variable------------------------------------------------------
|
||||
extern u16 csrMenu;
|
||||
extern BOOL initialSet;
|
||||
extern NNSFndAllocator g_allocator;
|
||||
extern BOOL g_initialSet;
|
||||
extern int (*g_pNowProcess)( void );
|
||||
|
||||
// function-------------------------------------------------------------
|
||||
extern int DS_SettingMain( void );
|
||||
extern void MachineSettingInit( void );
|
||||
extern int MachineSettingMain( void );
|
||||
extern void SetOwnerInfoInit( void );
|
||||
extern int SetOwnerInfoMain( void );
|
||||
extern void SetRTCInit( void );
|
||||
extern int SetRTCMain( void );
|
||||
extern void SelectLanguageInit( void );
|
||||
extern int SelectLanguageMain( void );
|
||||
extern void TP_CalibrationInit( void );
|
||||
extern int TP_CalibrationMain( void );
|
||||
|
||||
extern void SEQ_MainMenu_init(void);
|
||||
extern int SEQ_MainMenu(void);
|
||||
extern void SEQ_Setting_init(void);
|
||||
extern int SEQ_Setting(void);
|
||||
extern void SEQ_OwnerInfo_init(void);
|
||||
extern int SEQ_OwnerInfo(void);
|
||||
extern void SEQ_RtcSet_init(void);
|
||||
extern int SEQ_RtcSet(void);
|
||||
extern void SEQ_LangSelect_init(void);
|
||||
extern int SEQ_LangSelect(void);
|
||||
extern void SEQ_TP_Calibration_init(void);
|
||||
extern int SEQ_TP_Calibration(void);
|
||||
extern void SEQ_AgbLcdSelect_init(void);
|
||||
extern int SEQ_AgbLcdSelect(void);
|
||||
extern void SEQ_AutoBootSelect_init(void);
|
||||
extern int SEQ_AutoBootSelect(void);
|
||||
|
||||
extern void DrawMenu(u16 nowCsr, const MenuComponent *menu);
|
||||
extern BOOL SelectMenuByTp(u16 *nowCsr, const MenuComponent *menu);
|
||||
//extern BOOL InRangeTp(u16 lt_x, u16 lt_y, u16 rb_x, u16 rb_y, TPData *tgt);
|
||||
extern BOOL InRangeTp(int lt_x, int lt_y, int rb_x, int rb_y, TPData *tgt);
|
||||
|
||||
extern void DrawOKCancelButton(void);
|
||||
extern void DrawOKCancelButton( void );
|
||||
extern void CheckOKCancelButton(BOOL *tp_ok, BOOL *tp_cancel);
|
||||
extern void InputDecimal(int *tgtp, InputNumParam *inpp);
|
||||
|
||||
@ -87,4 +74,4 @@ extern void ClearRTC( void );
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif // __DS_SETTING_H__
|
||||
#endif // __MACHINE_SETTING_H__
|
||||
@ -1,6 +1,6 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: tpCalib.c
|
||||
File: calibrationTP.c
|
||||
|
||||
Copyright 2007 Nintendo. All rights reserved.
|
||||
|
||||
@ -16,28 +16,27 @@
|
||||
*---------------------------------------------------------------------------*/
|
||||
|
||||
#include <twl.h>
|
||||
#include <sysmenu.h>
|
||||
#include "misc.h"
|
||||
#include "DS_Setting.h"
|
||||
#include "MachineSetting.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
// OKボタンLCD領域
|
||||
#define OK_BUTTON_LT_X 2
|
||||
#define OK_BUTTON_LT_Y 20
|
||||
#define OK_BUTTON_RB_X (OK_BUTTON_LT_X + 8)
|
||||
#define OK_BUTTON_RB_Y (OK_BUTTON_LT_Y + 2)
|
||||
#define OK_BUTTON_TOP_X ( 2 * 8 )
|
||||
#define OK_BUTTON_TOP_Y ( 20 * 8 )
|
||||
#define OK_BUTTON_BOTTOM_X ( (OK_BUTTON_TOP_X + 8) * 8 )
|
||||
#define OK_BUTTON_BOTTOM_Y ( (OK_BUTTON_TOP_Y + 2) * 8 )
|
||||
|
||||
// キャンセルボタンLCD領域
|
||||
#define CANCEL_BUTTON_LT_X 11
|
||||
#define CANCEL_BUTTON_LT_Y 20
|
||||
#define CANCEL_BUTTON_RB_X (CANCEL_BUTTON_LT_X+8)
|
||||
#define CANCEL_BUTTON_RB_Y (CANCEL_BUTTON_LT_Y+2)
|
||||
#define CANCEL_BUTTON_TOP_X ( 11 * 8 )
|
||||
#define CANCEL_BUTTON_TOP_Y ( 20 * 8 )
|
||||
#define CANCEL_BUTTON_BOTTOM_X ( (CANCEL_BUTTON_TOP_X+8) * 8 )
|
||||
#define CANCEL_BUTTON_BOTTOM_Y ( (CANCEL_BUTTON_TOP_Y+2) * 8 )
|
||||
|
||||
// リトライボタンLCD領域
|
||||
#define RETRY_BUTTON_LT_X 20
|
||||
#define RETRY_BUTTON_LT_Y 20
|
||||
#define RETRY_BUTTON_RB_X (RETRY_BUTTON_LT_X+8)
|
||||
#define RETRY_BUTTON_RB_Y (RETRY_BUTTON_LT_Y+2)
|
||||
#define RETRY_BUTTON_TOP_X ( 20 * 8 )
|
||||
#define RETRY_BUTTON_TOP_Y ( 20 * 8 )
|
||||
#define RETRY_BUTTON_BOTTOM_X ( (RETRY_BUTTON_TOP_X+8) * 8 )
|
||||
#define RETRY_BUTTON_BOTTOM_Y ( (RETRY_BUTTON_TOP_Y+2) * 8 )
|
||||
|
||||
// キャリブレーション用OBJデータ
|
||||
const u16 bitmapOBJPoint[8 * 8 * 5];
|
||||
@ -51,13 +50,16 @@ const u16 bitmapOBJPoint[8 * 8 * 5];
|
||||
#define DISP_X_SIZE 256
|
||||
#define DISP_Y_SIZE 192
|
||||
|
||||
// キャリブレーションシーケンス番号(CalibWork.seqの値)
|
||||
enum {
|
||||
SEQ_INIT=0, SEQ_INTERVAL_0,
|
||||
SEQ_CALIBRATE_1, SEQ_INTERVAL_1,
|
||||
SEQ_CALIBRATE_2, SEQ_INTERVAL_2,
|
||||
SEQ_CHECK_PARAM, SEQ_INTERVAL_3,
|
||||
SEQ_GET_POINT
|
||||
INIT=0,
|
||||
INTERVAL_0,
|
||||
CALIBRATE_1,
|
||||
INTERVAL_1,
|
||||
CALIBRATE_2,
|
||||
INTERVAL_2,
|
||||
CHECK_PARAM,
|
||||
INTERVAL_3,
|
||||
GET_POINT
|
||||
};
|
||||
|
||||
// キャリブレーション設定ワーク
|
||||
@ -74,9 +76,6 @@ typedef struct CalibWork {
|
||||
// extern data------------------------------------------
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
void SEQ_TP_Calibration_init(void);
|
||||
int SEQ_TP_Calibration(void);
|
||||
|
||||
static void DisplayInit();
|
||||
static BOOL GetSamplePointNow(TPData *data);
|
||||
static BOOL WaitPanelReleaseNow( void );
|
||||
@ -85,7 +84,8 @@ static void ReturnMenu(void);
|
||||
// global variable -------------------------------------
|
||||
|
||||
// static variable -------------------------------------
|
||||
static CalibWork *cw;
|
||||
static CalibWork *s_pCw;
|
||||
static GXOamAttr s_oamBak[ 128 ] ATTRIBUTE_ALIGN(32); // OAM バックアップ
|
||||
|
||||
// const data -----------------------------------------
|
||||
|
||||
@ -105,7 +105,7 @@ static CalibWork *cw;
|
||||
*---------------------------------------------------------------------------*/
|
||||
static inline void SetPoint8x8(u16 pos_x, u16 pos_y)
|
||||
{
|
||||
G2_SetOBJAttr( &oamBakS[0], // OAM number
|
||||
G2_SetOBJAttr( &s_oamBak[0], // OAM number
|
||||
pos_x - 4, // X position
|
||||
pos_y - 4, // Y position
|
||||
0, // Priority
|
||||
@ -132,7 +132,7 @@ static inline void SetPoint8x8(u16 pos_x, u16 pos_y)
|
||||
*---------------------------------------------------------------------------*/
|
||||
static inline void SetPoint16x16(u16 pos_x, u16 pos_y)
|
||||
{
|
||||
G2_SetOBJAttr( &oamBakS[0], // OAM number
|
||||
G2_SetOBJAttr( &s_oamBak[0], // OAM number
|
||||
pos_x - 8, // X position
|
||||
pos_y - 8, // Y position
|
||||
0, // Priority
|
||||
@ -158,9 +158,9 @@ static inline void SetPoint16x16(u16 pos_x, u16 pos_y)
|
||||
*---------------------------------------------------------------------------*/
|
||||
static void DisplayInit()
|
||||
{
|
||||
GXS_SetOBJVRamModeBmp(GX_OBJVRAMMODE_BMP_1D_128K); // 2D mapping OBJ
|
||||
GX_SetOBJVRamModeBmp( GX_OBJVRAMMODE_BMP_1D_128K ); // 2D mapping OBJ
|
||||
/* Load charactor bitmap data */
|
||||
GXS_LoadOBJ( (const void *)IMAGE_DATA, 0x3000 /* 0 */, IMAGE_DATA_SIZE ); // Transfer OBJ bitmap data to VRAM
|
||||
GX_LoadOBJ( (const void *)IMAGE_DATA, 0x3000 /* 0 */, IMAGE_DATA_SIZE ); // Transfer OBJ bitmap data to VRAM
|
||||
}
|
||||
|
||||
|
||||
@ -188,55 +188,55 @@ static BOOL GetSamplePointNow(TPData *data)
|
||||
while (TP_RequestRawSampling( &temp )) { };
|
||||
|
||||
if (! temp.touch ) {
|
||||
cw->touch_count = 0;
|
||||
s_pCw->touch_count = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( temp.validity != TP_VALIDITY_VALID ) {
|
||||
cw->touch_count = 0;
|
||||
s_pCw->touch_count = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
OS_Printf("( %d, %d )\n", temp.x, temp.y);
|
||||
|
||||
cw->touch_count++;
|
||||
if ( cw->touch_count == 1 ) {
|
||||
cw->last_x = temp.x;
|
||||
cw->last_y = temp.y;
|
||||
s_pCw->touch_count++;
|
||||
if ( s_pCw->touch_count == 1 ) {
|
||||
s_pCw->last_x = temp.x;
|
||||
s_pCw->last_y = temp.y;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// if jump point from last frame, reset count.
|
||||
if ( (s32)(cw->last_x - temp.x) < - OK_RANGE ||
|
||||
(s32)(cw->last_x - temp.x) > OK_RANGE )
|
||||
if ( (s32)(s_pCw->last_x - temp.x) < - OK_RANGE ||
|
||||
(s32)(s_pCw->last_x - temp.x) > OK_RANGE )
|
||||
{
|
||||
cw->touch_count = 1;
|
||||
cw->last_x = temp.x;
|
||||
cw->last_y = temp.y;
|
||||
s_pCw->touch_count = 1;
|
||||
s_pCw->last_x = temp.x;
|
||||
s_pCw->last_y = temp.y;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
if ( (s32)(cw->last_y - temp.y) < - OK_RANGE ||
|
||||
(s32)(cw->last_y - temp.y) > OK_RANGE )
|
||||
if ( (s32)(s_pCw->last_y - temp.y) < - OK_RANGE ||
|
||||
(s32)(s_pCw->last_y - temp.y) > OK_RANGE )
|
||||
{
|
||||
cw->touch_count = 1;
|
||||
cw->last_x = temp.x;
|
||||
cw->last_y = temp.y;
|
||||
s_pCw->touch_count = 1;
|
||||
s_pCw->last_x = temp.x;
|
||||
s_pCw->last_y = temp.y;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// if the point pressed during OK_COUNT, detect finish.
|
||||
if ( cw->touch_count == OK_COUNT ) {
|
||||
data->x = (u16) ( (temp.x + cw->last_x) / 2 );
|
||||
data->y = (u16) ( (temp.y + cw->last_y) / 2 );
|
||||
if ( s_pCw->touch_count == OK_COUNT ) {
|
||||
data->x = (u16) ( (temp.x + s_pCw->last_x) / 2 );
|
||||
data->y = (u16) ( (temp.y + s_pCw->last_y) / 2 );
|
||||
data->touch = TP_TOUCH_ON;
|
||||
data->validity = TP_VALIDITY_VALID;
|
||||
cw->touch_count=0;
|
||||
s_pCw->touch_count=0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
cw->last_x = temp.x;
|
||||
cw->last_y = temp.y;
|
||||
s_pCw->last_x = temp.x;
|
||||
s_pCw->last_y = temp.y;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -266,13 +266,13 @@ static BOOL WaitPanelReleaseNow( void )
|
||||
};
|
||||
|
||||
if ( temp.touch ) {
|
||||
cw->release_count = 0;
|
||||
s_pCw->release_count = 0;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
cw->release_count++;
|
||||
if ( cw->release_count >= INTERVAL_CNT ) {
|
||||
cw->release_count = 0;
|
||||
s_pCw->release_count++;
|
||||
if ( s_pCw->release_count >= INTERVAL_CNT ) {
|
||||
s_pCw->release_count = 0;
|
||||
return TRUE;
|
||||
} else {
|
||||
return FALSE;
|
||||
@ -281,7 +281,7 @@ static BOOL WaitPanelReleaseNow( void )
|
||||
|
||||
|
||||
/*---------------------------------------------------------------------------*
|
||||
Name: SEQ_TP_Calibration
|
||||
Name: TP_Calibration
|
||||
|
||||
Description: Initialization and main loop
|
||||
|
||||
@ -289,97 +289,101 @@ static BOOL WaitPanelReleaseNow( void )
|
||||
|
||||
Returns: None.
|
||||
*---------------------------------------------------------------------------*/
|
||||
int SEQ_TP_Calibration(void)
|
||||
int TP_CalibrationMain( void )
|
||||
{
|
||||
BOOL tp_ok = FALSE;
|
||||
BOOL tp_cancel = FALSE;
|
||||
BOOL tp_retry = FALSE;
|
||||
|
||||
switch (cw->seq) {
|
||||
case SEQ_INIT:
|
||||
mf_clearRect(0, 20, 4, 32);
|
||||
cw->seq=SEQ_INTERVAL_0;
|
||||
(void)DrawStringSJIS( 2, 21, CYAN,(const u8 *)"[B]:CANCEL");
|
||||
switch (s_pCw->seq) {
|
||||
case INIT:
|
||||
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE,
|
||||
0 * 8 , 20 * 8, 32 * 8, 4 * 8 );
|
||||
s_pCw->seq = INTERVAL_0;
|
||||
PutStringUTF16( 2 * 8, 21 * 8, TXT_COLOR_CYAN, (const u16 *)L"[B]:CANCEL" );
|
||||
break;
|
||||
|
||||
case SEQ_INTERVAL_0:
|
||||
case INTERVAL_0:
|
||||
// wait release TouchPanel
|
||||
if ( WaitPanelReleaseNow() ) {
|
||||
cw->seq=SEQ_CALIBRATE_1;
|
||||
s_pCw->seq = CALIBRATE_1;
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_CALIBRATE_1:
|
||||
case CALIBRATE_1:
|
||||
// detect first point.
|
||||
SetPoint8x8(32, 32);
|
||||
if ( GetSamplePointNow(&cw->sample[0]) ) {
|
||||
OS_Printf("OK! ( %d, %d )\n", cw->sample[0].x, cw->sample[0].y);
|
||||
cw->seq = SEQ_INTERVAL_1;
|
||||
SetPoint8x8( 32, 32 );
|
||||
if ( GetSamplePointNow( &s_pCw->sample[ 0 ] ) ) {
|
||||
OS_Printf( "OK! ( %d, %d )\n", s_pCw->sample[0].x, s_pCw->sample[0].y );
|
||||
s_pCw->seq = INTERVAL_1;
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_INTERVAL_1:
|
||||
case INTERVAL_1:
|
||||
// wait release TouchPanel
|
||||
if ( WaitPanelReleaseNow() ) {
|
||||
cw->seq = SEQ_CALIBRATE_2;
|
||||
s_pCw->seq = CALIBRATE_2;
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_CALIBRATE_2:
|
||||
case CALIBRATE_2:
|
||||
// detect second point.
|
||||
SetPoint8x8( DISP_X_SIZE - 32, DISP_Y_SIZE - 32 );
|
||||
if ( GetSamplePointNow(&cw->sample[1]) ) {
|
||||
OS_Printf("OK! ( %d, %d )\n", cw->sample[1].x, cw->sample[1].y);
|
||||
if ( GetSamplePointNow( &s_pCw->sample[ 1 ] ) ) {
|
||||
OS_Printf( "OK! ( %d, %d )\n", s_pCw->sample[1].x, s_pCw->sample[1].y );
|
||||
// Calculate and set calibration parameter from two detected point.
|
||||
(void)TP_CalcCalibrateParam( &cw->calibrate,
|
||||
cw->sample[0].x, cw->sample[0].y, 32, 32,
|
||||
cw->sample[1].x, cw->sample[1].y, DISP_X_SIZE - 32, DISP_Y_SIZE - 32 );
|
||||
TP_SetCalibrateParam( &cw->calibrate );
|
||||
(void)TP_CalcCalibrateParam(
|
||||
&s_pCw->calibrate,
|
||||
s_pCw->sample[0].x, s_pCw->sample[0].y, 32, 32,
|
||||
s_pCw->sample[1].x, s_pCw->sample[1].y, DISP_X_SIZE - 32, DISP_Y_SIZE - 32 );
|
||||
TP_SetCalibrateParam( &s_pCw->calibrate );
|
||||
|
||||
OS_Printf("Calibrate param: \n");
|
||||
OS_Printf("\tx = %d, xDotSize = %d\n", cw->calibrate.x0, cw->calibrate.xDotSize / 0x100);
|
||||
OS_Printf("\ty = %d, yDotSize = %d\n", cw->calibrate.y0, cw->calibrate.yDotSize / 0x100);
|
||||
OS_Printf("Check calibrate param\n");
|
||||
OS_Printf( "Calibrate param: \n" );
|
||||
OS_Printf( "\tx = %d, xDotSize = %d\n", s_pCw->calibrate.x0, s_pCw->calibrate.xDotSize / 0x100 );
|
||||
OS_Printf( "\ty = %d, yDotSize = %d\n", s_pCw->calibrate.y0, s_pCw->calibrate.yDotSize / 0x100 );
|
||||
OS_Printf( "Check calibrate param\n" );
|
||||
|
||||
cw->seq = SEQ_INTERVAL_2;
|
||||
s_pCw->seq = INTERVAL_2;
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_INTERVAL_2:
|
||||
case INTERVAL_2:
|
||||
// Wait release TouchPanel
|
||||
if ( WaitPanelReleaseNow() ) {
|
||||
cw->seq = SEQ_CHECK_PARAM;
|
||||
s_pCw->seq = CHECK_PARAM;
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_CHECK_PARAM:
|
||||
case CHECK_PARAM:
|
||||
// Verify Calibrattion Parameter.
|
||||
SetPoint8x8( DISP_X_SIZE / 2, DISP_Y_SIZE / 2 );
|
||||
if ( GetSamplePointNow(&tpd.raw) ) {
|
||||
if ( GetSamplePointNow( &tpd.raw ) ) {
|
||||
TP_GetUnCalibratedPoint( &tpd.disp.x, &tpd.disp.y, DISP_X_SIZE / 2, DISP_Y_SIZE / 2 );
|
||||
cw->seq = SEQ_GET_POINT;
|
||||
mf_clearRect( 2, 21, 2, 10);
|
||||
(void)DrawStringSJIS( OK_BUTTON_LT_X, OK_BUTTON_LT_Y, HIGHLIGHT_C, (const u8 *)" OK ");
|
||||
(void)DrawStringSJIS( CANCEL_BUTTON_LT_X, CANCEL_BUTTON_LT_Y, HIGHLIGHT_C, (const u8 *)" CANCEL ");
|
||||
(void)DrawStringSJIS( RETRY_BUTTON_LT_X, RETRY_BUTTON_LT_Y, HIGHLIGHT_C, (const u8 *)" RETRY ");
|
||||
(void)DrawStringSJIS( (u16)(OK_BUTTON_LT_X + 2), (u16)(OK_BUTTON_LT_Y + 2), CYAN,(const u8 *)"[A]");
|
||||
(void)DrawStringSJIS( (u16)(CANCEL_BUTTON_LT_X + 2), (u16)(CANCEL_BUTTON_LT_Y + 2), CYAN,(const u8 *)"[B]");
|
||||
(void)DrawStringSJIS( (u16)(RETRY_BUTTON_LT_X), (u16)(RETRY_BUTTON_LT_Y + 2), CYAN,(const u8 *)"[START]");
|
||||
s_pCw->seq = GET_POINT;
|
||||
|
||||
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE,
|
||||
2 * 8 , 21 * 8, 10 * 8, 2 * 8 );
|
||||
PutStringUTF16( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" OK ");
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" CANCEL ");
|
||||
PutStringUTF16( RETRY_BUTTON_TOP_X, RETRY_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" RETRY ");
|
||||
PutStringUTF16( OK_BUTTON_TOP_X + 2 * 8, OK_BUTTON_TOP_Y + 2 * 8, TXT_COLOR_CYAN, (const u16 *)L"[A]");
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X + 2 * 8, CANCEL_BUTTON_TOP_Y + 2 * 8, TXT_COLOR_CYAN, (const u16 *)L"[B]");
|
||||
PutStringUTF16( RETRY_BUTTON_TOP_X, RETRY_BUTTON_TOP_Y + 2 * 8, TXT_COLOR_CYAN, (const u16 *)L"[START]");
|
||||
{
|
||||
s32 xRange, yRange;
|
||||
xRange = tpd.raw.x - tpd.disp.x;
|
||||
yRange = tpd.raw.y - tpd.disp.y;
|
||||
OS_Printf("OK! ( %d, %d )\n", tpd.raw.x, tpd.raw.y);
|
||||
OS_Printf("Raw ( %d, %d )\n", tpd.disp.x, tpd.disp.y);
|
||||
OS_Printf("\txRange = %d, yRange = %d\n", xRange, yRange);
|
||||
OS_TPrintf( "OK! ( %d, %d )\n", tpd.raw.x, tpd.raw.y );
|
||||
OS_TPrintf( "Raw ( %d, %d )\n", tpd.disp.x, tpd.disp.y );
|
||||
OS_TPrintf( "\txRange = %d, yRange = %d\n", xRange, yRange );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_GET_POINT:
|
||||
case GET_POINT:
|
||||
// Draw Marker by calibrated point.
|
||||
while ( TP_RequestRawSampling( &tpd.raw ) ) {
|
||||
SVC_WaitByLoop(0x400);
|
||||
SVC_WaitByLoop( 0x400 );
|
||||
}
|
||||
TP_GetCalibratedPoint( &tpd.disp, &tpd.raw );
|
||||
|
||||
@ -387,54 +391,54 @@ int SEQ_TP_Calibration(void)
|
||||
SetPoint16x16( tpd.disp.x, tpd.disp.y );
|
||||
|
||||
// [OK] [CANCEL] [RETRY]ボタン押下チェック
|
||||
tp_ok = InRangeTp(OK_BUTTON_LT_X*8, OK_BUTTON_LT_Y*8-4,
|
||||
OK_BUTTON_RB_X*8, OK_BUTTON_RB_Y*8-4, &tpd.disp);
|
||||
tp_cancel = InRangeTp(CANCEL_BUTTON_LT_X*8, CANCEL_BUTTON_LT_Y*8-4,
|
||||
CANCEL_BUTTON_RB_X*8, CANCEL_BUTTON_RB_Y*8-4, &tpd.disp);
|
||||
tp_retry = InRangeTp(RETRY_BUTTON_LT_X*8, RETRY_BUTTON_LT_Y*8-4,
|
||||
RETRY_BUTTON_RB_X*8, RETRY_BUTTON_RB_Y*8-4, &tpd.disp);
|
||||
tp_ok = InRangeTp( OK_BUTTON_TOP_X, OK_BUTTON_TOP_Y - 4 * 8,
|
||||
OK_BUTTON_BOTTOM_X, OK_BUTTON_BOTTOM_Y - 4 * 8, &tpd.disp );
|
||||
tp_cancel = InRangeTp( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y - 4 * 8,
|
||||
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y - 4 * 8, &tpd.disp );
|
||||
tp_retry = InRangeTp( RETRY_BUTTON_TOP_X, RETRY_BUTTON_TOP_Y - 4 * 8,
|
||||
RETRY_BUTTON_BOTTOM_X, RETRY_BUTTON_BOTTOM_Y - 4 * 8, &tpd.disp );
|
||||
|
||||
if(tpd.raw.validity==TP_VALIDITY_VALID) {
|
||||
OS_Printf("( %3d, %3d ) -> ( %4d, %4d )\n", tpd.disp.x, tpd.disp.y, tpd.raw.x, tpd.raw.y);
|
||||
if( tpd.raw.validity==TP_VALIDITY_VALID ) {
|
||||
OS_TPrintf( "( %3d, %3d ) -> ( %4d, %4d )\n", tpd.disp.x, tpd.disp.y, tpd.raw.x, tpd.raw.y );
|
||||
}
|
||||
}
|
||||
|
||||
if((pad.trg & PAD_BUTTON_A) || (tp_ok)) {
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_ok ) {
|
||||
GetSYSMWork()->ncd_invalid = 0;
|
||||
GetNCDWork()->option.input_tp = 1; // タッチパネル入力フラグを立てる。
|
||||
GetNCDWork()->tp.raw_x1 = cw->sample[0].x;
|
||||
GetNCDWork()->tp.raw_y1 = cw->sample[0].y;
|
||||
GetNCDWork()->tp.raw_x1 = s_pCw->sample[0].x;
|
||||
GetNCDWork()->tp.raw_y1 = s_pCw->sample[0].y;
|
||||
GetNCDWork()->tp.dx1 = 32;
|
||||
GetNCDWork()->tp.dy1 = 32;
|
||||
GetNCDWork()->tp.raw_x2 = cw->sample[1].x;
|
||||
GetNCDWork()->tp.raw_y2 = cw->sample[1].y;
|
||||
GetNCDWork()->tp.raw_x2 = s_pCw->sample[1].x;
|
||||
GetNCDWork()->tp.raw_y2 = s_pCw->sample[1].y;
|
||||
GetNCDWork()->tp.dx2 = DISP_X_SIZE - 32;
|
||||
GetNCDWork()->tp.dy2 = DISP_Y_SIZE - 32;
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// NVRAMへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)NVRAMm_WriteNitroConfigData (GetNCDWork());
|
||||
(void)NVRAMm_WriteNitroConfigData( GetNCDWork() );
|
||||
|
||||
ReturnMenu();
|
||||
return 0;
|
||||
}else if((pad.trg & PAD_BUTTON_START) || (tp_retry)) {
|
||||
cw->seq = SEQ_INIT;
|
||||
}else if( ( pad.trg & PAD_BUTTON_START ) || tp_retry ) {
|
||||
s_pCw->seq = INIT;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
/* flush cache of OAM buffers to main memory */
|
||||
DC_FlushRange( oamBakS, sizeof(oamBakS) );
|
||||
|
||||
GXS_LoadOAM( oamBakS, 0, sizeof(oamBakS) );
|
||||
MI_DmaFill32( 3, oamBakS, 192, sizeof(oamBakS) ); // Clear OAM buffer
|
||||
DC_FlushRange( s_oamBak, sizeof(s_oamBak) );
|
||||
GX_LoadOAM( s_oamBak, 0, sizeof(s_oamBak) );
|
||||
MI_DmaFill32( 3, s_oamBak, 192, sizeof(s_oamBak) ); // Clear OAM buffer
|
||||
|
||||
// Bボタンキャンセル
|
||||
if((pad.trg & PAD_BUTTON_B) || (tp_cancel)){
|
||||
(void)TP_CalcCalibrateParam(&cw->calibrate,
|
||||
if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ){
|
||||
(void)TP_CalcCalibrateParam(
|
||||
&s_pCw->calibrate,
|
||||
GetNCDWork()->tp.raw_x1, GetNCDWork()->tp.raw_y1, (u16)GetNCDWork()->tp.dx1, (u16)GetNCDWork()->tp.dy1,
|
||||
GetNCDWork()->tp.raw_x2, GetNCDWork()->tp.raw_y2, (u16)GetNCDWork()->tp.dx2, (u16)GetNCDWork()->tp.dy2);
|
||||
TP_SetCalibrateParam(&cw->calibrate);
|
||||
GetNCDWork()->tp.raw_x2, GetNCDWork()->tp.raw_y2, (u16)GetNCDWork()->tp.dx2, (u16)GetNCDWork()->tp.dy2 );
|
||||
TP_SetCalibrateParam( &s_pCw->calibrate );
|
||||
ReturnMenu();
|
||||
return 0;
|
||||
}
|
||||
@ -444,41 +448,43 @@ int SEQ_TP_Calibration(void)
|
||||
|
||||
|
||||
// メニューに戻る
|
||||
static void ReturnMenu(void)
|
||||
static void ReturnMenu( void )
|
||||
{
|
||||
OS_Free(cw); // キャリブレーション用変数の開放
|
||||
cw = NULL;
|
||||
NNS_FndFreeToAllocator( &g_allocator, s_pCw ); // キャリブレーション用変数の開放
|
||||
s_pCw = NULL;
|
||||
OS_Printf("Free :CalibWork\n");
|
||||
SEQ_MainMenu_init();
|
||||
MachineSettingInit();
|
||||
}
|
||||
|
||||
|
||||
// キャリブレーション設定の初期化
|
||||
void SEQ_TP_Calibration_init(void)
|
||||
void TP_CalibrationInit( void )
|
||||
{
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_NONE);
|
||||
GX_DispOff();
|
||||
GXS_DispOff();
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
|
||||
MI_CpuClearFast(bgBakS, sizeof(bgBakS));
|
||||
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"TOUCH PANEL CALIBRATION" );
|
||||
|
||||
ClearAllStringSJIS();
|
||||
|
||||
(void)DrawStringSJIS( 1, 0, YELLOW, (const u8 *)"TOUCH PANEL CALIBRATION");
|
||||
if( initialSet ) {
|
||||
(void)DrawStringSJIS( 8, 18, RED, (const u8 *)"Calibrate touch panel.");
|
||||
if( g_initialSet ) {
|
||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Calibrate touch panel." );
|
||||
}
|
||||
|
||||
DisplayInit();
|
||||
|
||||
GXS_SetVisiblePlane(GX_PLANEMASK_OBJ | GX_PLANEMASK_BG1);
|
||||
s_pCw = NNS_FndAllocFromAllocator( &g_allocator, sizeof(CalibWork) ); // キャリブレーション用変数の確保
|
||||
if( s_pCw == NULL ) {
|
||||
OS_Panic("ARM9- Fail to allocate memory...\n");
|
||||
}
|
||||
SVC_CpuClear( 0x0000, s_pCw, sizeof(CalibWork), 16 );
|
||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||
|
||||
cw=OS_Alloc(sizeof(CalibWork)); // キャリブレーション用変数の確保
|
||||
#ifdef __IPL2_DEBUG
|
||||
if(cw==NULL) OS_Panic("ARM9- Fail to allocate memory...\n");
|
||||
#endif /* __IPL2_DEBUG */
|
||||
OS_Printf("Alloc :CalibWork\n");
|
||||
SVC_CpuClear(0x0000, cw, sizeof(CalibWork), 16);
|
||||
SVC_CpuClear(0x0000, &tpd, sizeof(TpWork), 16);
|
||||
cw->seq = SEQ_INIT;
|
||||
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 | GX_PLANEMASK_OBJ );
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||
GX_DispOn();
|
||||
GXS_DispOn();
|
||||
|
||||
s_pCw->seq = INIT;
|
||||
}
|
||||
|
||||
|
||||
114
build/systemMenu_RED/MachineSettings/ARM9/src/main.c
Normal file
114
build/systemMenu_RED/MachineSettings/ARM9/src/main.c
Normal file
@ -0,0 +1,114 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: main.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 "misc.h"
|
||||
#include "MachineSetting.h"
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
// define data-----------------------------------------------------------------
|
||||
|
||||
// function's prototype-------------------------------------------------------
|
||||
static void InitAllocator( NNSFndAllocator* pAllocator );
|
||||
static void InitAllocSystem( void );
|
||||
static void INTR_VBlank( void );
|
||||
|
||||
// global variable-------------------------------------------------------------
|
||||
NNSFndAllocator g_allocator;
|
||||
int (*g_pNowProcess)( void );
|
||||
|
||||
// static variable-------------------------------------------------------------
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// function's description
|
||||
// ============================================================================
|
||||
void TwlMain(void)
|
||||
{
|
||||
|
||||
// 初期化----------------------------------
|
||||
OS_Init();
|
||||
|
||||
(void)OS_EnableIrq();
|
||||
(void)OS_EnableInterrupts();
|
||||
|
||||
GX_Init();
|
||||
GX_SetPower(GX_POWER_ALL); // 各ロジック パワーON
|
||||
|
||||
// 割り込み許可----------------------------
|
||||
(void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank);
|
||||
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
|
||||
(void)GX_VBlankIntr(TRUE);
|
||||
|
||||
// デバイス初期化-------------------------------
|
||||
TP_Init();
|
||||
(void)RTC_Init();
|
||||
|
||||
// システムの初期化------------------
|
||||
InitAllocator( &g_allocator );
|
||||
CMN_InitFileSystem( &g_allocator );
|
||||
|
||||
// NitroConfigDataのリード
|
||||
(void)NVRAMm_ReadNitroConfigData( GetNCDWork() );
|
||||
SYSM_CaribrateTP();
|
||||
|
||||
InitBG();
|
||||
MachineSettingInit();
|
||||
InitGetAndDrawRtcData( RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y );
|
||||
// メインループ----------------------------
|
||||
while ( 1 ) {
|
||||
OS_WaitIrq( 1, OS_IE_V_BLANK ); // Vブランク割り込み待ち
|
||||
|
||||
ReadKeyPad(); // キー入力の取得
|
||||
|
||||
(void)g_pNowProcess();
|
||||
|
||||
GetAndDrawRtcData();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// アロケータの初期化
|
||||
static void InitAllocator( NNSFndAllocator* pAllocator )
|
||||
{
|
||||
u32 arenaLow = MATH_ROUNDUP ( (u32)OS_GetMainArenaLo(), 16 );
|
||||
u32 arenaHigh = MATH_ROUNDDOWN( (u32)OS_GetMainArenaHi(), 16 );
|
||||
u32 heapSize = arenaHigh - arenaLow;
|
||||
void* heapMemory = OS_AllocFromMainArenaLo( heapSize, 16 );
|
||||
NNSFndHeapHandle heapHandle;
|
||||
SDK_NULL_ASSERT( pAllocator );
|
||||
|
||||
heapHandle = NNS_FndCreateExpHeap( heapMemory, heapSize );
|
||||
SDK_ASSERT( heapHandle != NNS_FND_HEAP_INVALID_HANDLE );
|
||||
|
||||
NNS_FndInitAllocatorForExpHeap( pAllocator, heapHandle, 4 );
|
||||
}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// 割り込み処理
|
||||
// ============================================================================
|
||||
|
||||
// Vブランク割り込み
|
||||
static void INTR_VBlank(void)
|
||||
{
|
||||
OS_SetIrqCheckFlag(OS_IE_V_BLANK); // Vブランク割込チェックのセット
|
||||
}
|
||||
|
||||
@ -18,7 +18,7 @@
|
||||
#include <twl.h>
|
||||
#include <sysmenu.h>
|
||||
#include "font.h"
|
||||
#include "main.h"
|
||||
#include "misc.h"
|
||||
|
||||
// define data----------------------------------
|
||||
#define SEARCH_ENTRY_MAX_NUM 128 // 処理が重くなるのを防ぐための、エントリのサーチ回数上限
|
||||
@ -513,7 +513,7 @@ static int InsertStrEntry(u16 *handle, u16 charNum)
|
||||
}
|
||||
|
||||
// StrEntryのメモリ確保
|
||||
*sEntrypp = (StrEntry *)OS_Alloc( sizeof(StrEntry) );
|
||||
*sEntrypp = (StrEntry *)NNS_FndAllocFromAllocator( gAllocator, ( sizeof(StrEntry) );
|
||||
if( *sEntrypp == NULL) {
|
||||
OS_Printf("StrEntry allocate failed.\n");
|
||||
return -1;
|
||||
@ -32,7 +32,7 @@
|
||||
|
||||
|
||||
// global variable------------------------------
|
||||
int (*nowProcess)(void);
|
||||
int (*g_pNowProcess)(void);
|
||||
//MyTime myTime;
|
||||
//KeyWork pad;
|
||||
|
||||
@ -23,7 +23,7 @@ extern "C" {
|
||||
#endif
|
||||
|
||||
#include <twl.h>
|
||||
#include "main.h"
|
||||
#include "misc.h"
|
||||
|
||||
// define data ---------------------------------
|
||||
|
||||
@ -60,7 +60,7 @@ typedef struct {
|
||||
// global variable------------------------------
|
||||
extern MyTime myTime;
|
||||
//extern KeyWork pad;
|
||||
extern int (*nowProcess)(void);
|
||||
extern int (*g_pNowProcess)(void);
|
||||
|
||||
|
||||
// const data-----------------------------------
|
||||
148
build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c
Normal file
148
build/systemMenu_RED/MachineSettings/ARM9/src/selectLanguage.c
Normal file
@ -0,0 +1,148 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: SelectLanguage.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 "misc.h"
|
||||
#include "MachineSetting.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
#define CANCEL_BUTTON_TOP_X ( 2 * 8 )
|
||||
#define CANCEL_BUTTON_TOP_Y ( 21 * 8 )
|
||||
#define CANCEL_BUTTON_BOTTOM_X ( (CANCEL_BUTTON_TOP_X + 8 ) * 8 )
|
||||
#define CANCEL_BUTTON_BOTTOM_Y ( (CANCEL_BUTTON_TOP_Y + 2 ) * 8 )
|
||||
|
||||
// extern data------------------------------------------
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
|
||||
// global variable -------------------------------------
|
||||
|
||||
// static variable -------------------------------------
|
||||
static NvLangCode s_langCode; // 言語コード
|
||||
|
||||
// const data -----------------------------------------
|
||||
static const u16 *const s_pStrLanguage[] = {
|
||||
(const u16 *)L"日本語",
|
||||
(const u16 *)L"English ",
|
||||
(const u16 *)L"Francais",
|
||||
(const u16 *)L"Deutsch ",
|
||||
(const u16 *)L"Italiano",
|
||||
(const u16 *)L"Espanol ",
|
||||
};
|
||||
|
||||
static MenuPos s_languagePos[] = {
|
||||
{ TRUE, 4 * 8, 6 * 8 },
|
||||
{ TRUE, 4 * 8, 8 * 8 },
|
||||
{ TRUE, 4 * 8, 10 * 8 },
|
||||
{ TRUE, 4 * 8, 12 * 8 },
|
||||
{ TRUE, 4 * 8, 14 * 8 },
|
||||
{ TRUE, 4 * 8, 16 * 8 },
|
||||
};
|
||||
|
||||
static const MenuParam langSel = {
|
||||
6,
|
||||
TXT_COLOR_BLACK,
|
||||
TXT_COLOR_GREEN,
|
||||
TXT_COLOR_RED,
|
||||
&s_languagePos[ 0 ],
|
||||
(const u16 **)&s_pStrLanguage,
|
||||
};
|
||||
|
||||
|
||||
//======================================================
|
||||
// function's description
|
||||
//======================================================
|
||||
|
||||
// 言語設定の初期化
|
||||
void SelectLanguageInit( void )
|
||||
{
|
||||
GX_DispOff();
|
||||
GXS_DispOff();
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
|
||||
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"LANGUAGE SELECT" );
|
||||
PutStringUTF16( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L"CANCEL" );
|
||||
if( g_initialSet ) {
|
||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Select language." );
|
||||
}
|
||||
|
||||
if( ( GetSYSMWork()->ncd_invalid ) ||
|
||||
( GetNCDWork()->option.language >= LANG_CODE_MAX ) ) {
|
||||
s_langCode = LANG_ENGLISH;
|
||||
}else {
|
||||
s_langCode = (NvLangCode)GetNCDWork()->option.language;
|
||||
}
|
||||
|
||||
DrawMenu( (u16)s_langCode, &langSel );
|
||||
|
||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||
|
||||
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 );
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||
GX_DispOn();
|
||||
GXS_DispOn();
|
||||
}
|
||||
|
||||
|
||||
// 言語選択
|
||||
int SelectLanguageMain( void )
|
||||
{
|
||||
BOOL tp_select,tp_cancel = FALSE;
|
||||
|
||||
ReadTpData(); // TP入力の取得
|
||||
|
||||
//--------------------------------------
|
||||
// キー入力処理
|
||||
//--------------------------------------
|
||||
if( pad.trg & PAD_KEY_DOWN ) { // カーソルの移動
|
||||
if( ++s_langCode == LANG_CODE_MAX ) {
|
||||
s_langCode = (NvLangCode)0;
|
||||
}
|
||||
}
|
||||
if( pad.trg & PAD_KEY_UP ) {
|
||||
if( --s_langCode < 0 ) {
|
||||
s_langCode = (NvLangCode)( LANG_CODE_MAX - 1 );
|
||||
}
|
||||
}
|
||||
tp_select = SelectMenuByTP( (u16 *)&s_langCode, &langSel );
|
||||
DrawMenu( (u16)s_langCode, &langSel );
|
||||
|
||||
// [CANCEL]ボタン押下チェック
|
||||
if( tpd.disp.touch ) {
|
||||
tp_cancel = InRangeTp( CANCEL_BUTTON_TOP_X, CANCEL_BUTTON_TOP_Y - 4 * 8,
|
||||
CANCEL_BUTTON_BOTTOM_X, CANCEL_BUTTON_BOTTOM_Y - 4 * 8, &tpd.disp );
|
||||
}
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_select ) { // メニュー項目への分岐
|
||||
GetSYSMWork()->ncd_invalid = 0;
|
||||
GetNCDWork()->option.input_language = 1; // 言語入力フラグを立てる
|
||||
GetNCDWork()->option.language = s_langCode;
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// NVRAMへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)NVRAMm_WriteNitroConfigData( GetNCDWork() );
|
||||
MachineSettingInit();
|
||||
return 0;
|
||||
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
|
||||
MachineSettingInit();
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@ -202,7 +202,7 @@ void SEQ_OwnerInfo_init(void)
|
||||
(void)DrawStringSJIS( RETURN_BUTTON_LT_X, RETURN_BUTTON_LT_Y,HIGHLIGHT_C, (const u8 *)" RETURN ");
|
||||
|
||||
if(ow == NULL) {
|
||||
ow = OS_Alloc(sizeof(OwnerWork)); // オーナー情報編集用ワークの確保
|
||||
ow = NNS_FndAllocFromAllocator( &g_allocator, sizeof(OwnerWork) ); // オーナー情報編集用ワークの確保
|
||||
#ifdef __SYSM_DEBUG
|
||||
if(ow == NULL) OS_Panic("ARM9- Fail to allocate memory...\n");
|
||||
#endif /* __SYSM_DEBUG */
|
||||
@ -261,7 +261,7 @@ int SEQ_OwnerInfo(void)
|
||||
}
|
||||
|
||||
// オーナー情報の初回起動シーケンス
|
||||
if(initialSet) {
|
||||
if(g_initialSet) {
|
||||
|
||||
pad.trg = 0;
|
||||
|
||||
@ -301,19 +301,19 @@ int SEQ_OwnerInfo(void)
|
||||
switch(ow->sel) {
|
||||
case 0:
|
||||
SEQ_InputNickname_init();
|
||||
nowProcess = SEQ_InputNickname;
|
||||
g_pNowProcess = SEQ_InputNickname;
|
||||
break;
|
||||
case 1:
|
||||
SEQ_InputBirthday_init();
|
||||
nowProcess = SEQ_InputBirthday;
|
||||
g_pNowProcess = SEQ_InputBirthday;
|
||||
break;
|
||||
case 2:
|
||||
SEQ_InputFavoriteColor_init();
|
||||
nowProcess = SEQ_InputFavoriteColor;
|
||||
g_pNowProcess = SEQ_InputFavoriteColor;
|
||||
break;
|
||||
}
|
||||
}else if((pad.trg & PAD_BUTTON_B) || (tp_return)) { // メニューに戻る
|
||||
OS_Free(ow); // ワークの解放
|
||||
NNS_FndFreeToAllocator( &g_allocator, ow ); // ワークの解放
|
||||
ow = NULL;
|
||||
OS_Printf("Free :OwnerWork\n");
|
||||
SEQ_MainMenu_init();
|
||||
@ -461,7 +461,7 @@ static int SEQ_InputBirthday(void)
|
||||
|
||||
case SEQ_RETURN:
|
||||
SEQ_OwnerInfo_init();
|
||||
nowProcess = SEQ_OwnerInfo;
|
||||
g_pNowProcess = SEQ_OwnerInfo;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -506,7 +506,7 @@ static void SEQ_InputFavoriteColor_init(void)
|
||||
SVC_CpuClear(0x0000, &tpd, sizeof(TpWork), 16);
|
||||
ow->seq = 0;
|
||||
|
||||
if( initialSet ) {
|
||||
if( g_initialSet ) {
|
||||
(void)DrawStringSJIS( 8, 18, RED, (const u8 *)"Select user color.");
|
||||
}
|
||||
}
|
||||
@ -582,7 +582,7 @@ static int SEQ_InputFavoriteColor(void)
|
||||
|
||||
case SEQ_RETURN:
|
||||
SEQ_OwnerInfo_init();
|
||||
nowProcess = SEQ_OwnerInfo;
|
||||
g_pNowProcess = SEQ_OwnerInfo;
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -614,7 +614,7 @@ static void SEQ_InputNickname_init(void)
|
||||
|
||||
(void)DrawStringSJIS( 1, 0, YELLOW, (const u8 *)"INPUT NICKNAME");
|
||||
// (void)DrawStringSJIS( INPUT_NAME_LT_Y, WHITE, (const u16 *)str_uscore);
|
||||
if( initialSet ) {
|
||||
if( g_initialSet ) {
|
||||
(void)DrawStringSJIS( 8, 20, RED, (const u8 *)"Input nickname.");
|
||||
}
|
||||
|
||||
@ -785,7 +785,7 @@ static void ReturnMenu(int save_flag)
|
||||
(void)NVRAMm_WriteNitroConfigData(GetNCDWork());
|
||||
}
|
||||
SEQ_OwnerInfo_init();
|
||||
nowProcess = SEQ_OwnerInfo; // オーナー情報編集に戻る
|
||||
g_pNowProcess = SEQ_OwnerInfo; // オーナー情報編集に戻る
|
||||
}
|
||||
|
||||
// 1文字削除
|
||||
530
build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c
Normal file
530
build/systemMenu_RED/MachineSettings/ARM9/src/setRTC.c
Normal file
@ -0,0 +1,530 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: setRTC.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 "misc.h"
|
||||
#include "MachineSetting.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
|
||||
//#define __RTC_MINUTE_OFFSET // この定義が有効な場合はrtcOffsetは分オフセットで算出されます。また、無効な場合は秒オフセットとなります。
|
||||
|
||||
// RETURNボタンLCD領域
|
||||
#define RETURN_BUTTON_TOP_X ( 2 * 8 )
|
||||
#define RETURN_BUTTON_TOP_Y ( 21 * 8 )
|
||||
#define RETURN_BUTTON_BOTTOM_X ( (RETURN_BUTTON_TOP_X + 8) * 8 )
|
||||
#define RETURN_BUTTON_BOTTOM_Y ( (RETURN_BUTTON_TOP_Y + 2) * 8 )
|
||||
|
||||
// 日付データLCD領域
|
||||
#define DATE_TOP_X ( 5 * 8 )
|
||||
#define DATE_TOP_Y ( 10 * 8 )
|
||||
// 時刻データLCD領域
|
||||
#define TIME_TOP_X ( (DATE_TOP_X + 14) * 8 )
|
||||
#define TIME_TOP_Y ( DATE_TOP_Y * 8 )
|
||||
|
||||
// RTC設定メニュー要素
|
||||
#define RTC_MENU_ELEM_NUM 1
|
||||
|
||||
// 文字入力タッチパネル用カウンタ
|
||||
#define S_UPDOWN_COUNT_MAX 16
|
||||
// 数値入力タッチパネル用カウンタ
|
||||
#define D_DOWN_COUNT_MAX -50
|
||||
#define D_UP_COUNT_MAX 50
|
||||
|
||||
|
||||
// 日付時刻入力シーケンス用ワーク
|
||||
typedef struct DateTimeParam {
|
||||
int seq; // シーケンス番号
|
||||
int *tgtp; // 入力対象の変数へのポインタ
|
||||
RTCDate Date;
|
||||
RTCTime Time;
|
||||
}DateTimeParam;
|
||||
|
||||
|
||||
// RTC設定シーケンス用ワーク
|
||||
typedef struct SetRtcWork {
|
||||
int csr; // カーソル位置
|
||||
s64 rtcOffset[ 2 ]; // RTCオフセット値([0]:設定変更前の値、[1]:変更後の値)
|
||||
DateTimeParam dtp; // 日付時刻入力シーケンス用ワーク
|
||||
InputNumParam inp; // 数値入力インターフェース用ワーク
|
||||
}SetRtcWork;
|
||||
|
||||
// extern data------------------------------------------
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
RTCWeek CalcWeekFromDate( u32 year, u32 month, u32 day );
|
||||
void InputDecimal(int *tgtp, InputNumParam *inpp);
|
||||
|
||||
static void InputRtcDateTimeInit( int start );
|
||||
static int InputRtcDateTimeMain( void );
|
||||
|
||||
static void TransmitRtcData(DateTimeParam *dtpp, RtcDateTime *rtcp);
|
||||
static void SelectString( int *tgtp, const u8 **const strpp, InputNumParam *inpp);
|
||||
static void BcdToHex(int *bcdp);
|
||||
static void HexToBcd(int *hexp);
|
||||
static BOOL CheckLeapYear( u32 year );
|
||||
|
||||
// global variable -------------------------------------
|
||||
|
||||
// static variable -------------------------------------
|
||||
SetRtcWork *s_pRTCWork; // RTC設定用ワーク
|
||||
|
||||
// const data -----------------------------------------
|
||||
|
||||
//======================================================
|
||||
// 日付&時刻設定
|
||||
//======================================================
|
||||
|
||||
// RTC設定シーケンスの初期化
|
||||
void SetRTCInit( void )
|
||||
{
|
||||
GX_DispOff();
|
||||
GXS_DispOff();
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
|
||||
PutStringUTF16( 0, 0, TXT_COLOR_BLUE, (const u16 *)L"DATE & TIME SET" );
|
||||
PrintfSJIS( DATE_TOP_X + 3 * 8, DATE_TOP_Y, TXT_COLOR_BLACK, "/ / [ ] : :");
|
||||
|
||||
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L" RETURN " );
|
||||
|
||||
if( g_initialSet ) {
|
||||
if( GetSYSMWork()->rtcStatus & 0x01) {
|
||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"RTC reset is detected!" );
|
||||
}else {
|
||||
PutStringUTF16( 8 * 8, 18 * 8, TXT_COLOR_RED, (const u16 *)L"Set RTC." );
|
||||
}
|
||||
}
|
||||
|
||||
s_pRTCWork = NNS_FndAllocFromAllocator( &g_allocator, sizeof(SetRtcWork) ); // RTC設定用ワークの確保
|
||||
if( s_pRTCWork == NULL ) {
|
||||
OS_Panic( "ARM9- Fail to allocate memory...\n" );
|
||||
}
|
||||
|
||||
SVC_CpuClear( 0x0000, s_pRTCWork, sizeof(SetRtcWork), 16 );
|
||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||
|
||||
GX_SetVisiblePlane ( GX_PLANEMASK_BG0 );
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||
GX_DispOn();
|
||||
GXS_DispOn();
|
||||
}
|
||||
|
||||
|
||||
// RTC設定シーケンス
|
||||
int SetRTCMain( void )
|
||||
{
|
||||
BOOL tp_set = FALSE;
|
||||
BOOL tp_return = FALSE;
|
||||
|
||||
ReadTpData(); // TP入力の取得
|
||||
|
||||
if(tpd.disp.touch) {
|
||||
tp_set = InRangeTp( DATE_TOP_X, DATE_TOP_Y - 4, // [RTC設定]領域押下チェック
|
||||
(TIME_TOP_X + 8), (TIME_TOP_Y + 2) - 4, &tpd.disp );
|
||||
// [RETURN]ボタン押下チェック
|
||||
tp_return = InRangeTp( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y - 4,
|
||||
RETURN_BUTTON_BOTTOM_X, RETURN_BUTTON_BOTTOM_Y - 4, &tpd.disp );
|
||||
}
|
||||
if( g_initialSet && !GetNCDWork()->option.input_rtc ) {
|
||||
tp_set = TRUE;
|
||||
}
|
||||
//--------------------------------------
|
||||
// キー入力処理
|
||||
//--------------------------------------
|
||||
if( pad.trg & PAD_KEY_DOWN ) { // カーソルの移動
|
||||
if( ++s_pRTCWork->csr == RTC_MENU_ELEM_NUM) {
|
||||
s_pRTCWork->csr = 0;
|
||||
}
|
||||
}
|
||||
if( pad.trg & PAD_KEY_UP ) {
|
||||
if( --s_pRTCWork->csr < 0 ) {
|
||||
s_pRTCWork->csr = RTC_MENU_ELEM_NUM - 1;
|
||||
}
|
||||
}
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_set ) { // RTC設定開始
|
||||
if( s_pRTCWork->csr == 0 ) {
|
||||
InputRtcDateTimeInit( 1 );
|
||||
g_pNowProcess = InputRtcDateTimeMain;
|
||||
}
|
||||
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_return ) { // メニューに戻る
|
||||
NNS_FndFreeToAllocator( &g_allocator, s_pRTCWork ); // RTC設定用ワークの解放
|
||||
s_pRTCWork = NULL;
|
||||
MachineSettingInit();
|
||||
}
|
||||
|
||||
#ifdef __SYSM_DEBUG
|
||||
if( pad.trg & PAD_BUTTON_START ) {
|
||||
ClearRTC();
|
||||
OS_Printf( "RTC offset in NVRAM is ZERO clear!\n" );
|
||||
}
|
||||
#endif /* __SYSM_DEBUG */
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//======================================================
|
||||
// 日付&時刻入力処理
|
||||
//======================================================
|
||||
|
||||
// 日付時刻入力初期化
|
||||
static void InputRtcDateTimeInit( int start )
|
||||
{
|
||||
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE,
|
||||
RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, 28 * 8, 2 * 8 );
|
||||
if( start ) {
|
||||
DrawOKCancelButton();
|
||||
s_pRTCWork->dtp.seq = 0;
|
||||
}else {
|
||||
PutStringUTF16( RETURN_BUTTON_TOP_X, RETURN_BUTTON_TOP_Y, TXT_COLOR_CYAN, (const u16 *)L"RETURN" );
|
||||
}
|
||||
SVC_CpuClear( 0x0000, &tpd, sizeof(TpWork), 16 );
|
||||
}
|
||||
|
||||
|
||||
// 日付時刻入力
|
||||
static int InputRtcDateTimeMain( void )
|
||||
{
|
||||
BOOL tp_ok = FALSE;
|
||||
BOOL tp_cancel = FALSE;
|
||||
int new_seq, x_base, y_base, abs_y_offset;
|
||||
|
||||
enum { // 日付時刻入力シーケンス番号
|
||||
SEQ_INIT=0,
|
||||
SEQ_YEAR_INIT=2, SEQ_YEAR_SET,
|
||||
SEQ_MONTH_INIT, SEQ_MONTH_SET,
|
||||
SEQ_DAY_INIT, SEQ_DAY_SET,
|
||||
SEQ_HOUR_INIT, SEQ_HOUR_SET,
|
||||
SEQ_MINUTE_INIT, SEQ_MINUTE_SET,
|
||||
SEQ_SECOND_INIT, SEQ_SECOND_SET,
|
||||
SEQ_END,
|
||||
SEQ_RETURN=64
|
||||
};
|
||||
|
||||
ReadTpData(); // タッチパネル入力の取得
|
||||
CheckOKCancelButton( &tp_ok, &tp_cancel ); // [OK],[CANCEL]ボタン押下チェック
|
||||
|
||||
s_pRTCWork->inp.y_offset = 0;
|
||||
|
||||
if( tpd.disp.touch ) { // [CANCEL]ボタン押下チェック
|
||||
if( ( s_pRTCWork->dtp.seq & 0x01 ) && ( s_pRTCWork->dtp.seq < SEQ_END ) ) { // SEQ_**_SETの時のみ有効
|
||||
new_seq = s_pRTCWork->dtp.seq;
|
||||
x_base = DATE_TOP_X;
|
||||
y_base = DATE_TOP_Y + 6;
|
||||
// 入力項目移動のチェック
|
||||
if( InRangeTp( x_base, (y_base - 6), (x_base + 22 * 8), (y_base + 6), &tpd.disp ) ) {
|
||||
if( tpd.disp.x < x_base + 28 ) {
|
||||
new_seq = SEQ_YEAR_SET;
|
||||
}else if( ( tpd.disp.x >= x_base + 4 * 8 ) && ( tpd.disp.x < x_base + 6 * 8 ) ) {
|
||||
new_seq = SEQ_MONTH_SET;
|
||||
}else if( ( tpd.disp.x >= x_base + 7 * 8 ) && ( tpd.disp.x < x_base + 9 * 8 ) ) {
|
||||
new_seq = SEQ_DAY_SET;
|
||||
}else if( ( tpd.disp.x >= x_base + 14 * 8 ) && ( tpd.disp.x < x_base + 16 * 8 ) ) {
|
||||
new_seq = SEQ_HOUR_SET;
|
||||
}else if( ( tpd.disp.x >= x_base + 17 * 8 ) && ( tpd.disp.x < x_base + 19 * 8 ) ) {
|
||||
new_seq = SEQ_MINUTE_SET;
|
||||
}else if( tpd.disp.x >= x_base + 20 * 8 ) {
|
||||
new_seq = SEQ_SECOND_SET;
|
||||
}
|
||||
}
|
||||
if( s_pRTCWork->dtp.seq != new_seq ) {
|
||||
s_pRTCWork->dtp.seq = new_seq - 1;
|
||||
}else {
|
||||
// 入力値の増減
|
||||
if( InRangeTp( s_pRTCWork->inp.pos_x, (y_base - 30),
|
||||
s_pRTCWork->inp.pos_x + s_pRTCWork->inp.keta_max * 8, y_base + 30, &tpd.disp ) ) {
|
||||
s_pRTCWork->inp.y_offset = tpd.disp.y - y_base;
|
||||
abs_y_offset = ( s_pRTCWork->inp.y_offset >= 0 ) ? s_pRTCWork->inp.y_offset : -s_pRTCWork->inp.y_offset;
|
||||
if( abs_y_offset <= 6 ) {
|
||||
s_pRTCWork->inp.y_offset = 0;
|
||||
}else if( abs_y_offset <= 14 ){
|
||||
s_pRTCWork->inp.y_offset >>= 2;
|
||||
}else if( abs_y_offset <= 22 ){
|
||||
s_pRTCWork->inp.y_offset >>= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// タッチパネル or キー入力によって、カーソル位置が動いた時に、元の位置のカーソルを消す。
|
||||
if( ( s_pRTCWork->dtp.seq > 0 ) && ( ( s_pRTCWork->dtp.seq & 0x01 ) == 0 ) ) { // SEQ_INITの時は実行しない
|
||||
PrintfSJIS( s_pRTCWork->inp.pos_x, s_pRTCWork->inp.pos_y, TXT_COLOR_BLACK,
|
||||
"%02d", *s_pRTCWork->dtp.tgtp );
|
||||
}
|
||||
|
||||
// 各シーケンスの処理
|
||||
switch(s_pRTCWork->dtp.seq){
|
||||
|
||||
case SEQ_INIT:
|
||||
s_pRTCWork->dtp.Date = GetSYSMWork()->rtc[0].Date;
|
||||
s_pRTCWork->dtp.Time = GetSYSMWork()->rtc[0].Time;
|
||||
s_pRTCWork->dtp.Date.year += 2000; // yearを+2000する。
|
||||
s_pRTCWork->dtp.seq = SEQ_YEAR_INIT;
|
||||
// ※SEQ_INITは直通でSEQ_YEAR_INITへ
|
||||
|
||||
case SEQ_YEAR_INIT:
|
||||
s_pRTCWork->inp.pos_x = DATE_TOP_X;
|
||||
s_pRTCWork->inp.pos_y = DATE_TOP_Y;
|
||||
s_pRTCWork->inp.keta_max = 4;
|
||||
s_pRTCWork->inp.value_max = 2099;
|
||||
s_pRTCWork->inp.value_min = 2000;
|
||||
// s_pRTCWork->inp.value_min = 2004;
|
||||
// if(s_pRTCWork->dtp.Date.year < 2004) {
|
||||
// s_pRTCWork->dtp.Date.year = 2004;
|
||||
// }
|
||||
s_pRTCWork->dtp.tgtp = (int *)&s_pRTCWork->dtp.Date.year;
|
||||
break;
|
||||
|
||||
case SEQ_MONTH_INIT:
|
||||
s_pRTCWork->inp.pos_x = DATE_TOP_X + 4 * 8;
|
||||
s_pRTCWork->inp.keta_max = 2;
|
||||
s_pRTCWork->inp.value_max = 12;
|
||||
s_pRTCWork->inp.value_min = 1;
|
||||
s_pRTCWork->dtp.tgtp = (int *)&s_pRTCWork->dtp.Date.month;
|
||||
break;
|
||||
|
||||
case SEQ_DAY_INIT:
|
||||
s_pRTCWork->inp.pos_x = DATE_TOP_X + 7 * 8;
|
||||
s_pRTCWork->inp.keta_max = 2;
|
||||
s_pRTCWork->inp.value_max = (int)SYSM_GetDayNum( s_pRTCWork->dtp.Date.year, s_pRTCWork->dtp.Date.month );
|
||||
// 年・月をもとにその月の日数を算出する。
|
||||
s_pRTCWork->inp.value_min = 1;
|
||||
if(s_pRTCWork->dtp.Date.day > s_pRTCWork->inp.value_max) {
|
||||
s_pRTCWork->dtp.Date.day = (u32)s_pRTCWork->inp.value_max;
|
||||
}
|
||||
s_pRTCWork->dtp.tgtp = (int *)&s_pRTCWork->dtp.Date.day;
|
||||
break;
|
||||
|
||||
case SEQ_HOUR_INIT:
|
||||
s_pRTCWork->inp.pos_x = TIME_TOP_X;
|
||||
s_pRTCWork->inp.keta_max = 2;
|
||||
s_pRTCWork->inp.value_max = 23;
|
||||
s_pRTCWork->inp.value_min = 0;
|
||||
s_pRTCWork->dtp.tgtp = (int *)&s_pRTCWork->dtp.Time.hour;
|
||||
break;
|
||||
|
||||
case SEQ_MINUTE_INIT:
|
||||
s_pRTCWork->inp.pos_x = TIME_TOP_X + 3 * 8;
|
||||
s_pRTCWork->inp.keta_max = 2;
|
||||
s_pRTCWork->inp.value_max = 59;
|
||||
s_pRTCWork->inp.value_min = 0;
|
||||
s_pRTCWork->dtp.tgtp = (int *)&s_pRTCWork->dtp.Time.minute;
|
||||
break;
|
||||
|
||||
case SEQ_SECOND_INIT:
|
||||
s_pRTCWork->inp.pos_x = TIME_TOP_X + 6 * 8;
|
||||
s_pRTCWork->inp.keta_max = 2;
|
||||
s_pRTCWork->inp.value_max = 59;
|
||||
s_pRTCWork->inp.value_min = 0;
|
||||
s_pRTCWork->dtp.tgtp = (int *)&s_pRTCWork->dtp.Time.second;
|
||||
break;
|
||||
|
||||
case SEQ_YEAR_SET:
|
||||
case SEQ_MONTH_SET:
|
||||
case SEQ_DAY_SET:
|
||||
case SEQ_HOUR_SET:
|
||||
case SEQ_MINUTE_SET:
|
||||
case SEQ_SECOND_SET:
|
||||
InputDecimal( s_pRTCWork->dtp.tgtp, &s_pRTCWork->inp );
|
||||
|
||||
// 年月日入力ならば、曜日を算出して表示。
|
||||
if( ( s_pRTCWork->dtp.seq == SEQ_YEAR_SET ) ||
|
||||
( s_pRTCWork->dtp.seq == SEQ_MONTH_SET ) ||
|
||||
( s_pRTCWork->dtp.seq == SEQ_DAY_SET ) ) {
|
||||
s_pRTCWork->dtp.Date.week = CalcWeekFromDate( s_pRTCWork->dtp.Date.year, s_pRTCWork->dtp.Date.month, s_pRTCWork->dtp.Date.day );
|
||||
PrintfSJIS( DATE_TOP_X + 10 * 8, DATE_TOP_Y, TXT_COLOR_BLACK, "%s", g_strWeek[ s_pRTCWork->dtp.Date.week ] );
|
||||
}
|
||||
|
||||
// 年・月入力ならば、日数を算出して、現在の入力日が日数を超えていたら修正する。
|
||||
if( ( s_pRTCWork->dtp.seq == SEQ_YEAR_SET ) ||
|
||||
( s_pRTCWork->dtp.seq == SEQ_MONTH_SET ) ) {
|
||||
u32 dayNum = SYSM_GetDayNum( s_pRTCWork->dtp.Date.year, s_pRTCWork->dtp.Date.month );
|
||||
if( dayNum < s_pRTCWork->dtp.Date.day ) {
|
||||
s_pRTCWork->dtp.Date.day = dayNum;
|
||||
PrintfSJIS( DATE_TOP_X + 7 * 8, DATE_TOP_Y, TXT_COLOR_BLACK, "%02d", s_pRTCWork->dtp.Date.day );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SEQ_END:
|
||||
s_pRTCWork->dtp.Date.year -= 2000; // yearを-2000する。
|
||||
s_pRTCWork->dtp.Time.second = 0;
|
||||
|
||||
NCD_SetRtcOffset( SYSM_CalcRtcOffsetAndSetDateTime( &s_pRTCWork->dtp.Date, &s_pRTCWork->dtp.Time ) );
|
||||
|
||||
GetSYSMWork()->rtc[0].Date = s_pRTCWork->dtp.Date;
|
||||
GetSYSMWork()->rtc[0].Time = s_pRTCWork->dtp.Time;
|
||||
GetSYSMWork()->ncd_invalid = 0;
|
||||
GetNCDWork()->option.input_rtc = 1; // RTC入力フラグを立てる。
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// NVRAMへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)NVRAMm_WriteNitroConfigData( GetNCDWork() );
|
||||
|
||||
// SEQ_ENDの時はこのままリターンする。
|
||||
|
||||
case SEQ_RETURN:
|
||||
g_pNowProcess = SetRTCMain;
|
||||
InputRtcDateTimeInit( 0 ); // 日付入力画面のクリア
|
||||
return 0;
|
||||
}
|
||||
|
||||
if( s_pRTCWork->dtp.seq & 0x01 ) { // SEQ_**_SETの時のみ有効
|
||||
if( ( pad.trg & PAD_BUTTON_A ) || tp_ok ) {
|
||||
s_pRTCWork->dtp.seq = SEQ_END; // Aボタンで決定
|
||||
}else if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) { // Bボタンでキャンセル
|
||||
s_pRTCWork->dtp.seq = SEQ_RETURN;
|
||||
}else if( pad.trg & PAD_KEY_LEFT ) {
|
||||
if( s_pRTCWork->dtp.seq == SEQ_YEAR_SET ) {
|
||||
s_pRTCWork->dtp.seq = SEQ_SECOND_INIT;
|
||||
}else {
|
||||
s_pRTCWork->dtp.seq -= 3;
|
||||
}
|
||||
}else if( pad.trg & PAD_KEY_RIGHT ) {
|
||||
if( s_pRTCWork->dtp.seq == SEQ_SECOND_SET ) {
|
||||
s_pRTCWork->dtp.seq = SEQ_YEAR_INIT;
|
||||
}else {
|
||||
s_pRTCWork->dtp.seq++;
|
||||
}
|
||||
}
|
||||
}else { // SEQ_**_INITの時のみ有効
|
||||
s_pRTCWork->dtp.seq++;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// うるう年の判定 (うるう年:1、通常の年:0リターン)
|
||||
BOOL CheckLeapYear( u32 year)
|
||||
{
|
||||
if((year & 0x03) == 0) { // うるう年は、「4で割り切れ かつ 100で割り切れない年」
|
||||
CP_SetDiv32_32(year, 100); // 「400で割り切れる年」
|
||||
if(CP_GetDivRemainder32() != 0) {
|
||||
return TRUE;
|
||||
}else {
|
||||
CP_SetDiv32_32(year, 400);
|
||||
if(CP_GetDivRemainder32() == 0) {
|
||||
return TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
*/
|
||||
|
||||
// 日付から曜日を求める。
|
||||
RTCWeek CalcWeekFromDate( u32 year, u32 month, u32 day )
|
||||
{
|
||||
if( month == 1 || month == 2 ){
|
||||
year--;
|
||||
month += 12;
|
||||
}
|
||||
return (RTCWeek)( ( year + year/4 - year/100 + year/400 + (13*month + 8)/5 + day) % 7 );
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
// 文字列によるパラメータ選択
|
||||
static void SelectString(int *tgtp, const u8 **const srtpp, InputNumParam *inpp)
|
||||
{
|
||||
BOOL value_up = FALSE;
|
||||
BOOL value_down = FALSE;
|
||||
|
||||
if(inpp->y_offset == 0) {
|
||||
inpp->up_count = S_UPDOWN_COUNT_MAX;
|
||||
}else {
|
||||
inpp->up_count ++;
|
||||
if(inpp->up_count > S_UPDOWN_COUNT_MAX) {
|
||||
inpp->up_count = 0;
|
||||
if(inpp->y_offset < 0) value_up = TRUE;
|
||||
else value_down = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
if((pad.trg & PAD_KEY_DOWN) || (value_down)) { // 表示文字列切り替え
|
||||
if(++*tgtp>inpp->value_max) *tgtp = 0;
|
||||
}else if((pad.trg & PAD_KEY_UP) || (value_up)) {
|
||||
if(--*tgtp & 0x8000) *tgtp = inpp->value_max;
|
||||
}
|
||||
|
||||
(void)DrawStringSJIS( inpp->pos_x, inpp->pos_y, HIGHLIGHT_Y, srtpp[*tgtp]); // 現在選択している文字列を表示
|
||||
}
|
||||
*/
|
||||
|
||||
// 10進数数値入力
|
||||
void InputDecimal( int *tgtp, InputNumParam *inpp )
|
||||
{
|
||||
BOOL value_up = FALSE;
|
||||
BOOL value_down = FALSE;
|
||||
|
||||
if( inpp->y_offset == 0 ) {
|
||||
inpp->up_count = D_UP_COUNT_MAX;
|
||||
inpp->down_count = D_DOWN_COUNT_MAX;
|
||||
}else if( inpp->y_offset < 0 ) {
|
||||
inpp->down_count += inpp->y_offset;
|
||||
if( inpp->down_count < D_DOWN_COUNT_MAX ) {
|
||||
inpp->down_count = 0;
|
||||
value_down = TRUE;
|
||||
}
|
||||
}else { // y_offset > 0
|
||||
inpp->up_count += inpp->y_offset;
|
||||
if( inpp->up_count > D_UP_COUNT_MAX ) {
|
||||
inpp->up_count = 0;
|
||||
value_up = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
// キー入力に応じて対象値を増減
|
||||
if( value_down ||
|
||||
( pad.trg & PAD_KEY_UP ) ||
|
||||
( ( pad.cont & PAD_KEY_UP ) && ( pad.cont & PAD_BUTTON_R ) ) ) {
|
||||
if( --*tgtp < inpp->value_min ) {
|
||||
*tgtp = inpp->value_max;
|
||||
}
|
||||
}else if( value_up ||
|
||||
( pad.trg & PAD_KEY_DOWN ) ||
|
||||
( ( pad.cont & PAD_KEY_DOWN ) && ( pad.cont & PAD_BUTTON_R ) ) ) {
|
||||
if( ++*tgtp > inpp->value_max ) {
|
||||
*tgtp = inpp->value_min;
|
||||
}
|
||||
}
|
||||
|
||||
PrintfSJIS( inpp->pos_x, inpp->pos_y, TXT_COLOR_GREEN, "%02d", *tgtp );
|
||||
// 対象値をハイライト表示
|
||||
}
|
||||
|
||||
|
||||
// RTC設定のクリア
|
||||
void ClearRTC( void )
|
||||
{
|
||||
SVC_CpuClear( 0x0000, &GetSYSMWork()->rtc[0].Time, sizeof(RTCTime), 16 );
|
||||
GetSYSMWork()->rtc[0].Date.year = 0;
|
||||
GetSYSMWork()->rtc[0].Date.month = 1;
|
||||
GetSYSMWork()->rtc[0].Date.day = 1;
|
||||
(void)RTC_SetDateTime( &GetSYSMWork()->rtc[0].Date, &GetSYSMWork()->rtc[0].Time );
|
||||
GetNCDWork()->option.input_rtc = 0;
|
||||
GetNCDWork()->option.rtcOffset = 0;
|
||||
NCD_SetRtcLastSetYear( 0 );
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
// NVRAMへの書き込み
|
||||
// ::::::::::::::::::::::::::::::::::::::::::::::
|
||||
(void)NVRAMm_WriteNitroConfigData( GetNCDWork() );
|
||||
}
|
||||
|
||||
30
build/systemMenu_RED/MachineSettings/Makefile
Normal file
30
build/systemMenu_RED/MachineSettings/Makefile
Normal file
@ -0,0 +1,30 @@
|
||||
#! 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:: 2007-10-03#$
|
||||
# $Rev: 1319 $
|
||||
# $Author: kitase_hirotake $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
@ -20,7 +20,8 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
SUBDIRS = launcher MachineSettings PictoChat \
|
||||
#DS_DownloadPlay
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
|
||||
52
build/systemMenu_RED/PictoChat/ARM9/Makefile
Normal file
52
build/systemMenu_RED/PictoChat/ARM9/Makefile
Normal file
@ -0,0 +1,52 @@
|
||||
#! make -f
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - demos - simpleShoot-1
|
||||
# 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_PLATFORM = TWL
|
||||
TWL_ARCHGEN = LIMITED
|
||||
|
||||
TARGET_BIN = main.srl
|
||||
|
||||
#LCFILE_SPEC =
|
||||
ROM_SPEC = main.rsf
|
||||
|
||||
MISC_DIR = ../../Launcher/ARM9/src
|
||||
|
||||
SRCS = main.c PictoChat.c $(MISC_DIR)/misc.c
|
||||
#SRCS_OVERLAY =
|
||||
|
||||
LINCLUDES = $(MISC_DIR)
|
||||
#LLIBRARY_DIRS =
|
||||
#LLIBRARIES =
|
||||
#LDEPENDS_NEF =
|
||||
|
||||
include $(TWLIPL_ROOT)/build/buildtools/commondefs.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
do-build : $(FONT_OBJS) $(TARGETS)
|
||||
|
||||
|
||||
include $(TWLIPL_ROOT)/build/buildtools/modulerules.sysmenu
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
#===== End of Makefile =====
|
||||
147
build/systemMenu_RED/PictoChat/ARM9/main.rsf
Normal file
147
build/systemMenu_RED/PictoChat/ARM9/main.rsf
Normal file
@ -0,0 +1,147 @@
|
||||
#----------------------------------------------------------------------------
|
||||
# Project: TwlSDK - include
|
||||
# File: ROM-BB.rsf
|
||||
#
|
||||
# Copyright 2007 Nintendo. All rights reserved.
|
||||
#
|
||||
# These coded insructions, statements, and computer programs contain
|
||||
# proprietary information of Nintendo of America Inc. and/or Nintendo
|
||||
# Company Ltd., and are protected by Federal copyright law. They may
|
||||
# not be disclosed to third parties or copied or duplicated in any form,
|
||||
# in whole or in part, without the prior written consent of Nintendo.
|
||||
#
|
||||
# $Date:: $
|
||||
# $Rev$
|
||||
# $Author$
|
||||
#----------------------------------------------------------------------------
|
||||
#
|
||||
# TWL ROM SPEC FILE
|
||||
#
|
||||
|
||||
Arm9
|
||||
{
|
||||
Static "$(MAKEROM_ARM9:r).FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayDefs "$(MAKEROM_ARM9:r)_defs.FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayTable "$(MAKEROM_ARM9:r)_table.FLX.TWL.sbin$(COMPSUFFIX9)"
|
||||
Elf "$(MAKEROM_ARM9:r).tef"
|
||||
}
|
||||
|
||||
Arm7
|
||||
{
|
||||
Static "$(MAKEROM_ARM7_BASE:r).FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.FLX.TWL.sbin$(COMPSUFFIX7)"
|
||||
Elf "$(MAKEROM_ARM7_BASE:r).tef"
|
||||
}
|
||||
|
||||
Arm9.Ltd
|
||||
{
|
||||
Static "$(MAKEROM_ARM9:r).LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayDefs "$(MAKEROM_ARM9:r)_defs.LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
OverlayTable "$(MAKEROM_ARM9:r)_table.LTD.TWL.sbin$(COMPSUFFIX9)"
|
||||
}
|
||||
|
||||
Arm7.Ltd
|
||||
{
|
||||
Static "$(MAKEROM_ARM7_BASE:r).LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.LTD.TWL.sbin$(COMPSUFFIX7)"
|
||||
}
|
||||
|
||||
Property
|
||||
{
|
||||
###
|
||||
### Settings for FinalROM
|
||||
###
|
||||
#### BEGIN
|
||||
#
|
||||
# TITLE NAME: Your product name within 12bytes
|
||||
#
|
||||
#TitleName "YourAppName"
|
||||
|
||||
#
|
||||
# MAKER CODE: Your company ID# in 2 ascii words
|
||||
# issued by NINTENDO
|
||||
#
|
||||
#MakerCode "00"
|
||||
|
||||
#
|
||||
# REMASTER VERSION: Mastering version
|
||||
#
|
||||
#RomVersion 0
|
||||
|
||||
#
|
||||
# ROM SPEED TYPE: [MROM/1TROM/UNDEFINED]
|
||||
#
|
||||
RomSpeedType $(MAKEROM_ROMSPEED)
|
||||
|
||||
#
|
||||
# ROM SIZE: in bit [64M/128M/256M/512M/1G/2G]
|
||||
#
|
||||
#RomSize 128M
|
||||
#RomSize 256M
|
||||
|
||||
#
|
||||
# ROM PADDING: TRUE if finalrom
|
||||
#
|
||||
#RomFootPadding TRUE
|
||||
|
||||
#
|
||||
# ROM HEADER TEMPLATE: Provided to every product by NINTENDO
|
||||
#
|
||||
#RomHeaderTemplate ./etc/rom_header.template.sbin
|
||||
|
||||
#
|
||||
# BANNER FILE: generated from Banner Spec File
|
||||
#
|
||||
#BannerFile ./etc/myGameBanner.bnr
|
||||
BannerFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr
|
||||
|
||||
###
|
||||
### Setting for TWL
|
||||
###
|
||||
#
|
||||
# BANNER FILE:
|
||||
#
|
||||
BannerTWLFile $(TWLSDK_ROOT)/include/twl/specfiles/default.bnr
|
||||
|
||||
#
|
||||
# Boot allowed Media: [GameCard/NAND/SDCard/DownloadPlay]
|
||||
# possible to choose one or more.
|
||||
#
|
||||
BootMedia GameCard NAND SDCard DownloadPlay
|
||||
|
||||
#
|
||||
# Certification FILE:
|
||||
#
|
||||
Certificate $(TWLSDK_ROOT)/include/twl/specfiles/default_sgn.sbin
|
||||
|
||||
#
|
||||
# Digest parameters:
|
||||
#
|
||||
DigestParam 1024 32
|
||||
|
||||
#
|
||||
# WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD]
|
||||
# don't have to edit
|
||||
#
|
||||
WramMapping $(MAKEROM_WRAM_MAPPING)
|
||||
|
||||
#
|
||||
# Codec mode:
|
||||
# don't have to edit
|
||||
#
|
||||
CodecMode $(MAKEROM_CODEC_MODE)
|
||||
|
||||
###
|
||||
#### END
|
||||
}
|
||||
|
||||
RomSpec
|
||||
{
|
||||
Offset 0x00000000
|
||||
Segment ALL
|
||||
HostRoot ../../data
|
||||
Root /data
|
||||
File NTR_IPL_font_m.NFTR
|
||||
}
|
||||
@ -18,8 +18,7 @@
|
||||
#include <twl.h>
|
||||
#include <sysmenu.h>
|
||||
#include "misc.h"
|
||||
#include "DS_Chat.h"
|
||||
#include "DS_Setting.h"
|
||||
#include "PictoChat.h"
|
||||
|
||||
// define data------------------------------------------
|
||||
#define RETURN_BUTTON_TOP_X 2
|
||||
@ -31,58 +30,35 @@
|
||||
|
||||
// function's prototype declaration---------------------
|
||||
|
||||
static void DS_ChatInit(void);
|
||||
static int DS_Chat(void);
|
||||
|
||||
// global variable -------------------------------------
|
||||
|
||||
// static variable -------------------------------------
|
||||
|
||||
// const data -----------------------------------------
|
||||
|
||||
// ピクトチャットのメインループ
|
||||
int DS_ChatMain(void)
|
||||
{
|
||||
DS_ChatInit();
|
||||
|
||||
while(1) {
|
||||
OS_WaitIrq( 1, OS_IE_V_BLANK );
|
||||
ReadKeyPad();
|
||||
|
||||
if( DS_Chat() ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if ( PAD_DetectFold() == TRUE ) { // スリープモードへの遷移
|
||||
SYSM_GoSleepMode();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//======================================================
|
||||
// ピクトチャット
|
||||
//======================================================
|
||||
|
||||
// ピクトチャットの初期化
|
||||
static void DS_ChatInit( void )
|
||||
void PictoChatInit( void )
|
||||
{
|
||||
GX_DispOff();
|
||||
GXS_DispOff();
|
||||
NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE );
|
||||
|
||||
switch(csrMenu) {
|
||||
case 0:
|
||||
PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"PictoChat");
|
||||
break;
|
||||
}
|
||||
|
||||
PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"PictoChat");
|
||||
PutStringUTF16( 4 * 8, 8 * 8, TXT_COLOR_BLACK, (const u16 *)L"Under Construction...");
|
||||
InitGetAndDrawRtcData( 72, 80, 64 + 32, 80 + 16 );
|
||||
|
||||
GXS_SetVisiblePlane( GX_PLANEMASK_BG0 );
|
||||
GX_DispOn();
|
||||
GXS_DispOn();
|
||||
}
|
||||
|
||||
|
||||
// ピクトチャット(空処理)
|
||||
static int DS_Chat(void)
|
||||
// ピクトチャットのメインループ
|
||||
void PictoChatMain(void)
|
||||
{
|
||||
BOOL tp_cancel = FALSE;
|
||||
|
||||
@ -95,8 +71,10 @@ static int DS_Chat(void)
|
||||
}
|
||||
|
||||
if( ( pad.trg & PAD_BUTTON_B ) || tp_cancel ) {
|
||||
return 1;
|
||||
// SYSM_RebootLauncher();
|
||||
}
|
||||
return 0;
|
||||
|
||||
GetAndDrawRtcData();
|
||||
}
|
||||
|
||||
|
||||
@ -27,7 +27,8 @@ extern "C" {
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
|
||||
int DS_ChatMain( void );
|
||||
void PictoChatInit( void );
|
||||
void PictoChatMain( void );
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
107
build/systemMenu_RED/PictoChat/ARM9/src/main.c
Normal file
107
build/systemMenu_RED/PictoChat/ARM9/src/main.c
Normal file
@ -0,0 +1,107 @@
|
||||
/*---------------------------------------------------------------------------*
|
||||
Project: TwlIPL
|
||||
File: main.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 "misc.h"
|
||||
#include "PictoChat.h"
|
||||
|
||||
// extern data-----------------------------------------------------------------
|
||||
|
||||
// define data-----------------------------------------------------------------
|
||||
|
||||
// function's prototype-------------------------------------------------------
|
||||
static void InitAllocator( NNSFndAllocator* pAllocator );
|
||||
static void InitAllocSystem( void );
|
||||
static void INTR_VBlank( void );
|
||||
|
||||
// global variable-------------------------------------------------------------
|
||||
NNSFndAllocator g_allocator;
|
||||
|
||||
// static variable-------------------------------------------------------------
|
||||
|
||||
// const data------------------------------------------------------------------
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// function's description
|
||||
// ============================================================================
|
||||
void TwlMain(void)
|
||||
{
|
||||
|
||||
// 初期化----------------------------------
|
||||
OS_Init();
|
||||
|
||||
(void)OS_EnableIrq();
|
||||
(void)OS_EnableInterrupts();
|
||||
|
||||
GX_Init();
|
||||
GX_SetPower(GX_POWER_ALL); // 各ロジック パワーON
|
||||
|
||||
// 割り込み許可----------------------------
|
||||
(void)OS_SetIrqFunction(OS_IE_V_BLANK, INTR_VBlank);
|
||||
(void)OS_EnableIrqMask(OS_IE_V_BLANK);
|
||||
(void)GX_VBlankIntr(TRUE);
|
||||
|
||||
// デバイス初期化-------------------------------
|
||||
TP_Init();
|
||||
(void)RTC_Init();
|
||||
|
||||
// システムの初期化------------------
|
||||
InitAllocator( &g_allocator );
|
||||
CMN_InitFileSystem( &g_allocator );
|
||||
|
||||
InitBG();
|
||||
PictoChatInit();
|
||||
// メインループ----------------------------
|
||||
while(1){
|
||||
OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち
|
||||
|
||||
ReadKeyPad(); // キー入力の取得
|
||||
ReadTpData(); // TP入力の取得
|
||||
|
||||
PictoChatMain();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// アロケータの初期化
|
||||
static void InitAllocator( NNSFndAllocator* pAllocator )
|
||||
{
|
||||
u32 arenaLow = MATH_ROUNDUP ((u32)OS_GetMainArenaLo(), 16);
|
||||
u32 arenaHigh = MATH_ROUNDDOWN((u32)OS_GetMainArenaHi(), 16);
|
||||
u32 heapSize = arenaHigh - arenaLow;
|
||||
void* heapMemory = OS_AllocFromMainArenaLo(heapSize, 16);
|
||||
NNSFndHeapHandle heapHandle;
|
||||
SDK_NULL_ASSERT( pAllocator );
|
||||
|
||||
heapHandle = NNS_FndCreateExpHeap(heapMemory, heapSize);
|
||||
SDK_ASSERT( heapHandle != NNS_FND_HEAP_INVALID_HANDLE );
|
||||
|
||||
NNS_FndInitAllocatorForExpHeap(pAllocator, heapHandle, 4);
|
||||
}
|
||||
|
||||
|
||||
// ============================================================================
|
||||
// 割り込み処理
|
||||
// ============================================================================
|
||||
|
||||
// Vブランク割り込み
|
||||
static void INTR_VBlank(void)
|
||||
{
|
||||
OS_SetIrqCheckFlag(OS_IE_V_BLANK); // Vブランク割込チェックのセット
|
||||
}
|
||||
|
||||
30
build/systemMenu_RED/PictoChat/Makefile
Normal file
30
build/systemMenu_RED/PictoChat/Makefile
Normal file
@ -0,0 +1,30 @@
|
||||
#! 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:: 2007-10-03#$
|
||||
# $Rev: 1319 $
|
||||
# $Author: kitase_hirotake $
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/commondefs
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
SUBDIRS = ARM9
|
||||
|
||||
#----------------------------------------------------------------------------
|
||||
|
||||
include $(TWLSDK_ROOT)/build/buildtools/modulerules
|
||||
|
||||
|
||||
#===== End of Makefile =====
|
||||
@ -43,13 +43,8 @@ typedef enum NvLangCode{
|
||||
LANG_GERMAN =3, // ドイツ語
|
||||
LANG_ITALIAN =4, // イタリア語
|
||||
LANG_SPANISH =5, // スペイン語
|
||||
#ifdef IPL2_DEST_CHINA
|
||||
LANG_CHINESE =6, // ’†<E28099>‘Œê
|
||||
#endif // IPL2_DEST_CHINA
|
||||
#ifdef IPL2_DEST_KOREA
|
||||
LANG_CHINESE =6, // 中国語
|
||||
LANG_HANGUL =7, // 韓国語
|
||||
#endif // IPL2_DEST_KOREA
|
||||
LANG_CODE_MAX
|
||||
}NvLangCode;
|
||||
|
||||
@ -195,6 +190,9 @@ extern NitroConfigDataEx ncdEx;
|
||||
// NITRO設定データ領域のアドレス獲得
|
||||
|
||||
extern void NCD_ClearOwnerInfo( void ); // ニックネーム・誕生日・好きな色のクリア
|
||||
extern u8 NCD_GetIPL2Type( void );
|
||||
extern u8 *NCD_GetIPL2Version( void );
|
||||
extern u32 NCD_GetNCDRomAddr( void );
|
||||
|
||||
//=========================================================
|
||||
// データ取得
|
||||
@ -392,18 +390,13 @@ static inline void NCD_SetTPCalibration(NvTpCalibData *tp_calibp)
|
||||
// 言語コードのセット
|
||||
static inline void NCD_SetLanguage(NvLangCode language)
|
||||
{
|
||||
#ifdef IPL2_DEST_WW
|
||||
GetNCDWork()->option.language = language;
|
||||
#else // IPL2_DEST_WW
|
||||
GetNCDExWork()->language = language;
|
||||
GetNCDExWork()->valid_language_bitmap = VALID_LANG_BITMAP;
|
||||
GetNCDExWork()->language = language;
|
||||
|
||||
if( language >= LANG_CODE_MAX_WW ) {
|
||||
GetNCDWork()->option.language = LANG_ENGLISH;
|
||||
}else {
|
||||
GetNCDWork()->option.language = language;
|
||||
}
|
||||
#endif // IPL2_DEST_WW
|
||||
}
|
||||
|
||||
// RTCオフセット値のセット
|
||||
|
||||
@ -29,17 +29,42 @@ extern "C" {
|
||||
|
||||
// define data----------------------------------------------------------
|
||||
|
||||
#define SYSM_CTRDG_DMA_NO 0 // カートリッジ周辺機器情報の読み込みに使用するDMA番号です。
|
||||
// 同時に使用するDMA番号の中で最も優先が高い番号にして下さい。
|
||||
// 他のDMAへ割り込まれると、読み込みに失敗する可能性があります。
|
||||
// タイトル情報
|
||||
typedef struct TitleProperty { // この情報は、ランチャー時には認証通ってないけど、起動時には認証通すので大丈夫だろう。
|
||||
u64 titleID; // タイトルID
|
||||
void *pBanner; // バナーへのポインタ(固定長フォーマットなら偽造されても大丈夫だろう。)
|
||||
u32 rsv;
|
||||
}TitleProperty;
|
||||
|
||||
|
||||
// リセットパラメータ
|
||||
typedef struct ResetParam {
|
||||
u64 bootTitleID; // 起動するタイトルがあるか?あるならそのタイトルID
|
||||
u32 rsv;
|
||||
BOOL isLogoSkip; // ロゴデモをスキップするか?
|
||||
}ResetParam;
|
||||
|
||||
|
||||
// アプリ認証結果
|
||||
typedef enum AuthResult {
|
||||
AUTH_PROCESSING = 0,
|
||||
AUTH_RESULT_SUCCEEDED = 1,
|
||||
AUTH_RESULT_TITLE_POINTER_ERROR = 2,
|
||||
AUTH_RESULT_AUTHENTICATE_FAILED = 3,
|
||||
AUTH_RESULT_ENTRY_ADDRESS_ERROR = 4
|
||||
}AuthResult;
|
||||
|
||||
|
||||
// global variable------------------------------------------------------
|
||||
|
||||
// function-------------------------------------------------------------
|
||||
extern void SYSM_Init( void );
|
||||
extern BOOL SYSM_WaitARM7Init( void );
|
||||
extern s32 SYSM_Main( void );
|
||||
extern BOOL SYSM_IsLogoDemoSkip( void );
|
||||
extern void SYSM_CaribrateTP( void );
|
||||
extern int SYSM_GetCardTitleList( TitleProperty *pTitleList_Card );
|
||||
extern int SYSM_GetNandTitleList( TitleProperty *pTitleList_Nand );
|
||||
extern AuthResult SYSM_LoadAndAuthenticateTitle( TitleProperty *pBootTitle );
|
||||
extern void SYSM_Finalize( void );
|
||||
|
||||
extern void SYSM_PermitToBootSelectedTarget( void );
|
||||
extern void SYSM_LoadSYSMData( void );
|
||||
@ -70,8 +95,6 @@ extern s64 SYSM_CalcRtcOffsetAndSetDateTime( RTCDate *newDate, RTCTime *newTime
|
||||
extern u32 SYSM_GetDayNum( u32 year, u32 month );
|
||||
extern BOOL SYSM_IsLeapYear100( u32 year );
|
||||
|
||||
extern BOOL SYSM_IsDebuggerBannerViewMode( void );
|
||||
|
||||
// ※以下の関数は、SYSM_Mainがコールされた後に正しい値が取得できるようになります。
|
||||
|
||||
// NITROカードが差さっているか?
|
||||
|
||||
@ -134,64 +134,18 @@ typedef enum SYSMMsg {
|
||||
// データ型定義
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#ifdef SDK_ARM7 // ※ARM7では、SDKのrtc/ARM9/api.h定義のこのデータはインクルードされないので、ここで定義。
|
||||
// 曜日定義
|
||||
typedef enum RTCWeek
|
||||
{
|
||||
RTC_WEEK_SUNDAY = 0 , // 日曜日
|
||||
RTC_WEEK_MONDAY , // 月曜日
|
||||
RTC_WEEK_TUESDAY , // 火曜日
|
||||
RTC_WEEK_WEDNESDAY , // 水曜日
|
||||
RTC_WEEK_TURSDAY , // 木曜日
|
||||
RTC_WEEK_FRIDAY , // 金曜日
|
||||
RTC_WEEK_SATURDAY , // 土曜日
|
||||
RTC_WEEK_MAX
|
||||
|
||||
} RTCWeek;
|
||||
|
||||
// 午前・午後定義
|
||||
typedef enum RTCNoon
|
||||
{
|
||||
RTC_NOON_AM = 0, // 午前
|
||||
RTC_NOON_PM , // 午後
|
||||
RTC_NOON_MAX
|
||||
|
||||
} RTCNoon;
|
||||
|
||||
// 日付構造体
|
||||
typedef struct RTCDate
|
||||
{
|
||||
u32 year; // 年 ( 0 ~ 99 )
|
||||
u32 month; // 月 ( 1 ~ 12 )
|
||||
u32 day; // 日 ( 1 ~ 31 )
|
||||
RTCWeek week; // 曜日
|
||||
|
||||
} RTCDate;
|
||||
|
||||
// 時刻構造体
|
||||
typedef struct RTCTime
|
||||
{
|
||||
u32 hour; // 時 ( 0 ~ 23 )
|
||||
u32 minute; // 分 ( 0 ~ 59 )
|
||||
u32 second; // 秒 ( 0 ~ 59 )
|
||||
} RTCTime;
|
||||
#endif // SDK_ARM7
|
||||
|
||||
|
||||
// スピンロック変数構造体
|
||||
// ロック情報
|
||||
typedef struct LockVariable{
|
||||
OSLockWord lock;
|
||||
vu32 value;
|
||||
}LockVariable;
|
||||
|
||||
|
||||
// RTC日付時刻構造体
|
||||
typedef struct RtcDateTime {
|
||||
RTCDate Date;
|
||||
RTCTime Time;
|
||||
}RtcDateTime;
|
||||
|
||||
|
||||
// SYSM共有ワーク構造体
|
||||
typedef struct SYSM_work{
|
||||
u32 card_arm7_ram_adr; // NITROカードARM7初期ブートコードのRAMロードアドレス
|
||||
@ -226,7 +180,9 @@ typedef struct SYSM_work{
|
||||
// SYSM共有ワーク領域のアドレス獲得
|
||||
//----------------------------------------------------------------------
|
||||
|
||||
#define GetSYSMWork() ( (SYSM_work *)HW_RED_RESERVED )
|
||||
#define SYSM_GetResetParam() ( (ResetParam *)HW_RED_RESERVED )
|
||||
|
||||
#define GetSYSMWork() ( (SYSM_work *)( HW_RED_RESERVED + sizeof(ResetParam) ) )
|
||||
|
||||
//・SYSM共有ワーク領域のアドレスを獲得します。
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user