diff --git a/build/tests/DisplaySystemInformation/ARM7/Makefile b/build/tests/DisplaySystemInformation/ARM7/Makefile new file mode 100644 index 00000000..933bea4e --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7/Makefile @@ -0,0 +1,82 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlSDK - components - armadillo.TWL +# File: Makefile +# +# Copyright 2008 Nintendo. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev$ +# $Author$ +#---------------------------------------------------------------------------- + +override TARGET_PLATFORM = TWL +override TWL_PROC = ARM7 +override TWL_ARCHGEN = LIMITED +override TWL_PLATFORM = TS +TWL_NO_STD_PCHDR = True +TWL_CODEGEN ?= ALL + +#---------------------------------------------------------------------------- + +SRCS = main.c overwriteRtc.c + +TARGET_NAME = armadillo + +TARGET_NEF = $(TARGET_NAME).tef +LCFILE_SPEC = $(TARGET_NAME).lsf +LCFILE_TEMPLATE = $(TARGET_NAME).lcf.template +LDRES_TEMPLATE = $(TARGET_NAME).response.template + +CRT0_O = crt0.SCR.TWL.o + +# スタック不足防止の為、インライン展開せずにコンパイルする +CCFLAGS_OPT = -O4 -inline off + +#---------------------------------------------------------------------------- +include $(TWLSDK_ROOT)/build/buildtools/commondefs + +DISP_INFO = $(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation + +MACRO_FLAGS += -DSDK_ARM7COMP_LTD -DSDK_SEA + +MAKELCF_FLAGS += -DISDBG_LIBS_TWL='$(if $(ISDBG_LIBS_TWL),$(ISDBG_LIBS_TWL),libstubsistd_sp$(TWL_LIBSUFFIX).a)' \ + -DISDBG_LIBS_NITRO='libstubsisd_sp$(TWL_LIBSUFFIX).a' + +#-------------------------------- +# install target +#-------------------------------- +#INSTALL_TARGETS = $(BINDIR)/$(TARGET_NAME).tef \ +# $(BINDIR)/$(TARGET_NAME).TWL.FLX.sbin \ +# $(BINDIR)/$(TARGET_NAME)_defs.TWL.FLX.sbin \ +# $(BINDIR)/$(TARGET_NAME).TWL.LTD.sbin \ +# $(BINDIR)/$(TARGET_NAME)_defs.TWL.LTD.sbin + +#INSTALL_DIR = $(TWL_INSTALL_COMPONENTSDIR)/$(TARGET_NAME)/$(TWL_BUILDTYPE) + +LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include \ + $(DISP_INFO)/common/include + + +LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ + libsdio_sp$(TWL_LIBSUFFIX).a \ + libathdrv_sp$(TWL_LIBSUFFIX).a \ + libwpa_sp$(TWL_LIBSUFFIX).a \ + libsea_sp$(TWL_LIBSUFFIX).a \ + +LDEPENDS_NEF = $(TWL_LIBS) $(LLIBRARIES) + +do-build: $(TARGETS) + +#---------------------------------------------------------------------------- +include $(TWLSDK_ROOT)/build/buildtools/modulerules + +#---------------------------------------------------------------------------- + +#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template b/build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template new file mode 100644 index 00000000..6ae1bd6b --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7/armadillo.lcf.template @@ -0,0 +1,400 @@ +#--------------------------------------------------------------------------- +# Project: TwlSDK - components - armadillo.TWL +# File: armadillo.lcf.template +# +# Copyright 2008 Nintendo. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev$ +# $Author$ +#--------------------------------------------------------------------------- +MEMORY +{ + (RWX) : ORIGIN = , LENGTH = 0x0 > + binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> + + F (RW) : ORIGIN = 0, LENGTH = 0x0 > + + binary.LTDAUTOLOAD_TOP (RW) : ORIGIN = 0, LENGTH = 0x0 > + + (RWX) : ORIGIN = , LENGTH = 0x0 >> + + binary.LTDAUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> + + L (RW) : ORIGIN = 0, LENGTH = 0x0 > + + check.WORKRAM (RWX) : ORIGIN = 0x03740000, LENGTH = 0xd0000 > workram.check +} + +KEEP_SECTION +{ + .sinit +} + +SECTIONS +{ + ############################ STATIC ################################# + .: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # TEXT BLOCK: READ ONLY + # + SDK_STATIC_START =.; + OBJECT(_start,*) + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_STATIC_SINIT_START =.; + + + + + + + + + + + + + WRITEW 0; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(4); + + + + + + + + + + + + + . = ALIGN(4); + SDK_STATIC_END =.; + + SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; + __sinit__ = SDK_STATIC_SINIT_START; # for static initializer + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_STATIC_BSS_START =.; + + + + + + + + + + + + + . = ALIGN(4); + SDK_STATIC_BSS_END = .; + + SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; + + } >> + + ############################ STATIC_FOOTER ########################## + .binary.STATIC_FOOTER: + { + WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE + WRITEW _start_ModuleParams - ADDR(.); + WRITEW 0; # NO DIGEST + WRITEW _start_LtdModuleParams - ADDR(.); + + } > binary.STATIC_FOOTER + + ############################ OVERLAYDEFS ############################ + .F: + { + ### module information + WRITEW ADDR(.); # load address + WRITEW _start; # entry address + WRITEW SDK_STATIC_SIZE; # size of module + WRITEW _start_AutoloadDoneCallback; # callback autoload done + + } > F + + ########################### LTDAUTOLOADS ############################ + SDK_LTDAUTOLOAD_TOP_START = 0x02f00000; + SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC 領域が無い代わりに 4 bytes のダミーがバイナリファイルの先頭に入る # + SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; + SDK_LTDAUTOLOAD_SIZE = 0; + SDK_LTDAUTOLOAD_BSS_END = 0x03740000; + + .binary.LTDAUTOLOAD_TOP: + { + WRITEW 0; + + } > binary.LTDAUTOLOAD_TOP + + + .: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # TEXT BLOCK: READ ONLY + # + SDK_LTDAUTOLOAD..START =.; + + + + + + + + + . = ALIGN(4); + SDK_STATIC_ETABLE_START =.; + __exception_table_start__ =.; + EXCEPTION + __exception_table_end__ =.; + SDK_STATIC_ETABLE_END =.; + + + + + + + + + + + + + + . = ALIGN(4); + SDK_LTDAUTOLOAD..SINIT_START =.; + + + + + + + + + + + + + WRITEW 0; + + # + # DATA BLOCK: READ WRITE BLOCK + # + . = ALIGN(4); + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_LTDAUTOLOAD..END =.; + + SDK_LTDAUTOLOAD..SIZE = SDK_LTDAUTOLOAD..END - SDK_LTDAUTOLOAD..START; + SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD..SIZE; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_LTDAUTOLOAD..BSS_START =.; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_LTDAUTOLOAD..BSS_END =.; + SDK_LTDAUTOLOAD_BSS_END =.; + + SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; + + } >> + + + SDK_MOUNT_INFO_TABLE = SDK_LTDAUTOLOAD_BSS_END; + SDK_LTDAUTOLOAD_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; + + ######################### LTDAUTOLOAD_INFO ########################## + .binary.LTDAUTOLOAD_INFO: + { + + WRITEW ADDR(.); + WRITEW SDK_LTDAUTOLOAD..SIZE; + WRITEW SDK_LTDAUTOLOAD..SINIT_START; + WRITEW SDK_LTDAUTOLOAD..BSS_SIZE; + + + } > binary.LTDAUTOLOAD_INFO + + SDK_LTDAUTOLOAD_LIST = SDK_LTDAUTOLOAD_START + SDK_LTDAUTOLOAD_SIZE; + SDK_LTDAUTOLOAD_LIST_END = SDK_LTDAUTOLOAD_LIST + SIZEOF(.binary.LTDAUTOLOAD_INFO); + SDK_LTDAUTOLOAD_SIZE = SDK_LTDAUTOLOAD_SIZE + SIZEOF(.binary.LTDAUTOLOAD_INFO); + + ########################## LTDOVERLAYDEFS ########################### + .L: + { + ### TWL limited extended static module information + WRITEW SDK_LTDAUTOLOAD_TOP_START; # load address + WRITEW SDK_MOUNT_INFO_TABLE; # address of the FS mount information table + WRITEW SDK_LTDAUTOLOAD_SIZE + SDK_LTDAUTOLOAD_TOP_SIZE; # size of module + WRITEW 0; # padding + + } > L + + ############################ OTHERS ################################# + SDK_SUBPRIV_ARENA_LO = 0x02ffc000; # メインメモリアリーナはサイズ 0 + SDK_SEA_KEY_STORE = SDK_LTDAUTOLOAD_BSS_END; + SDK_WRAM_ARENA_LO = SDK_LTDAUTOLOAD_BSS_END + 0x40; + + SDK_IRQ_STACKSIZE = ; # allocated in WRAM + SDK_SYS_STACKSIZE = ; # allocated in WRAM + SDK_SYS_STACKSIZE_SIGN = (SDK_SYS_STACKSIZE < 0x80000000) * 2 - 1; + + .check.WORKRAM: + { + . = SDK_WRAM_ARENA_LO + 0x80 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; + + } > check.WORKRAM +} diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf b/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf new file mode 100644 index 00000000..4519fc34 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7/armadillo.lsf @@ -0,0 +1,85 @@ +#---------------------------------------------------------------------------- +# Project: TwlSDK - components - armadillo.TWL +# File: armadillo.lsf +# +# Copyright 2008 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$ +#---------------------------------------------------------------------------- +# +# Nitro LCF SPEC FILE +# +#-------- +Static $(TARGET_NAME) +{ + Address 0x02380000 + StackSize 1024 1024 + + Library $(CRT0_O) +} + +#-------- +Ltdautoload SCRWRAM +{ + Address 0x03740000 + + Library libsubpsyscall.a + Library libsyscall_sp.twl.a + Library $(CW_LIBS) + Library $(ISDBG_LIBS_TWL) + Library $(ISDBG_LIBS_NITRO) + + Object * (.etable) + Object $(OBJDIR)/main.o + Object $(OBJDIR)/overwriteRtc.o + + Library libsea_sp$(LIBSUFFIX).a + Library libcrypto_sp$(LIBSUFFIX).a + + Library libos_sp$(LIBSUFFIX).a + Library libmi_sp$(LIBSUFFIX).a + Library libstd_sp$(LIBSUFFIX).a + Library libmath_sp$(LIBSUFFIX).a + Library libpxi_sp$(LIBSUFFIX).a + Library libexi_sp$(LIBSUFFIX).a + Library libi2c_sp$(LIBSUFFIX).a + Library libsdio_sp$(LIBSUFFIX).a + Library libpad_sp$(LIBSUFFIX).a + Library libscfg_sp$(LIBSUFFIX).a + Library libmcu_sp$(LIBSUFFIX).a + Library libcdc_sp$(LIBSUFFIX).a + Library libsnd_sp$(LIBSUFFIX).a + Library libsndex_sp$(LIBSUFFIX).a + Library libspi_sp$(LIBSUFFIX).a + Library libpm_sp$(LIBSUFFIX).a + Library libtp_sp$(LIBSUFFIX).a + Library libtpex_sp$(LIBSUFFIX).a + Library libmic_sp$(LIBSUFFIX).a + Library libmicex_sp$(LIBSUFFIX).a + Library libnvram_sp$(LIBSUFFIX).a + Library librtc_sp$(LIBSUFFIX).a + Library libfatfs_sp$(LIBSUFFIX).a + Library libwm_sp$(LIBSUFFIX).a + Library libnwm_sp$(LIBSUFFIX).a + Library libwvr_sp$(LIBSUFFIX).a + Library libwl_sp$(LIBSUFFIX).a + Library libwpa_sp$(LIBSUFFIX).a + Library libathdrv_sp$(LIBSUFFIX).a +# Library libfs_sp$(LIBSUFFIX).a +# Library libcard_sp$(LIBSUFFIX).a +# Library libcamera_sp$(LIBSUFFIX).a + + Object * (.wram) + Object * (.ltdwram) + Object * (.rsvwram) + Object * (.main) + Object * (.ltdmain) +} diff --git a/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template b/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template new file mode 100644 index 00000000..b68c3564 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7/armadillo.response.template @@ -0,0 +1,22 @@ + + + + + -l + + + + + + + -l + + + + + + + + -l + + diff --git a/build/tests/DisplaySystemInformation/ARM7/src/main.c b/build/tests/DisplaySystemInformation/ARM7/src/main.c new file mode 100644 index 00000000..219de8c5 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7/src/main.c @@ -0,0 +1,632 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - components - armadillo.TWL + File: main.c + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "nvram_sp.h" + +#include "address.h" + + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +/* 各スレッド優先度 */ +#define THREAD_PRIO_SPI 2 +#define THREAD_PRIO_MCU 4 // 暫定 +#define THREAD_PRIO_SND 6 +#define THREAD_PRIO_NWM_EVENT 7 +#define THREAD_PRIO_NWM_SDIO 8 +#define THREAD_PRIO_FATFS 8 +#define THREAD_PRIO_NWM_COMMAND 9 +#define THREAD_PRIO_NWM_WPA 10 +#define THREAD_PRIO_AES 12 +#define THREAD_PRIO_SEA 12 +#define THREAD_PRIO_RTC 12 +#define THREAD_PRIO_SNDEX 14 +#define THREAD_PRIO_FS 15 +/* OS_THREAD_LAUNCHER_PRIORITY 16 */ + +/* ROM 内登録エリアの拡張言語コード */ +#define ROMHEADER_FOR_CHINA_BIT 0x80 +#define ROMHEADER_FOR_KOREA_BIT 0x40 + +/* 使用 DMA 番号 */ +#define DMA_NO_FATFS FATFS_DMA_4 // = 0 +#define DMA_NO_NWM NWMSP_DMA_7 + +/*---------------------------------------------------------------------------* + 内部関数定義 + *---------------------------------------------------------------------------*/ +static void PrintDebugInfo(void); +static OSHeapHandle InitializeAllocateSystem(void); +static void InitializeFatfs(void); +static void InitializeNwm(OSHeapHandle hh); +static void DummyThread(void* arg); + +static void ReadUserInfo(void); +#ifdef NVRAM_CONFIG_DATA_EX_VERSION +static BOOL IsValidConfigEx(void); +static u16 GetRomValidLanguage(void); +static s32 CheckCorrectNCDEx(NVRAMConfigEx* ncdsp); +#else +static s32 CheckCorrectNCD(NVRAMConfig* ncdsp); +#endif +static void VBlankIntr(void); + +/*---------------------------------------------------------------------------* + Name: TwlSpMain + Description: 起動ベクタ。 + Arguments: None. + Returns: None. + *---------------------------------------------------------------------------*/ +void +TwlSpMain(void) +{ + OSHeapHandle heapHandle; + + // OS初期化でARM9と同期する前にSCFGの情報を共有メモリに書き出す + // レジスタ情報をコピー + MI_CpuMove16( (void*)REG_ROM_ADDR, DISPINFO_SHARED_SCFG_REG_ADDR, DISPINFO_SHARED_SCFG_REG_SIZE ); + // WRAMに退避されてる分もコピー + MI_CpuMove16( (void*)HWi_WSYS04_ADDR, DISPINFO_SHARED_SCFG_WRAM_ADDR, DISPINFO_SHARED_SCFG_WRAM_SIZE ); + + /* OS 初期化 */ + OS_Init(); + PrintDebugInfo(); + + /* NVRAM からユーザー情報読み出し */ + ReadUserInfo(); + + /* ヒープ領域設定 */ + heapHandle = InitializeAllocateSystem(); + + /* ボタン入力サーチ初期化 */ + (void)PAD_InitXYButton(); + + /* 割込み許可 */ + (void)OS_SetIrqFunction(OS_IE_V_BLANK, VBlankIntr); + (void)OS_EnableIrqMask(OS_IE_V_BLANK); + (void)GX_VBlankIntr(TRUE); + (void)OS_EnableIrq(); + (void)OS_EnableInterrupts(); + + /* 各ライブラリ初期化 */ + AES_Init(THREAD_PRIO_AES); // AES + SEA_Init(THREAD_PRIO_SEA); // SEA +// FS_Init(FS_DMA_NOT_USE); // FS for CARD +// FS_CreateReadServerThread(THREAD_PRIO_FS); // FS for CARD + InitializeFatfs(); // FAT-FS + InitializeNwm(heapHandle); // TWL 無線 + MCU_InitIrq(THREAD_PRIO_MCU); // マイコン + CDC_InitLib(); // CODEC +// if (OSi_IsCodecTwlMode() == TRUE) +// { +// CAMERA_Init(); // カメラ +// } + SND_Init(THREAD_PRIO_SND); // サウンド + SNDEX_Init(THREAD_PRIO_SNDEX); // サウンド拡張 + RTC_Init(THREAD_PRIO_RTC); // RTC + WVR_Begin(heapHandle); // NITRO 無線 + SPI_Init(THREAD_PRIO_SPI); + + while (TRUE) + { + OS_Halt(); + + /* ソフトウェアリセット要求は監視しない */ + /* AGB カートリッジの挿抜チェックは行わない */ + /* DS カードの挿抜チェックは行わない */ + } +} + +/*---------------------------------------------------------------------------* + Name: PrintDebugInfo + Description: ARM7 コンポーネントの情報をデバッグ出力する。 + Arguments: None. + Returns: None. + *---------------------------------------------------------------------------*/ +static void +PrintDebugInfo(void) +{ + OS_TPrintf("ARM7: This component is running on TWL.\n"); + OS_TPrintf("ARM7: This component is \"armadillo.TWL\".\n"); +} + +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystem + Description: メモリ割当てシステムを初期化する。 + Arguments: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + *---------------------------------------------------------------------------*/ +static OSHeapHandle +InitializeAllocateSystem(void) +{ + OSHeapHandle hh; + void* subLo = (void*)OS_GetWramSubArenaLo(); + void* subHi = (void*)OS_GetWramSubArenaHi(); + void* privLo = (void*)OS_GetWramSubPrivArenaLo(); + void* privHi = (void*)OS_GetWramSubPrivArenaHi(); + + if (((u32)privLo == HW_PRV_WRAM) && ((u32)subHi == HW_PRV_WRAM) && ((u32)subLo < HW_PRV_WRAM)) + { + /* SUB アリーナを SUBPRIV アリーナに吸収 */ + OS_SetWramSubArenaHi(subLo); + OS_SetWramSubPrivArenaLo(subLo); + privLo = subLo; + } + + /* アリーナを 0 クリア */ + MI_CpuClear8(privLo, (u32)privHi - (u32)privLo); + + /* ヒープ作成初期化 */ + privLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, privLo, privHi, 1); + hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, privLo, privHi); + if (hh < 0) + { + OS_Panic("ARM7: Failed to create heap.\n"); + } + + /* カレントヒープに設定 */ + (void)OS_SetCurrentHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + /* ヒープサイズの確認 */ + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + if (heapSize <= 0) + { + OS_Panic("ARM7: Failed to create heap.\n"); + } + OS_TPrintf("ARM7: heap size [%d]\n", heapSize); + } + + return hh; +} + +/*---------------------------------------------------------------------------* + Name: InitializeFatfs + Description: FATFSライブラリを初期化する。FATFS初期化関数内でスレッド休止 + する為、休止中動作するダミーのスレッドを立てる。 + Arguments: None. + Returns: None. + *---------------------------------------------------------------------------*/ +static void +InitializeFatfs(void) +{ + OSThread thread; + u32 stack[18]; + + /* ダミースレッド作成 */ + OS_CreateThread(&thread, DummyThread, NULL, + (void*)((u32)stack + (sizeof(u32) * 18)), sizeof(u32) * 18, OS_THREAD_PRIORITY_MAX); + OS_WakeupThreadDirect(&thread); + + /* FATFS 初期化 */ + /* [TODO] DMA は NOT_USE のままで良い? */ + if(!FATFS_Init(DMA_NO_FATFS, FATFS_DMA_NOT_USE, THREAD_PRIO_FATFS)) + { + /* do nothing */ + } + + /* ダミースレッド破棄 */ + OS_KillThread(&thread, NULL); +} + +/*---------------------------------------------------------------------------* + Name: InitializeNwm + Description: NWMライブラリを初期化する。 + Arguments: hh - 利用可能なヒープのハンドルを指定。 + Returns: None. + *---------------------------------------------------------------------------*/ +static void +InitializeNwm(OSHeapHandle hh) +{ + NwmspInit nwmInit; + + /* [TODO] 確保しているヒープ領域が新無線一式が必要としているメモリ量以上かのチェックが必要 */ + + nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMAND; + nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; + nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; + + nwmInit.dmaNo = DMA_NO_NWM; + nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; + nwmInit.drvHeap.handle = hh; + + nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; + nwmInit.wpaHeap.id = OS_ARENA_WRAM_SUBPRIV; + nwmInit.wpaHeap.handle = hh; + + NWMSP_Init(&nwmInit); +} + +/*---------------------------------------------------------------------------* + Name: DummyThread + Description: FATFSライブラリ、CDCライブラリを初期化する際に立てるダミーの + スレッド。 + Arguments: arg - 使用しない。 + Returns: None. + *---------------------------------------------------------------------------*/ +static void +DummyThread(void* arg) +{ +#pragma unused(arg) + while (TRUE) + { + } +} + +#ifdef WM_PRECALC_ALLOWEDCHANNEL +extern u16 WMSP_GetAllowedChannel(u16 bitField); +#endif +/*---------------------------------------------------------------------------* + Name: ReadUserInfo + + Description: NVRAMからユーザー情報を読み出し、共有領域に展開する。 + ミラーリングされているバッファが両方壊れている場合は、 + 共有領域のユーザー情報格納場所をクリアする。 + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ +static void ReadUserInfo(void) +{ + s32 offset; +#ifdef NVRAM_CONFIG_DATA_EX_VERSION + NVRAMConfigEx temp[2]; +#else + NVRAMConfig temp[2]; +#endif + s32 check; + u8 *p = OS_GetSystemWork()->nvramUserInfo; + + // オフセット読み出し +#ifdef NVRAM_CONFIG_CONST_ADDRESS + offset = NVRAM_CONFIG_DATA_ADDRESS_DUMMY; +#else + NVRAM_ReadDataBytes(NVRAM_CONFIG_DATA_OFFSET_ADDRESS, NVRAM_CONFIG_DATA_OFFSET_SIZE, + (u8 *)(&offset)); + offset <<= NVRAM_CONFIG_DATA_OFFSET_SHIFT; +#endif + +#ifdef NVRAM_CONFIG_DATA_EX_VERSION + // ミラーされた2つのデータを読み出し + NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfigEx), (u8 *)(&temp[0])); + NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfigEx), + (u8 *)(&temp[1])); + // 2つの内どちらを使うか判断 + check = CheckCorrectNCDEx(temp); +#else + // ミラーされた2つのデータを読み出し + NVRAM_ReadDataBytes((u32)offset, sizeof(NVRAMConfig), (u8 *)(&temp[0])); + NVRAM_ReadDataBytes((u32)(offset + SPI_NVRAM_PAGE_SIZE), sizeof(NVRAMConfig), (u8 *)(&temp[1])); + // 2つの内どちらを使うか判断 + check = CheckCorrectNCD(temp); +#endif + + if (check >= 3) + { + // アプリケーションの起動を抑制 + MI_CpuFill32(p, 0xffffffff, sizeof(NVRAMConfig)); + } + else if (check) + { + s32 i; + + // ニックネームを補正 + if (temp[check - 1].ncd.owner.nickname.length < NVRAM_CONFIG_NICKNAME_LENGTH) + { + for (i = NVRAM_CONFIG_NICKNAME_LENGTH; + i > temp[check - 1].ncd.owner.nickname.length; i--) + { + temp[check - 1].ncd.owner.nickname.str[i - 1] = 0x0000; + } + } + // コメントを補正 + if (temp[check - 1].ncd.owner.comment.length < NVRAM_CONFIG_COMMENT_LENGTH) + { + for (i = NVRAM_CONFIG_COMMENT_LENGTH; i > temp[check - 1].ncd.owner.comment.length; + i--) + { + temp[check - 1].ncd.owner.comment.str[i - 1] = 0x0000; + } + } + // 共有領域にストア + MI_CpuCopy32(&temp[check - 1], p, sizeof(NVRAMConfig)); + } + else + { + // 共有領域をクリア + MI_CpuClear32(p, sizeof(NVRAMConfig)); + } + + // 無線MACアドレスをユーザー情報の後ろに展開 + { + u8 wMac[6]; + + // NVRAMからMACアドレスを読み出し + NVRAM_ReadDataBytes(NVRAM_CONFIG_MACADDRESS_ADDRESS, 6, wMac); + // 展開先アドレスを計算 + p = (u8 *)((u32)p + ((sizeof(NVRAMConfig) + 3) & ~0x00000003)); + // 共有領域に展開 + MI_CpuCopy8(wMac, p, 6); + } + +#ifdef WM_PRECALC_ALLOWEDCHANNEL + // 使用可能チャンネルから使用許可チャンネルを計算 + { + u16 enableChannel; + u16 allowedChannel; + + // 使用可能チャンネルを読み出し + NVRAM_ReadDataBytes(NVRAM_CONFIG_ENABLECHANNEL_ADDRESS, 2, (u8 *)(&enableChannel)); + // 使用許可チャンネルを計算 + allowedChannel = WMSP_GetAllowedChannel((u16)(enableChannel >> 1)); + // 展開先アドレスを計算(MACアドレスの後ろの2バイト) + p = (u8 *)((u32)p + 6); + // 共有領域に展開 + *((u16 *)p) = allowedChannel; + } +#endif +} + +#ifdef NVRAM_CONFIG_DATA_EX_VERSION +/*---------------------------------------------------------------------------* + Name: IsValidConfigEx + + Description: ユーザー情報が拡張コンフィグに対応しているかどうかを調査する。 + + Arguments: None. + + Returns: BOOL - 拡張ユーザー情報が有効な場合にTRUEを返す。 + 無効である場合はFALSEを返す。 + *---------------------------------------------------------------------------*/ +static BOOL IsValidConfigEx(void) +{ + u8 ipl2_type; + + NVRAM_ReadDataBytes(NVRAM_CONFIG_IPL2_TYPE_ADDRESS, NVRAM_CONFIG_IPL2_TYPE_SIZE, &ipl2_type); + if (ipl2_type == NVRAM_CONFIG_IPL2_TYPE_NORMAL) + { + return FALSE; + } + if (ipl2_type & NVRAM_CONFIG_IPL2_TYPE_EX_MASK) + { + return TRUE; + } + return FALSE; +} + +/*---------------------------------------------------------------------------* + Name: GetRomValidLanguage + + Description: ROM内登録エリアの情報から、拡張言語コードの対応言語ビットマップ + に関する情報を抽出する。 + + Arguments: None. + + Returns: u16 - DSカード、もしくは マルチブートバイナリが対応している + 言語コードのビットマップを返す。DSカードが拡張言語 + コードに対応していない場合は 0 を返す。 + *---------------------------------------------------------------------------*/ +static u16 GetRomValidLanguage(void) +{ + u16 ret = 0x0000; + u8 langBit = OS_GetSystemWork()->rom_header[0x1d]; + + // ROM内登録エリアの拡張言語コードを確認 + if (langBit == ROMHEADER_FOR_CHINA_BIT) + { + // for CHINA + ret |= (0x0001 << NVRAM_CONFIG_LANG_CHINESE); + } + else if (langBit == ROMHEADER_FOR_KOREA_BIT) + { + // for KOREA + ret |= (0x0001 << NVRAM_CONFIG_LANG_HANGUL); + } + return ret; +} + +/*---------------------------------------------------------------------------* + Name: CheckCorrectNCDEx + + Description: ミラーリングされているユーザー情報のどちらを使うべきか判定する。 + + Arguments: nvdsp - 比較するコンフィグデータ2つの配列。 + + Returns: s32 - 0: 両方不適切。 + 1: 配列[ 0 ]が適切。 + 2: 配列[ 1 ]が適切。 + 3: アプリの起動を抑制すべき。 + *---------------------------------------------------------------------------*/ +static s32 CheckCorrectNCDEx(NVRAMConfigEx * ncdsp) +{ + u16 i; + u16 calc_crc; + s32 crc_flag = 0; + u16 saveCount; + + // IPLが拡張言語コードに対応しているか + if (IsValidConfigEx()) + { + // IPLが拡張言語コードに対応している場合 + u16 rom_valid_language = GetRomValidLanguage(); + + for (i = 0; i < 2; i++) + { + calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); + if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) + { + // CRC が正しく saveCount 値が 0x80 未満のデータを正当と判断 + calc_crc = + SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd_ex), sizeof(NVRAMConfigDataEx)); + if ((ncdsp[i].crc16_ex == calc_crc) + && ((0x0001 << ncdsp[i].ncd_ex.language) & + (ncdsp[i].ncd_ex.valid_language_bitmap))) + { + // 拡張データ用 CRC が正しく、設定言語コードが対応言語コードに含まれる場合に正当と判断 + if (rom_valid_language & ncdsp[i].ncd_ex.valid_language_bitmap) + { + // 拡張言語コードで通常言語コードを上書き + ncdsp[i].ncd.option.language = ncdsp[i].ncd_ex.language; + } + if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE) & ~ncdsp[i]. + ncd_ex.valid_language_bitmap) + { + // ROM 内登録エリアに"中国語"拡張言語コードが設定されているが、 + // IPL2の対応言語コードに"中国語"拡張言語コードが含まれない場合は起動を抑制 + return 3; + } + crc_flag |= (1 << i); + } + } + } + } + else + { + // IPLが拡張言語コードに対応していない場合 + u16 rom_valid_language = GetRomValidLanguage(); + + if (rom_valid_language & (0x0001 << NVRAM_CONFIG_LANG_CHINESE)) + { + // ROM 内登録エリアに"中国語"拡張言語コードが設定されている場合は起動を抑制 + return 3; + } + for (i = 0; i < 2; i++) + { + calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); + if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) + { + // CRC が正しく saveCount 値が 0x80 未満のデータを正当と判断 + crc_flag |= (1 << i); + } + } + } + + // 正当なデータのうちどのデータが有効かを判定する。 + switch (crc_flag) + { + case 1: + case 2: + // 片方のCRCだけ正常 + return crc_flag; + + case 3: + // 両方ともCRCが正しければどちらが最新のデータか判断する。 + saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); + if (saveCount == ncdsp[1].saveCount) + { + return 2; + } + return 1; + } + + // 両方ともCRCが不正 + return 0; +} + +#else +/*---------------------------------------------------------------------------* + Name: CheckCorrectNCD + + Description: ミラーリングされているユーザー情報のどちらを使うべきか判定する。 + + Arguments: nvdsp - 比較するコンフィグデータ2つの配列。 + + Returns: s32 - 0: 両方不適切。 + 1: 配列[ 0 ]が適切。 + 2: 配列[ 1 ]が適切。 + *---------------------------------------------------------------------------*/ +static s32 CheckCorrectNCD(NVRAMConfig *ncdsp) +{ + u16 i; + u16 calc_crc; + s32 crc_flag = 0; + u16 saveCount; + + // 各ミラーデータのCRC & saveCount正当性チェック + for (i = 0; i < 2; i++) + { + calc_crc = SVC_GetCRC16(0xffff, (void *)(&ncdsp[i].ncd), sizeof(NVRAMConfigData)); + + if ((ncdsp[i].crc16 == calc_crc) && (ncdsp[i].saveCount < NVRAM_CONFIG_SAVE_COUNT_MAX)) + { + // CRCが正しく、saveCount値が0x80未満のデータを正当と判断。 + crc_flag |= (1 << i); + } + } + + // 正当なデータのうちどのデータが有効かを判定する。 + switch (crc_flag) + { + case 1: + case 2: + // 片方のCRCだけ正常 + return crc_flag; + + case 3: + // 両方ともCRCが正しければどちらが最新のデータか判断する。 + saveCount = (u8)((ncdsp[0].saveCount + 1) & NVRAM_CONFIG_SAVE_COUNT_MASK); + if (saveCount == ncdsp[1].saveCount) + { + return 2; + } + return 1; + } + + // 両方ともCRCが不正 + return 0; +} +#endif + +/*---------------------------------------------------------------------------* + Name: VBlankIntr + Description: V ブランク割り込みベクタ。 + Arguments: None. + Returns: None. + *---------------------------------------------------------------------------*/ +extern BOOL PMi_Initialized; +extern void PM_SelfBlinkProc(void); + +static void +VBlankIntr(void) +{ + if (PMi_Initialized) + { + PM_SelfBlinkProc(); + } +} diff --git a/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c b/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c new file mode 100644 index 00000000..179346ea --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7/src/overwriteRtc.c @@ -0,0 +1,224 @@ +/*---------------------------------------------------------------------------* + Project: TwlSDK - components - armadillo.TWL + File: overwriteRtc.c + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include + +extern BOOL RTC_IsAvailablePxiCommand(u16 command); +extern void INIT_InitializeScfg(void); + + +/*---------------------------------------------------------------------------* + Name: RTC_IsAvailablePxiCommand + + Description: PXI コマンドが有効な RTC 操作コマンドであるかどうか調査する。 + + Arguments: command - 調査するコマンド。 + + Returns: BOOL - 有効なコマンドである場合に TRUE を返す。処理できな + い無効なコマンドである場合には FALSE を返す。 + *---------------------------------------------------------------------------*/ +BOOL +RTC_IsAvailablePxiCommand(u16 command) +{ + switch (command) + { + case RTC_PXI_COMMAND_RESET: + case RTC_PXI_COMMAND_SET_HOUR_FORMAT: + case RTC_PXI_COMMAND_READ_DATETIME: + case RTC_PXI_COMMAND_READ_DATE: + case RTC_PXI_COMMAND_READ_TIME: + case RTC_PXI_COMMAND_READ_PULSE: + case RTC_PXI_COMMAND_READ_ALARM1: + case RTC_PXI_COMMAND_READ_ALARM2: + case RTC_PXI_COMMAND_READ_STATUS1: + case RTC_PXI_COMMAND_READ_STATUS2: + case RTC_PXI_COMMAND_READ_ADJUST: + case RTC_PXI_COMMAND_READ_FREE: + case RTC_PXI_COMMAND_WRITE_DATETIME: + case RTC_PXI_COMMAND_WRITE_DATE: + case RTC_PXI_COMMAND_WRITE_TIME: + case RTC_PXI_COMMAND_WRITE_PULSE: + case RTC_PXI_COMMAND_WRITE_ALARM1: + case RTC_PXI_COMMAND_WRITE_ALARM2: + case RTC_PXI_COMMAND_WRITE_STATUS1: + case RTC_PXI_COMMAND_WRITE_STATUS2: + case RTC_PXI_COMMAND_WRITE_ADJUST: + case RTC_PXI_COMMAND_WRITE_FREE: + return TRUE; + } + return FALSE; +} + +/*---------------------------------------------------------------------------* + Name: INIT_InitializeScfg + + Description: ローダーが行う SCFG ブロックへの設定処理を代行する為の関数。 + crt0 内の弱シンボルを上書きする。 + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ + +asm void +INIT_InitializeScfg(void) +{ + /* A7-SCFG のアクセス可否判定 */ + ldr r1, =REG_EXT_ADDR + ldr r0, [r1] + ldr r2, =HW_PRV_WRAM_SYSRV + tst r0, #REG_SCFG_EXT_CFG_MASK + beq @invalid + +@valid: + /* ARM7 Secure-ROM 切り離し */ + ldr r1, =REG_A7ROM_ADDR + ldrb r0, [r1] + orr r0, r0, #REG_SCFG_A7ROM_SEC_MASK + strb r0, [r1] + + /* ARM9 Secure-ROM 切り離し */ + ldr r1, =REG_A9ROM_ADDR + ldrb r0, [r1] + orr r0, r0, #REG_SCFG_A9ROM_SEC_MASK + strb r0, [r1] + + /* NITRO 無線を有効化 */ + ldr r1, =REG_WL_ADDR + ldrh r0, [r1] + orr r0, r0, #REG_SCFG_WL_OFFB_MASK + strh r0, [r1] + + /* ROM 設定、NITRO 無線設定、ボンディングオプション情報を WRAM に展開 */ + ldr r3, =REG_OP_ADDR // SCFG-OP + ldrb r1, [r3] + and r0, r1, #(REG_SCFG_OP_OP1_MASK | REG_SCFG_OP_OP0_MASK) + ldr r3, =REG_A9ROM_ADDR // SCFG-ROM:0~7 + ldrb r1, [r3] + and r3, r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) + orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) + ldr r3, =REG_A7ROM_ADDR // SCFG-ROM:8~15 + ldrb r1, [r3] + and r3, r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) + orr r0, r0, r3, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) + ldr r3, =REG_WL_ADDR // SCFG-WL + ldrb r1, [r3] + and r3, r1, #REG_SCFG_WL_OFFB_MASK + orr r0, r0, r3, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) + strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] + + /* 各新規ブロックへクロックを供給 */ + ldr r1, =REG_CLK_ADDR + ldrh r0, [r1] + ldr r3, =REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK | REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK + orr r0, r0, r3 + strh r0, [r1] + + /* JTAG 情報を WRAM に展開 */ + ldr r3, =REG_JTAG_ADDR // SCFG-JTAG + ldrh r1, [r3] + and r0, r1, #(REG_SCFG_JTAG_CPUJE_MASK | REG_SCFG_JTAG_ARM7SEL_MASK) + and r3, r1, #REG_SCFG_JTAG_DSPJE_MASK + orr r0, r0, r3, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) + strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] + + /* 各拡張機能を有効化 */ + ldr r1, =REG_EXT_ADDR // SCFG_EXT + ldr r0, [r1] + ldr r3, =REG_SCFG_EXT_WRAM_MASK | REG_SCFG_EXT_GPIO_MASK | REG_SCFG_EXT_I2C_MASK | REG_SCFG_EXT_I2S_MASK | REG_SCFG_EXT_MIC_MASK | REG_SCFG_EXT_SD2_MASK | REG_SCFG_EXT_SD1_MASK | REG_SCFG_EXT_AES_MASK | REG_SCFG_EXT_DMAC_MASK + orr r0, r0, r3 + orr r0, r0, #(REG_SCFG_EXT_DSEL_MASK | REG_SCFG_EXT_INTC_MASK) + bic r0, r0, #REG_SCFG_EXT_MC_B_MASK + str r0, [r1] + + /* 各拡張機能の制御設定内容を WRAM に展開 */ + str r0, [r2, #HWi_WSYS04_WRAMOFFSET] + + /* メモリーカード I/F のスロット選択 */ + ldr r1, =REG_MC1_ADDR // SCFG_MC1 + ldr r0, [r1] + bic r0, r0, #REG_MI_MC1_SWP_MASK + str r0, [r1] + + /* WRAM-A/B/C が ARM7 に割り当たっていることを確認 */ + ldr r1, =REG_MBK1_ADDR + ldr r0, [r1] + ldr r3, =0x8d898581 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK2_ADDR + ldr r0, [r1] + ldr r3, =0x8d898581 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK3_ADDR + ldr r0, [r1] + ldr r3, =0x9d999591 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK4_ADDR + ldr r0, [r1] + ldr r3, =0x8d898581 + cmp r0, r3 + blne INITi_Stop + ldr r1, =REG_MBK5_ADDR + ldr r0, [r1] + ldr r3, =0x9d999591 + cmp r0, r3 + blne INITi_Stop + + /* WRAM-A/B/C のメモリマップを設定 */ + ldr r1, =REG_MBK6_ADDR + ldr r0, =0x080037c0 + str r0, [r1] + ldr r1, =REG_MBK7_ADDR + ldr r0, =0x07c03780 + str r0, [r1] + ldr r1, =REG_MBK8_ADDR + ldr r0, =0x07803740 + str r0, [r1] + ldr r1, =REG_MBK9_ADDR + ldr r0, =0x00ffff0f + str r0, [r1] + + /* A7-SCFG ブロックへのアクセスを無効化 */ +// ldr r1, =REG_EXT_ADDR +// ldr r0, [r1] +// bic r0, r0, #REG_SCFG_EXT_CFG_MASK +// str r0, [r1] + +@invalid: + /* ROM 設定、NITRO 無線設定内容を確認 */ + ldrb r0, [r2, #HWi_WSYS08_WRAMOFFSET] + and r0, r0, #(HWi_WSYS08_ROM_ARM7RSEL_MASK | HWi_WSYS08_ROM_ARM9RSEL_MASK | HWi_WSYS08_ROM_ARM9SEC_MASK) + cmp r0, #HWi_WSYS08_ROM_ARM9SEC_MASK + blne INITi_Stop + + /* SCFG レジスタ設定情報を共有領域にコピー */ + ldr r2, =HW_PRV_WRAM_SYSRV + ldr r3, =HW_SYS_CONF_BUF + ldr r0, [r2, #HWi_WSYS04_WRAMOFFSET] + str r0, [r3, #HWi_WSYS04_OFFSET] + ldrh r0, [r2, #HWi_WSYS08_WRAMOFFSET] + strh r0, [r3, #HWi_WSYS08_OFFSET] + + bx lr +} diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile b/build/tests/DisplaySystemInformation/ARM9/Makefile new file mode 100644 index 00000000..467a921e --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/Makefile @@ -0,0 +1,81 @@ +#/*---------------------------------------------------------------------------* +# Project: TwlIPL - tests - DisplaySystemInformation +# File: makefile +# +# Copyright **** Nintendo. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev:$ +# $Author:$ +# *---------------------------------------------------------------------------*/ +TARGET_FIRM = SYSTEMMENU +TARGET_PLATFORM = TWL +TWL_ARCHGEN = LIMITED + +DISP_INFO = $(TWL_IPL_RED_ROOT)/build/tests/DisplaySystemInformation + +SUBDIRS = + +MISC_DIR = ../../../systemMenu_RED/misc + +SRCS = main.c viewSystemInfo.c drawFunc.c control.c\ + strResource.c misc.c \ + $(MISC_DIR)/src/cmn.c + +LINCLUDES += $(MISC_DIR)/include \ + $(DISP_INFO)/common/include + +SYSMENU_LIBS = \ + liblcfg$(TWL_LIBSUFFIX).a \ + libsysmenu$(TWL_LIBSUFFIX).a \ + libsysmmcu$(TWL_LIBSUFFIX).a \ + libsysmutil$(TWL_LIBSUFFIX).a \ + libbanner$(TWL_LIBSUFFIX).a \ + libboot$(TWL_LIBSUFFIX).a \ + libds$(TWL_LIBSUFFIX).a \ + libhotsw$(TWL_LIBSUFFIX).a \ + libdht$(TWL_LIBSUFFIX).a \ + libreloc_info$(TWL_LIBSUFFIX).a \ + libnamut$(TWL_LIBSUFFIX).a \ + libsharedfont_launcher$(TWL_LIBSUFFIX).a \ + WDS$(TWL_LIBSUFFIX).a + +SDK_APPEND_LIBS = \ + libes$(TWL_LIBSUFFIX).a \ + libboc$(TWL_LIBSUFFIX).a \ + libsfs$(TWL_LIBSUFFIX).a \ + libnam$(TWL_LIBSUFFIX).a \ + libsea$(TWL_LIBSUFFIX).a \ + libreboot$(TWL_LIBSUFFIX).a \ + +LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) + +TARGET_BIN = main.srl +ROM_SPEC = main.rsf + +include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs + +MAKEROM = $(TWL_TOOLSDIR)/bin/makerom.TWL.secure.exe +DEFAULT_COMP_ARM7 = armadillo +DEFAULT_MAKEROM_ARM7_BASE = ../ARM7/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) +DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) + + +#---------------------------------------------------------------------------- +do-build: $(TARGETS) + +#---------------------------------------------------------------------------- + + +include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules +#include $(TWLSDK_ROOT)/build/buildtools/modulerules +#include $(TWL_IPL_RED_ROOT)/build/tests/RelocateChecker/buildtools/modulerules + + +#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/ARM9/main.rsf b/build/tests/DisplaySystemInformation/ARM9/main.rsf new file mode 100644 index 00000000..df4af035 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/main.rsf @@ -0,0 +1,245 @@ +#---------------------------------------------------------------------------- +# Project: TwlSDK - include +# File: ROM-TS.rsf +# +# Copyright 2007 Nintendo. All rights reserved. +# +# These coded insructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev$ +# $Author$ +#---------------------------------------------------------------------------- +# +# TWL ROM SPEC FILE +# + +Arm9 +{ + Static "$(MAKEROM_ARM9:r).TWL.FLX.sbin$(COMPSUFFIX9)" + OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.FLX.sbin$(COMPSUFFIX9)" + OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.FLX.sbin$(COMPSUFFIX9)" + Elf "$(MAKEROM_ARM9:r).tef" +} + +Arm7 +{ + Static "$(MAKEROM_ARM7_BASE:r).TWL.FLX.sbin$(COMPSUFFIX7)" + OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.FLX.sbin$(COMPSUFFIX7)" + OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.FLX.sbin$(COMPSUFFIX7)" + Elf "$(MAKEROM_ARM7_BASE:r).tef" +} + +Arm9.Ltd +{ + Static "$(MAKEROM_ARM9:r).TWL.LTD.sbin$(COMPSUFFIX9)" + OverlayDefs "$(MAKEROM_ARM9:r)_defs.TWL.LTD.sbin$(COMPSUFFIX9)" + OverlayTable "$(MAKEROM_ARM9:r)_table.TWL.LTD.sbin$(COMPSUFFIX9)" +} + +Arm7.Ltd +{ + Static "$(MAKEROM_ARM7_BASE:r).TWL.LTD.sbin$(COMPSUFFIX7)" + OverlayDefs "$(MAKEROM_ARM7_BASE:r)_defs.TWL.LTD.sbin$(COMPSUFFIX7)" + OverlayTable "$(MAKEROM_ARM7_BASE:r)_table.TWL.LTD.sbin$(COMPSUFFIX7)" +} + +Property +{ + ### + ### Settings for FinalROM + ### + #### BEGIN + # + # TITLE NAME: Your product name within 12bytes + # + #TitleName "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 + + # + # Permit LandingNormalJump: for TWL "ApplicationJump" function [TRUE/FALSE] + # + #PermitLandingNormalJump FALSE + + # + # Permit LandingTmpJump: for TWL "ApplicationJump" function [TRUE/FALSE] + # + #PermitLandingTmpJump FALSE + + ### + ### Setting for TWL + ### + + # + # ROM HEADER Ltd: Provided to every product by NINTENDO + # + RomHeaderLtd $(TWLSDK_ROOT)/tools/bin/rom_header.LTD.sbin + + # + # Digest parameters: + # + DigestParam 1024 32 + + # + # WRAM mapping: [MAP_BB_HYB/MAP_BB_LTD/MAP_TS_HYB/MAP_TS_LTD + # MAP2_BB_HYB/MAP2_BB_LTD/MAP2_TS_HYB/MAP2_TS_LTD] + # don't have to edit + # + WramMapping MAP_TS_SCR + + # + # CardRegion: card region [Japan/America/Europe/Australia/China/Korea] + # + CardRegion Japan + + # + # CommonClientKey: launcher deliver common client Key [TRUE/FALSE] + # + #CommonClientKey FALSE + + # + # HwAESSlotB: launcher deliver HW AES slot B setting [TRUE/FALSE] + # + #HwAESSlotB FALSE + + # + # HwAESSlotC: launcher deliver HW AES slot C setting [TRUE/FALSE] + # + #HwAESSlotC FALSE + + # + # SDCardAccess: sd card access control [TRUE/FALSE] + # + #SDCardAccess FALSE + + # + # NANDAccess: NAND access control [TRUE/FALSE] + # + #NANDAccess FALSE + NANDAccess TRUE + + # + # Codec mode: + # don't have to edit + # + CodecMode $(MAKEROM_CODEC_MODE) + + # + # Disp WiFiConnection Icon for Launcher [TRUE/FALSE] + # + #WiFiConnectionIcon FALSE + + # + # Disp DSWireless Icon for Launcher [TRUE/FALSE] + # + #DSWirelessIcon FALSE + LockSCFG FALSE + + + ### + #### END +} + +AppendProperty +{ + # + # Publisher : "Nintendo" + # don't have to edit + Publisher Nintendo + + # + # Application type : [USER/SYSTEM] + # don't have to edit + AppType SYSTEM + + # + # launch title on the launcher : [TRUE/FALSE] + # don't have to edit + Launch TRUE + + # + # Boot allowed Media: [GameCard] + # + Media NAND + + # + # Data only title : [TRUE/FALSE] + # don't have to edit + #DataOnly FALSE + + # + # Secure title : [TRUE/FALSE] + # don't have to edit + Secure TRUE + + # + # GameCode for TitleID : Your GameCode in 4 ascii words + # + GameCode ABCJ + + # + # Public save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] + # + #PublicSaveDataSize 32K + + # + # Private save data size: [0K/16K/32K/64K/128K/256K/512K/1M/2M/4M] + # + #PrivateSaveDataSize 16K + + # + # Enable SubBannerFile + #SubBannerFile TRUE + +} + +RomSpec +{ + Offset 0x00000000 + Segment ALL + HostRoot ../../../systemMenu_RED/data + Root /data + File NTR_IPL_font_m.NFTR + +} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/control.c b/build/tests/DisplaySystemInformation/ARM9/src/control.c new file mode 100644 index 00000000..f3923412 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/control.c @@ -0,0 +1,139 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: control.c + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + +#include +#include "misc.h" +#include "drawFunc.h" +#include "control.h" +#include "strResource.h" + +static int selectLine[ROOTMENU_SIZE+1]; + + +BOOL control( int *menu, int *line ) +{ + int linemax = s_numMenu[*menu]; // 選択中ページの項目数 + BOOL controlFlag = FALSE; // 何か操作があったらTRUEになる + + // 上下で項目変更 + if( pad.trg & PAD_KEY_UP ) + { + controlFlag = TRUE; + + if( --(*line) < 0 ) + { + // ラインをデクリメントした結果マイナスになったら一番最後へ + *line = linemax - 1; + } + } + else if( pad.trg & PAD_KEY_DOWN ) + { + controlFlag = TRUE; + + if( ++(*line) >= linemax ) + { + // ラインをインクリメントした結果、maxlineを超えたら最初へ + *line = 0; + } + } + + // 左右でページ送り + if( pad.trg & PAD_KEY_RIGHT ) + { + controlFlag = TRUE; + *line += DISP_NUM_LINES - 2; + + if( *line >= linemax ) + { + *line = linemax - 1; + } + } + else if( pad.trg & PAD_KEY_LEFT ) + { + controlFlag = TRUE; + *line -= DISP_NUM_LINES - 2; + + if( *line < 0 ) + { + *line = 0; + } + } + + + if( pad.trg & PAD_BUTTON_A ) + { + controlFlag = TRUE; + + if(*menu == MENU_ROOT) + { + // 今の画面の選択位置を記録 + selectLine[ROOTMENU_SIZE] = *line; + + // 次のメニュー画面を開く + *menu = *line; + *line = selectLine[*menu]; + } + else + { + // !!! 設定可能な項目だったら設定変更画面 + } + + } + + if( pad.trg & PAD_BUTTON_B ) + { + if( *menu != MENU_ROOT ) + { + // !!! とりあえず今はルートに戻る + // 値設定画面の時はキャンセルするだけにする + controlFlag = TRUE; + + selectLine[*menu] = *line; + *menu = MENU_ROOT; + *line = selectLine[ROOTMENU_SIZE]; + } + } + + return controlFlag; +} + + +int getMaxPage( int menu ) +{ +// 表示中メニューのページが何ページあるのか + int i; + + if( menu == MENU_ROOT ) return 0; + + for(i=0; i + +#ifdef __cplusplus +extern "C" { +#endif + + +BOOL control( int *menu, int *line ); +int getMaxPage( int menu ); +int getMaxLine( int menu , int page ); + +#ifdef __cplusplus +} +#endif + +#endif \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c new file mode 100644 index 00000000..188c8306 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c @@ -0,0 +1,604 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: drawFunc.c + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include "drawFunc.h" +#include "viewSystemInfo.h" +#include "misc.h" +#include "strResource.h" +#include "myIoreg_SCFG.h" + + + +// 描画関連 +#define HEADER_UP 0 +#define HEADER_LEFT 10 +#define PAGE_LEFT 160 +#define FOOTER_UP 140 +#define FOOTER_LEFT 10 +#define ALLOW_LEFT 0 + +#define AST_LEFT ( ALLOW_LEFT + LINE_OFFSET ) +#define KIND_UP 10 // 項目名の上座標 +#define KIND_LEFT ( AST_LEFT + 10 ) // 項目名の左座標 +#define VALUE_UP KIND_UP // 項目値の上座標 +#define VALUE_LEFT 140 // 項目値の左座標 +#define LINE_OFFSET 15 // 1行ごとのオフセット +#define ROW_OFFSET 15 // 長い項目が現れたときの段組用 + +#define REGISTER_NAME_LEFT 10 +#define REGISTER_NAME_UP 15 +#define REGISTER_DATA_LEFT 100 +#define REGISTER_DATA_UP 15 + +#define SCROLL_MARGIN 2 // 画面端何行でスクロールするか + +#define UNIQUE_BUF 12 +#define BINARY_BUF 20 + +/* global variables -------------------- */ + +static int gDrawIdx[ROOTMENU_SIZE]; // 今何項目目から下を描画しているのか +static int gMenuLineSize[ROOTMENU_SIZE] = {};// 各メニューの全体行数 + +int gMenuKindOffset[ROOTMENU_SIZE][MAXITEM]; + +/* function prototypes -------------------- */ + +void printData( int x, int y, int color, DispInfoEntry *entry ); +void printValue( int menu,int entryLine, int drawOffset, DispInfoEntry *entry ); +void printKindName( int menu, int entryLine, int drawOffset, int selected ); +void printBinary16( int x, int y, u16 value ); +void printBinary32( int x, int y, u32 value ); +void drawRegister( int menu, int selected ); +void drawOwnerMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset); +void drawParentalMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset); +void drawNormalHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset); +void drawSecureHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset); +void drawSCFGARM7Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset); +void drawSCFGARM9Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset); +void drawVersionMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset); +void printUniqueID( int drawLineOffset, char *uniqueId ); +int getPageNum( int valueIdx, const int* pageOffset ); +int countMenuLine( int menu ); + +void drawHeader( int menu, int line) +// 画面端に簡単な情報を表示する +{ + u16 buf[256]; + + PutStringUTF16Sub( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, (const u16 *)L"DisplaySystemInfo"); + if( menu != MENU_ROOT ) + { + + swprintf(buf, 256, L"Root > %s", s_strMenuName[menu] ); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + LINE_OFFSET, TXT_COLOR_BLUE, buf ); + + swprintf(buf, 256, L"%d / %d", line+1 , s_numMenu[menu] ); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + 2*LINE_OFFSET, TXT_COLOR_BLUE, buf ); + } + else + { + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L"Root" ); + swprintf(buf, 256, L"%d / %d", line+1 , ROOTMENU_SIZE ); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + 2*LINE_OFFSET, TXT_COLOR_BLUE, buf ); + } + + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP, TXT_COLOR_BLUE, (const u16 *)L" A: Decide B: Back "); +} + +void printData( int x, int y, int color, DispInfoEntry *entry ) +{ + if( entry->isNumData ) + { + // 数値データだったらそのままプリント + PrintfSJIS( x, y, color, "%d", entry->iValue ); + } + else if( entry->isSjis ) + { + // SJIS文字列 + PrintfSJIS( x, y, color, "%s", entry->str.sjis ); + } + else + { + // UTF16文字列 + PutStringUTF16( x, y, color, entry->str.utf ); + } + +} + +int countMenuLine( int menu ) +{ + int i; + int sum = 0; + + for( i=0; iiValue , "■" ); + printData( VALUE_LEFT + LINE_OFFSET , VALUE_UP + LINE_OFFSET*drawOffset, TXT_COLOR_BLACK, entry ); + return; + } + + if( menu == MENU_SECURE_HW && entryLine == SECURE_HW_UNIQUE_ID ) + { + printUniqueID( drawOffset, entry->str.sjis ); + entry->numLines = 4; + return; + } + + + // 通常の値の描画 + if( entry->isAligned ) + { + printData( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawOffset, TXT_COLOR_BLACK, entry ); + } + else + { + // 項目名が長くて字下げが必要な場合 + printData( VALUE_LEFT, VALUE_UP + LINE_OFFSET* ( drawOffset + 1 ), TXT_COLOR_BLACK, entry ); + } +} + +void drawRegister( int menu, int selected ) +{ + // SCFGレジスタのバイナリをサブ画面に描画する + u32 regState = 0; + DispInfoEntry *p; + int drawOffset = 0; + + if( menu == MENU_SCFG_ARM7 && selected < SCFG_ARM7_MI_SC1_CDET) + { + // ARM7の前半4つ + u32 regRom = 0; + u16 regClk = 0; + u16 regJtag = 0; + u32 regExt = 0; + p = gAllInfo[MENU_SCFG_ARM7]; + + + regRom =(u32)( + p[SCFG_ARM7_ROM_ARM9_SEC].iValue << DISP_REG_SCFG_ROM_ARM9SEL_SHIFT | + p[SCFG_ARM7_ROM_ARM9_RSEL].iValue << DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT | + p[SCFG_ARM7_ROM_ARM9_SEC].iValue << DISP_REG_SCFG_ROM_ARM7SEL_SHIFT | + p[SCFG_ARM7_ROM_ARM7_RSEL].iValue << DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT | + p[SCFG_ARM7_ROM_ARM7_FUSE].iValue << DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT | + p[SCFG_ARM7_ROM_WE].iValue << DISP_REG_SCFG_ROM_ROMWE_SHIFT + ); + + regClk =(u16)( + p[SCFG_ARM7_CLK_SD1].iValue << DISP_REG_SCFG_CLK_SD1HCLK_SHIFT | + p[SCFG_ARM7_CLK_SD2].iValue << DISP_REG_SCFG_CLK_SD2HCLK_SHIFT | + p[SCFG_ARM7_CLK_AES].iValue << DISP_REG_SCFG_CLK_AESHCLK_SHIFT | + p[SCFG_ARM7_CLK_WRAM].iValue << DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT| + p[SCFG_ARM7_CLK_SND].iValue << DISP_REG_SCFG_CLK_SNDMCLK_SHIFT + ); + + regJtag =(u16)( + p[SCFG_ARM7_JTAG_A7].iValue << DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT | + p[SCFG_ARM7_JTAG_CPU].iValue << DISP_REG_SCFG_JTAG_CPUJE_SHIFT | + p[SCFG_ARM7_JTAG_DSP].iValue << DISP_REG_SCFG_JTAG_DSPJE_SHIFT + ); + + regExt =(u32)( + p[SCFG_ARM7_EXT_DMA].iValue << DISP_REG_SCFG_EXT_DMA_SHIFT | + p[SCFG_ARM7_EXT_SDMA].iValue << DISP_REG_SCFG_EXT_SDMA_SHIFT | + p[SCFG_ARM7_EXT_SND].iValue << DISP_REG_SCFG_EXT_SND_SHIFT | + p[SCFG_ARM7_EXT_MC].iValue << DISP_REG_SCFG_EXT_MC_SHIFT | + p[SCFG_ARM7_EXT_INTC].iValue << DISP_REG_SCFG_EXT_INTC_SHIFT | + p[SCFG_ARM7_EXT_SPI].iValue << DISP_REG_SCFG_EXT_SPI_SHIFT | + p[SCFG_ARM7_EXT_DSEL].iValue << DISP_REG_SCFG_EXT_DSEL_SHIFT | + p[SCFG_ARM7_EXT_SIO].iValue << DISP_REG_SCFG_EXT_SIO_SHIFT | + p[SCFG_ARM7_EXT_LCDC].iValue << DISP_REG_SCFG_EXT_LCDC_SHIFT | + p[SCFG_ARM7_EXT_VRAM].iValue << DISP_REG_SCFG_EXT_VRAM_SHIFT | + p[SCFG_ARM7_EXT_PS].iValue << DISP_REG_SCFG_EXT_PSRAM_SHIFT | + p[SCFG_ARM7_EXT_DMAC].iValue << DISP_REG_SCFG_EXT_DMAC_SHIFT | + p[SCFG_ARM7_EXT_AES].iValue << DISP_REG_SCFG_EXT_AES_SHIFT | + p[SCFG_ARM7_EXT_SD1].iValue << DISP_REG_SCFG_EXT_SD1_SHIFT | + p[SCFG_ARM7_EXT_SD2].iValue << DISP_REG_SCFG_EXT_SD2_SHIFT | + p[SCFG_ARM7_EXT_MIC].iValue << DISP_REG_SCFG_EXT_MIC_SHIFT | + p[SCFG_ARM7_EXT_I2S].iValue << DISP_REG_SCFG_EXT_I2S_SHIFT | + p[SCFG_ARM7_EXT_I2C].iValue << DISP_REG_SCFG_EXT_I2C_SHIFT | + p[SCFG_ARM7_EXT_GPIO].iValue << DISP_REG_SCFG_EXT_GPIO_SHIFT | + p[SCFG_ARM7_EXT_MCB].iValue << DISP_REG_SCFG_EXT_MC_B_SHIFT | + p[SCFG_ARM7_EXT_WRAM].iValue << DISP_REG_SCFG_EXT_WRAM_SHIFT | + p[SCFG_ARM7_EXT_PU].iValue << DISP_REG_SCFG_EXT_PUENABLE_SHIFT | + p[SCFG_ARM7_EXT_CFG].iValue << DISP_REG_SCFG_EXT_CFG_SHIFT + ); + + PutStringUTF16Sub( REGISTER_NAME_LEFT, REGISTER_NAME_UP, TXT_COLOR_BLACK, s_strARM7RegisterName[0] ); + printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP, regRom ); + PutStringUTF16Sub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 2*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[1] ); + printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 2*LINE_OFFSET, regClk ); + PutStringUTF16Sub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 3*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[2] ); + printBinary16( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 3*LINE_OFFSET, regJtag ); + PutStringUTF16Sub( REGISTER_NAME_LEFT, REGISTER_NAME_UP + 4*LINE_OFFSET, TXT_COLOR_BLACK, s_strARM7RegisterName[3] ); + printBinary32( REGISTER_DATA_LEFT, REGISTER_DATA_UP + 4*LINE_OFFSET, regExt ); + } + else if( menu == MENU_SCFG_ARM7 && selected >= SCFG_ARM7_MI_SC1_CDET ) + { + // SCFGの後半4つ + u32 regMcard1; + u16 regMcard2; + u16 regOldWL; + u16 regOption; + + } + else if( menu == MENU_SCFG_ARM9 ) + { + + } +} + +void printBinary32( int x, int y, u32 value ) +{ + printBinary16( x, y, (u16)(value >> 16) ); + printBinary16( x, y + LINE_OFFSET, (u16)(value & 0xFF) ); +} + +void printBinary16( int x, int y, u16 value ) +{ + int i; + u16 buf[BINARY_BUF] = {0}; // 16bit + 3 space + EOS + u16 mask = 0x8000; + + for( i=0; i> 1; + } + + buf[20] = L'\0'; + + PutStringUTF16Sub( x, y, TXT_COLOR_BLACK, buf ); +} + +void drawMenu( int menu, int line ) +// 情報一覧を描画する +{ + int lineNum = 0; + int i=0; + + if( menu == MENU_ROOT ) + { + // ルートメニューは値がないので項目名だけ描画して終わり + for( i=0; i= 0 ? line - SCROLL_MARGIN : 0; + } + else if( gDrawIdx[menu] + DISP_NUM_LINES - line - 1 <= SCROLL_MARGIN ) + { + // 矢印が下に近すぎる場合のスクロール補正 + gDrawIdx[menu] = line + SCROLL_MARGIN < s_numMenu[menu] ? + line + SCROLL_MARGIN - DISP_NUM_LINES + 1 : s_numMenu[menu] - DISP_NUM_LINES ; + } + + + for( i = gDrawIdx[menu] ; i < s_numMenu[menu] && lineNum < DISP_NUM_LINES ; i++ ) + { + printKindName( menu, i, lineNum, line ); + printValue( menu, i, lineNum, &gAllInfo[menu][i] ); + + // 描画オフセットの更新 + lineNum += gAllInfo[menu][i].numLines; + } + + drawRegister( menu, line ); + + // 全体の行数を把握 + if( gMenuLineSize[menu] == 0 ) + { + gMenuLineSize[menu] = countMenuLine(menu); + } + + // スクロールバーとか出す +} + + + +/* + for( linenum = 0; linenum < nowPageMaxLine; linenum++ ) + { + drawMenuSub( menu, line, &gAllInfo[menu][0] ); + + switch( menu ){ + case MENU_ROOT: + break; + case MENU_OWNER: + drawOwnerMenu( page, linenum, valueIdx, &gAllInfo[menu][0], &gMenuKindOffset[menu][0], &s_pageOffset[menu][0] ); + break; + case MENU_PARENTAL: + drawParentalMenu( page, linenum, valueIdx, &gAllInfo[menu][0], &gMenuKindOffset[menu][0], &s_pageOffset[menu][0] ); + break; + case MENU_NORMAL_HW: + drawNormalHWMenu( page, linenum, valueIdx, &gAllInfo[menu][0], &gMenuKindOffset[menu][0], &s_pageOffset[menu][0] ); + break; + case MENU_SECURE_HW: + drawSecureHWMenu( page, linenum, valueIdx, &gAllInfo[menu][0], &gMenuKindOffset[menu][0], &s_pageOffset[menu][0] ); + break; + case MENU_SCFG_ARM7: + drawSCFGARM7Menu( page, linenum, valueIdx, &gAllInfo[menu][0], &gMenuKindOffset[menu][0], &s_pageOffset[menu][0] ); + break; + case MENU_SCFG_ARM9: + drawSCFGARM9Menu( page, linenum, valueIdx, &gAllInfo[menu][0], &gMenuKindOffset[menu][0], &s_pageOffset[menu][0] ); + break; + case MENU_VERSION: + drawVersionMenu( page, linenum, valueIdx, &gAllInfo[menu][0], &gMenuKindOffset[menu][0], &s_pageOffset[menu][0] ); + break; + } +*/ + + + +/* +void drawKindName( int menu, int page, int line ) +// 項目名描画関数 +{ + int linenum = 0; + int offset = 0; + + if( menu == MENU_ROOT ) + { + // ルートメニューにはインデクスデータがないので、間隔をあけないことを前提に羅列するだけ + for(linenum = 0; linenum < ROOTMENU_SIZE ; linenum++) + { + if( linenum == line ) + { + // 選択中の項目は表示色かえて矢印表示 + PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, (const u16 *)L"→" ); + PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_GREEN, s_strMetaMenu[MENU_ROOT][linenum]) ; + } + else + { + PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, s_strMetaMenu[MENU_ROOT][linenum]) ; + } + } + + } + else + { + for(linenum = s_pageOffset[menu][page] ; linenum < s_pageOffset[menu][page+1] ; linenum++) + { + if( linenum == s_pageOffset[menu][page] + line ) + { + // 選択中の項目は表示色かえて矢印表示 + PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], + TXT_COLOR_BLACK, (const u16 *)L"→" ); + PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], + TXT_COLOR_GREEN, s_strMetaMenu[menu][linenum]) ; + } + else + { + PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET * gMenuKindOffset[menu][linenum], + TXT_COLOR_BLACK, s_strMetaMenu[menu][linenum]) ; + } + } + } +} + +void drawOwnerMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) +{ + int drawLineOffset = linenum, drawKindOffset = linenum; + + // utf16で描画するものだけ分ける + if( valueIdx == OWNER_NICKNAME ) + { + kindOffset[valueIdx] = drawKindOffset; + PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gUserName) ; + } + else if( valueIdx == OWNER_COMMENT ) + { + kindOffset[valueIdx] = drawKindOffset; + PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gUserComment) ; + } + else if( valueIdx == OWNER_COLOR ) + { + kindOffset[valueIdx] = drawKindOffset; + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_UCOLOR_G5, "■" ); + PrintfSJIS( VALUE_LEFT + LINE_OFFSET , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); + + } + else + { + // sjisで描画するもの + kindOffset[valueIdx] = drawKindOffset; + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); + } + +} + +void drawParentalMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) +{ + int drawLineOffset = linenum, drawKindOffset = linenum; + + // utf16で描画するものだけ分ける + if(valueIdx == PARENTAL_ANSWER) + { + kindOffset[valueIdx] = drawKindOffset; + PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gSecretAnswer) ; + } + else + { + // sjisで描画するもの + kindOffset[valueIdx] = drawKindOffset; + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); + } +} + + +void drawNormalHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) +{ + int drawLineOffset = linenum, drawKindOffset = linenum; + + // 描画してついでにインデクス差分データをいれる + kindOffset[valueIdx] = drawKindOffset; + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); + +} + + +void drawSecureHWMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) +{ + int drawLineOffset = linenum, drawKindOffset = linenum; + + // 複数行必要な項目があると描画位置がずれるため + // 描画オフセットを調整する処理が必要 + if( valueIdx >= SECURE_HW_FORCE_DISABLE && page == getPageNum( SECURE_HW_FORCE_DISABLE, pageOffset ) ) + { + drawLineOffset++; + } + + if( valueIdx > SECURE_HW_UNIQUE_ID && page == getPageNum( SECURE_HW_UNIQUE_ID, pageOffset ) ) + { + drawLineOffset += OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 / UNIQUE_BUF; + } + + // 同じように項目名のオフセットも調整 + if( valueIdx > SECURE_HW_FORCE_DISABLE && page == getPageNum( SECURE_HW_FORCE_DISABLE, pageOffset ) ) + { + drawKindOffset++; + } + + if( valueIdx > SECURE_HW_UNIQUE_ID && page == getPageNum( SECURE_HW_UNIQUE_ID, pageOffset ) ) + { + drawKindOffset += OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 / UNIQUE_BUF; + } + + + // 描画する、ついでにインデクスデータも入れる + if( valueIdx == SECURE_HW_UNIQUE_ID ) + { + kindOffset[valueIdx] = drawKindOffset; + printUniqueID(drawLineOffset); + } + else + { + kindOffset[valueIdx] = drawKindOffset; + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); + } +} + +void drawSCFGARM7Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) +{ + kindOffset[valueIdx] = linenum; +} + +void drawSCFGARM9Menu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) +{ + int drawLineOffset = linenum, drawKindOffset = linenum; + + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); + kindOffset[valueIdx] = drawKindOffset; + +} + +void drawVersionMenu( int page, int linenum, int valueIdx, char** info, int* kindOffset, const int* pageOffset ) +{ + int drawLineOffset = linenum, drawKindOffset = linenum; + + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, info[valueIdx] ); + kindOffset[valueIdx] = drawKindOffset; + +} +*/ + +void printUniqueID( int drawLineOffset, char *uniqueId) +// ユニークIDを整形して出力 +{ + char buf[UNIQUE_BUF+1]; + int i; + + for( i=0; i * UNIQUE_BUF < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 ; i++) + { + strncpy(buf, &uniqueId[i * UNIQUE_BUF], UNIQUE_BUF); + buf[UNIQUE_BUF] = '\0'; + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET * (drawLineOffset + i), TXT_COLOR_BLACK, buf ); + } + +} + +int getPageNum( int valueIdx, const int* pageOffset ) +// valueIdxが何ページ目にあるかをpageOffsetから調べる +{ + int i; + + for( i=0; i < MAXITEM - 1; i++ ) + { + if( valueIdx > pageOffset[i] && valueIdx < pageOffset[i+1] ) + { + return i; + } + } + + return -1; +} \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h new file mode 100644 index 00000000..d56535b1 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h @@ -0,0 +1,184 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: drawFunc.h + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + +#ifndef __DRAW_FUNC__ +#define __DRAW_FUNC__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + + +// 各メニューサイズ + +#define DISP_NUM_LINES 11 // 一ページあたりの項目数 + +#define ROOTMENU_SIZE 7 +#define OWNERMENU_SIZE 6 +#define PARENTALMENU_SIZE 12 +#define NORMAL_HW_MENU_SIZE 4 +#define SECURE_HW_MENU_SIZE 6 +#define SCFG_ARM7_MENU_SIZE 47 +#define SCFG_ARM9_MENU_SIZE 22 +#define VERSIONMENU_SIZE 3 + + +// メニューID +#define MENU_ROOT 10 +#define MENU_OWNER 0 +#define MENU_PARENTAL 1 +#define MENU_NORMAL_HW 2 +#define MENU_SECURE_HW 3 +#define MENU_SCFG_ARM7 4 +#define MENU_SCFG_ARM9 5 +#define MENU_VERSION 6 + +// 行番号 +#define OWNER_LANGUAGE 0 +#define OWNER_COLOR 1 +#define OWNER_BIRTHDAY 2 +#define OWNER_COUNTRY 3 +#define OWNER_NICKNAME 4 +#define OWNER_COMMENT 5 + +#define PARENTAL_FLAG 0 +#define PARENTAL_PICTOCHAT 1 +#define PARENTAL_DOWNLOAD 2 +#define PARENTAL_BROWSER 3 +#define PARENTAL_WIIPOINT 4 +#define PARENTAL_PHOTO_EXCHANGE 5 +#define PARENTAL_UGC 6 +#define PARENTAL_ORGANIZATION 7 +#define PARENTAL_AGE 8 +#define PARENTAL_PASSWORD 9 +#define PARENTAL_QUESTION_ID 10 +#define PARENTAL_ANSWER 11 + +#define NORMAL_HW_WIRELESS 0 +#define NORMAL_HW_RTC_OFFSET 1 +#define NORMAL_HW_AGREE_EULA 2 +#define NORMAL_HW_EULA_VERSION 3 + +#define SECURE_HW_FORCE_DISABLE 0 +#define SECURE_HW_REGION 1 +#define SECURE_HW_UNIQUE_ID 2 +#define SECURE_HW_SERIAL 3 +#define SECURE_HW_LANGUAGE 4 +#define SECURE_HW_FUSE 5 + +#define SCFG_ARM9_ROM_STATE 0 +#define SCFG_ARM9_CAMERA_CKI 1 +#define SCFG_ARM9_WRAM_CLOCK 2 +#define SCFG_ARM9_CAMERA_CLOCK 3 +#define SCFG_ARM9_DSP_CLOCK 4 +#define SCFG_ARM9_CPU_SPEED 5 +#define SCFG_ARM9_DSP_RESET 6 +#define SCFG_ARM9_CFG_ACCESSIBLE 7 +#define SCFG_ARM9_WRAM_ACCESSIBLE 8 +#define SCFG_ARM9_DSP_ACCESSIBLE 9 +#define SCFG_ARM9_CAMERA_ACCESSIBLE 10 +#define SCFG_ARM9_NDMA_ACCESSIBLE 11 +#define SCFG_ARM9_PSRAM_BOUNDARY 12 +#define SCFG_ARM9_INTC_EXPANSION 13 +#define SCFG_ARM9_LCDC_EXPANSION 14 +#define SCFG_ARM9_VRAM_EXPANSION 15 +#define SCFG_ARM9_FIX_CARD 16 +#define SCFG_ARM9_FIX_DIVIDER 17 +#define SCFG_ARM9_FIX_2DENGINE 18 +#define SCFG_ARM9_FIX_RENDERER 19 +#define SCFG_ARM9_FIX_GEOMETRY 20 +#define SCFG_ARM9_FIX_DMA 21 + +#define SCFG_ARM7_ROM_ARM9_SEC 0 +#define SCFG_ARM7_ROM_ARM9_RSEL 1 +#define SCFG_ARM7_ROM_ARM7_SEC 2 +#define SCFG_ARM7_ROM_ARM7_RSEL 3 +#define SCFG_ARM7_ROM_ARM7_FUSE 4 +#define SCFG_ARM7_ROM_WE 5 +#define SCFG_ARM7_CLK_SD1 6 +#define SCFG_ARM7_CLK_SD2 7 +#define SCFG_ARM7_CLK_AES 8 +#define SCFG_ARM7_CLK_WRAM 9 +#define SCFG_ARM7_CLK_SND 10 +#define SCFG_ARM7_JTAG_A7 11 +#define SCFG_ARM7_JTAG_CPU 12 +#define SCFG_ARM7_JTAG_DSP 13 +#define SCFG_ARM7_EXT_DMA 14 +#define SCFG_ARM7_EXT_SDMA 15 +#define SCFG_ARM7_EXT_SND 16 +#define SCFG_ARM7_EXT_MC 17 +#define SCFG_ARM7_EXT_INTC 18 +#define SCFG_ARM7_EXT_SPI 19 +#define SCFG_ARM7_EXT_DSEL 20 +#define SCFG_ARM7_EXT_SIO 21 +#define SCFG_ARM7_EXT_LCDC 22 +#define SCFG_ARM7_EXT_VRAM 23 +#define SCFG_ARM7_EXT_PS 24 +#define SCFG_ARM7_EXT_DMAC 25 +#define SCFG_ARM7_EXT_AES 26 +#define SCFG_ARM7_EXT_SD1 27 +#define SCFG_ARM7_EXT_SD2 28 +#define SCFG_ARM7_EXT_MIC 29 +#define SCFG_ARM7_EXT_I2S 30 +#define SCFG_ARM7_EXT_I2C 31 +#define SCFG_ARM7_EXT_GPIO 32 +#define SCFG_ARM7_EXT_MCB 33 +#define SCFG_ARM7_EXT_WRAM 34 +#define SCFG_ARM7_EXT_PU 35 +#define SCFG_ARM7_EXT_CFG 36 +#define SCFG_ARM7_MI_SC1_CDET 37 +#define SCFG_ARM7_MI_SC1_MODE 38 +#define SCFG_ARM7_MI_SC2_CDET 39 +#define SCFG_ARM7_MI_SC2_MODE 40 +#define SCFG_ARM7_MI_SWP 41 +#define SCFG_ARM7_MI_CC 42 +#define SCFG_ARM7_MI_CA 43 +#define SCFG_ARM7_WL_OFFB 44 +#define SCFG_ARM7_OP_FORM 45 +#define SCFG_ARM7_OP_APP 46 + +#define SCFG_ARM7_WRAM_OFFSET 47 + +#define VERSION_WIRELESS 0 +#define VERSION_FONT 1 +#define VERSION_OTHER 2 + + + + +/* global variables ----------------- */ + +#define MAXITEM 50 +#define MAXPAGE 5 + +// 各項目を表示するときの行オフセット表 +extern int gMenuKindOffset[ROOTMENU_SIZE][MAXITEM]; + +/* function prototypes ----------------- */ + +void drawHeader( int menu, int line ); +void drawMenu( int menu, int line ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/build/tests/DisplaySystemInformation/ARM9/src/escape/drawFunc.c b/build/tests/DisplaySystemInformation/ARM9/src/escape/drawFunc.c new file mode 100644 index 00000000..17263d7a --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/escape/drawFunc.c @@ -0,0 +1,237 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInfo + File: viewSystemInfo.c + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ +*---------------------------------------------------------------------------*/ + + +#include +#include +#include +#include +#include "drawFunc.h" +#include "viewSystemInfo.h" +#include "misc.h" +#include "strResource.h" + + + +// 描画関連 +#define HEADER_UP 0 +#define HEADER_LEFT 15 +#define FOOTER_UP 160 +#define FOOTER_LEFT 10 +#define ALLOW_LEFT 10 + +#define KIND_UP 40 // 項目名の上座標 +#define KIND_LEFT 20 // 項目名の左座標 +#define VALUE_UP 40 // 項目値の上座標 +#define VALUE_LEFT 140 // 項目値の左座標 +#define LINE_OFFSET 15 // 1行ごとのオフセット +#define ROW_OFFSET 15 // 長い項目が現れたときの段組用 + +#define UNIQUE_BUF 12 + +const int s_pageOffset[][MAXPAGE] = { + { 0, OWNERMENU_KSIZE }, // owner + { 0, PARENTALMENU_KSIZE }, // parental + { 0, 5, OTHERMENU_KSIZE }, // other + { 0, SCFGMENU_KSIZE }, // scfg + { 0, FUSEMENU_KSIZE } // fuse +}; + + +void drawKindName( u8 menu, u8 page, u8 line ); +void drawRootMenu( u8 page, u8 line ); +void drawOwnerMenu( u8 page, u8 line ); +void drawParentalMenu( u8 page, u8 line ); +void drawOtherMenu( u8 page, u8 line ); +void drawSCFGMenu( u8 page, u8 line ); +void drawFuseMenu( u8 page, u8 line ); +void printUniqueID( u8 drawLineOffset ); + +void drawHeader( u8 menu, u8 page, u8 line ) +// 画面端に簡単な情報を表示する +{ + PutStringUTF16( HEADER_LEFT, HEADER_UP, TXT_COLOR_RED, (const u16 *)L"DisplaySystemInfo"); + if( menu != MENU_ROOT ) + { + u16 buf[256]; + swprintf(buf, 256, L"Root>%s page %d / %d", s_strMenuName[menu], page+1 , (s_numMenuK[menu] / NUM_LINES) + 1 ); + PutStringUTF16( HEADER_LEFT, HEADER_UP + LINE_OFFSET, TXT_COLOR_BLUE, buf ); + } + else + { + PutStringUTF16( HEADER_LEFT, HEADER_UP + LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L"Root" ); + } + + PutStringUTF16( FOOTER_LEFT, FOOTER_UP, TXT_COLOR_BLUE, (const u16 *)L" A: Decide B: Back "); +} + +void drawMenu( u8 menu, u8 page, u8 line ) +// 情報一覧を描画する +{ + switch( menu ){ + case MENU_ROOT: + drawRootMenu( page, line ); + break; + case MENU_OWNER: + drawOwnerMenu( page, line ); + break; + case MENU_PARENTAL: + drawParentalMenu( page, line ); + break; + case MENU_OTHER: + drawOtherMenu( page, line ); + break; + case MENU_SCFG: + drawSCFGMenu( page, line ); + break; + case MENU_FUSE: + drawFuseMenu( page, line ); + break; + } +} + +void drawKindName( u8 menu, u8 page, u8 line ) +// 項目名描画関数 +{ + u8 linenum = 0; + u8 offset = 0; + for(linenum = NUM_LINES * page ; linenum < s_numMenuK[menu] && linenum < (page+1) * NUM_LINES; linenum++, offset++) + { + if( linenum == NUM_LINES * page + line ) + { + // 選択中の項目は表示色かえて矢印表示 + PutStringUTF16( ALLOW_LEFT, KIND_UP + LINE_OFFSET*offset, TXT_COLOR_BLACK, (const u16 *)L"→" ); + PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*offset, TXT_COLOR_GREEN, s_strMetaMenu[menu][linenum]) ; + } + else + { + PutStringUTF16( KIND_LEFT, KIND_UP + LINE_OFFSET*offset, TXT_COLOR_BLACK, s_strMetaMenu[menu][linenum]) ; + } + } + +} + +void drawRootMenu( u8 page, u8 line ) +{ + drawKindName( MENU_ROOT, page, line); +} + +void drawOwnerMenu( u8 page, u8 line ) +{ + u8 linenum; + + drawKindName( MENU_OWNER, page, line); + + for(linenum = page * NUM_LINES; linenum < s_numMenuV[MENU_OWNER] && linenum < (page+1) * NUM_LINES; linenum++) + { + // utf16で描画するものだけ分ける + if(linenum == OWNER_NICKNAME) + { + PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, gUserName) ; + } + else if(linenum == OWNER_COMMENT) + { + PutStringUTF16( VALUE_LEFT + ROW_OFFSET, VALUE_UP + LINE_OFFSET*( linenum+1 ), TXT_COLOR_BLACK, gUserComment) ; + } + else + { + // sjisで描画するもの + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, gAllInfo[MENU_OWNER][linenum] ); + } + } +} + +void drawParentalMenu( u8 page, u8 line ) +{ + u8 linenum; + + drawKindName( MENU_PARENTAL, page, line); + + for(linenum = page * NUM_LINES; linenum < s_numMenuV[MENU_PARENTAL] && linenum < (page+1) * NUM_LINES; linenum++) + { + // utf16で描画するものだけ分ける + if(linenum == PARENTAL_ANSWER) + { + PutStringUTF16( VALUE_LEFT, VALUE_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, gSecretAnswer) ; + } + else + { + // sjisで描画するもの + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*linenum, TXT_COLOR_BLACK, gAllInfo[MENU_PARENTAL][linenum] ); + } + } +} + +void drawOtherMenu( u8 page, u8 line ) +{ + u8 linenum, drawLineOffset=0; + u8 nowPageMaxLine = s_pageOffset[MENU_OTHER][page+1] - s_pageOffset[MENU_OTHER][page]; +// u8 maxline = s_numMenuV[MENU_OTHER] - page*5 > 5 ? 5 : s_numMenuV[MENU_OTHER] - page*5; + drawKindName( MENU_OTHER, page, line); + + for(linenum = 0; linenum < nowPageMaxLine; linenum++) + { + u8 valueIdx = s_pageOffset[MENU_OTHER][page] + linenum; + drawLineOffset = linenum; + + // 複数行必要な項目があると描画位置がずれるのでそれの対応 + if( valueIdx >= OTHER_FORCE_DISABLE && page == 0) + { + drawLineOffset++; + } + + if( valueIdx > OTHER_UNIQUE_ID && page == 1 ) + { + drawLineOffset += OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 / UNIQUE_BUF; + } + + // 描画する + if( valueIdx == OTHER_UNIQUE_ID ) + { + printUniqueID(drawLineOffset); + } + else + { + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET*drawLineOffset, TXT_COLOR_BLACK, gAllInfo[MENU_OTHER][valueIdx] ); + } + } +} + +void printUniqueID( u8 drawLineOffset) +// ユニークIDを整形して出力 +{ + char buf[UNIQUE_BUF+1]; + u8 i; + + for( i=0; i * UNIQUE_BUF < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 ; i++) + { + strncpy(buf, &gAllInfo[MENU_OTHER][OTHER_UNIQUE_ID][i * UNIQUE_BUF], UNIQUE_BUF); + buf[UNIQUE_BUF] = '\0'; + PrintfSJIS( VALUE_LEFT , VALUE_UP + LINE_OFFSET * (drawLineOffset + i), TXT_COLOR_BLACK, buf ); + } + +} + +void drawSCFGMenu( u8 page, u8 line ) +{ + drawKindName( MENU_SCFG, page, line); +} + +void drawFuseMenu( u8 page, u8 line ) +{ + drawKindName( MENU_FUSE, page, line); +} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/escape/drawFunc.h b/build/tests/DisplaySystemInformation/ARM9/src/escape/drawFunc.h new file mode 100644 index 00000000..c24e36f6 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/escape/drawFunc.h @@ -0,0 +1,94 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInfo + File: drawFunc.h + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#ifndef __DRAW_FUNC__ +#define __DRAW_FUNC__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + + + + +#define STRING_LINES 10 + +// 各メニューサイズ + +#define NUM_LINES 8 // 一ページあたりの項目数 + +#define ROOTMENU_SIZE 5 +#define OWNERMENU_SIZE 6 +#define PARENTALMENU_SIZE 6 +#define OTHERMENU_SIZE 7 +#define SCFGMENU_SIZE 1 +#define FUSEMENU_SIZE 1 + + +// メニューID +#define MENU_ROOT 10 +#define MENU_OWNER 0 +#define MENU_PARENTAL 1 +#define MENU_OTHER 2 +#define MENU_SCFG 3 +#define MENU_FUSE 4 + +// 行番号 +#define OWNER_LANGUAGE 0 +#define OWNER_COLOR 1 +#define OWNER_BIRTHDAY 2 +#define OWNER_COUNTRY 3 +#define OWNER_NICKNAME 4 +#define OWNER_COMMENT 5 + +#define PARENTAL_FLAG 0 +#define PARENTAL_ORGANIZATION 1 +#define PARENTAL_AGE 2 +#define PARENTAL_PASSWORD 3 +#define PARENTAL_QUESTION_ID 4 +#define PARENTAL_ANSWER 5 + + +#define OTHER_WIRELESS 0 +#define OTHER_FORCE_DISABLE 1 +#define OTHER_AGREE_EULA 2 +#define OTHER_EULA_VERSION 3 +#define OTHER_REGION 4 +#define OTHER_UNIQUE_ID 5 +#define OTHER_SERIAL 6 + + +/* global variables ----------------- */ + +#define MAXPAGE 10 + +// 各項目のページごとのオフセット値 +extern const int s_pageOffset[][MAXPAGE]; + + +/* function prototypes ----------------- */ + +void drawHeader( u8 menu, u8 page, u8 line ); +void drawMenu( u8 menu, u8 page, u8 line ); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/build/tests/DisplaySystemInformation/ARM9/src/escape/escape.c b/build/tests/DisplaySystemInformation/ARM9/src/escape/escape.c new file mode 100644 index 00000000..ae32b0e6 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/escape/escape.c @@ -0,0 +1,144 @@ +// from main.c + + +void myDEMOInit( void ) +{ + DEMOInitCommon(); + DEMOInitVRAM(); + DEMOInitDisplayBitmap(); + DEMOHookConsole(); + DEMOSetBitmapTextColor(GX_RGBA(31, 31, 0, 1)); + DEMOSetBitmapGroundColor(DEMO_RGB_CLEAR); + DEMOStartDisplay(); +} + +/*---------------------------------------------------------------------------* + Name: InitScreen + + Description: BG 面を設定します。 + + Arguments: なし。 + + Returns: なし。 + *---------------------------------------------------------------------------*/ +static void InitScreen(void) +{ + GXRgb myPalette[16] = + { + GX_RGB( 0, 0, 0), GX_RGB(31, 31, 31), GX_RGB( 31, 31, 0), GX_RGB(31, 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), 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), + }; + + // BG 1 を設定 + G2S_SetBG1Control( + GX_BG_SCRSIZE_TEXT_256x256, // スクリーンサイズ 256x256 + GX_BG_COLORMODE_16, // カラーモード 16色 + GX_BG_SCRBASE_0x0000, // スクリーンベース + GX_BG_CHARBASE_0x00000, // キャラクタベース + GX_BG_EXTPLTT_01 // 拡張パレットスロット + ); + + // BG1 を可視に + GXS_SetVisiblePlane(GX_GetVisiblePlane() & ~GX_PLANEMASK_BG1); + + // カラーパレットを設定 + GX_LoadBGPltt( myPalette, 0, sizeof(myPalette) ); +} + +/*---------------------------------------------------------------------------* + Name: InitCanvas + + Description: 文字列描画の初期化をします。 + + Arguments: なし。 + + Returns: なし。 + *---------------------------------------------------------------------------*/ +static void InitCanvas(void) +{ + + // BGキャラクタベースへのポインタ + GXCharFmt16* const pCharBase = (GXCharFmt16*)G2_GetBG1CharPtr(); + int cOffset = CHARACTER_OFFSET; + + TXT_LoadFont(&gFont, FONT_RESOURCE); + + // CharCanvas の初期化と BG スクリーンの設定 + // CharCanvas 0 + NNS_G2dCharCanvasInitForBG( + &gCanvas[0], // CharCanvasへのポインタ + pCharBase + cOffset, // 使用するキャラクタ列先頭へのポインタ + CANVAS0_WIDTH, // CharCanvas幅 + CANVAS0_HEIGHT, // CharCanvas高さ + NNS_G2D_CHARA_COLORMODE_16 // カラーモード + ); + NNS_G2dMapScrToCharText( + G2S_GetBG1ScrPtr(), // スクリーンベースへのポインタ + CANVAS0_WIDTH, // CharCanvas幅 + CANVAS0_HEIGHT, // CharCanvas高さ + CANVAS0_LEFT, // CharCanvas表示位置 + CANVAS0_TOP, // CharCanvas表示位置 + NNS_G2D_TEXT_BG_WIDTH_256, // スクリーン幅 + cOffset, // 使用するキャラクタ列先頭のキャラクタ番号 + 0 // カラーパレット番号 + ); + + // CharCanvas 0 が使う分のキャラクタ数をオフセットに加算 + cOffset += CANVAS0_WIDTH * CANVAS0_HEIGHT; + + // CharCanvas 1 + NNS_G2dCharCanvasInitForBG( + &gCanvas[1], + pCharBase + cOffset, + CANVAS1_WIDTH, + CANVAS1_HEIGHT, + NNS_G2D_CHARA_COLORMODE_16 + ); + NNS_G2dMapScrToCharText( + G2S_GetBG1ScrPtr(), + CANVAS1_WIDTH, + CANVAS1_HEIGHT, + CANVAS1_LEFT, + CANVAS1_TOP, + NNS_G2D_TEXT_BG_WIDTH_256, + cOffset, + 0 + ); + + // CharCanvas 1 が使う分のキャラクタ数をオフセットに加算 + cOffset += CANVAS1_WIDTH * CANVAS1_HEIGHT; + + + // TextCanvas の初期化 + // CharCanvas 毎に TextCanvas を用意することもできますし、 + // 複数の TextCanvas で1つの CharCanvas を共有する事もできます。 + // 複数の CharCanvas を1つの TextCanvas で使う場合は + // TextCanvas の CharCanvas を置き換えながら使う事になります。 + + // 1) 複数の TextCanvas で1つの CharCanvas を共有 + // CharCanvas 1 を TextCanvas 0, 1 で共有 + { + NNS_G2dTextCanvasInit( + &gTextCanvas[0], // TextCanvasへのポインタ + &gCanvas[0], // 描画先のCharCanvasへのポインタ + (NNSG2dFont*)s_pFontBuffer, // 描画に用いるフォントへのポインタ + TEXT_HSPACE, // 文字間 + TEXT_VSPACE // 行間 + ); + } + + // 2) CharCanvas 毎に TextCanvas を用意 + // CharCanvas 2 を TextCanvas 2 単独で使用 + { + NNS_G2dTextCanvasInit( + &gTextCanvas[1], + &gCanvas[1], + (NNSG2dFont*)s_pFontBuffer, + TEXT_HSPACE, + TEXT_VSPACE + ); + } +} + diff --git a/build/tests/DisplaySystemInformation/ARM9/src/escape/main.c b/build/tests/DisplaySystemInformation/ARM9/src/escape/main.c new file mode 100644 index 00000000..d7cfd3b0 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/escape/main.c @@ -0,0 +1,100 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInfo + File: main.c + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + + +#include +#include +#include "misc.h" +#include "viewSystemInfo.h" + +#define CANVAS0_WIDTH 15 +#define CANVAS0_HEIGHT 10 +#define CANVAS0_LEFT 10 +#define CANVAS0_TOP 10 + +#define CANVAS1_WIDTH 10 +#define CANVAS1_HEIGHT 10 +#define CANVAS1_LEFT 130 +#define CANVAS1_TOP 10 + +#define TEXT_HSPACE 1 // 文字列描画時の文字間 (ピクセル単位) +#define TEXT_VSPACE 1 // 文字列描画時の行間 (ピクセル単位) +#define CHARACTER_OFFSET 1 + +///////////////////////////// + +void VBlankHandler( void ); + +///////////////////////////// + + +/*---------------------------------------------------------------------------* + Name: TwlMain + + Description: main + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ + + + +void TwlMain( void ) +{ + OS_Init(); + OS_TPrintf("Initialize..."); + + SYSM_Init(Alloc, Free ); + SYSM_SetArena(); + RTC_Init(); + + //---- interrupt setting + OS_EnableIrq(); + OS_EnableInterrupts(); + OS_SetIrqFunction( OS_IE_V_BLANK, VBlankHandler ); + OS_EnableIrqMask( OS_IE_V_BLANK ); + GX_VBlankIntr( TRUE ); + + InitAllocator(); + InitBG(); + + OS_TPrintf("Finished\n"); + + displayInfoInit(); + + FS_Init(FS_DMA_NOT_USE); + + OS_TPrintf("begin mainloop\n"); + + // メインループ + while( 1 ) + { + OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち + + ReadKeyPad(); // キー入力の取得 + + displayInfoMain(); // ビューア更新 + } + +} + + +void VBlankHandler(void) +{ + OS_SetIrqCheckFlag( OS_IE_V_BLANK ); // Vブランク割込チェックのセット +} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/escape/strResource.h b/build/tests/DisplaySystemInformation/ARM9/src/escape/strResource.h new file mode 100644 index 00000000..af360eaf --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/escape/strResource.h @@ -0,0 +1,427 @@ +static const u8 s_numMenuK[] = { + OWNERMENU_KSIZE, + PARENTALMENU_KSIZE, + OTHERMENU_KSIZE, + SCFGMENU_KSIZE, + FUSEMENU_KSIZE, + 0, + 0, + 0, + 0, + 0, + ROOTMENU_KSIZE + // !!! あとで残りの分も追加するよ +}; + +static const u8 s_numMenuV[] = { + OWNERMENU_VSIZE, + PARENTALMENU_VSIZE, + OTHERMENU_VSIZE, + SCFGMENU_VSIZE, + FUSEMENU_VSIZE, + 0, + 0, + 0, + 0, + 0, + ROOTMENU_VSIZE + // !!! あとで残りの分も追加するよ +}; + +static const u16 *s_strRootMenu[] = { + L"Owner", + L"Parental control", + L"Other machine setting", + L"SCFG", + L"Fuse rom" +}; + +static const char *s_strMenuName[] = { + "Owner", + "Parental control", + "Other machine setting", + "SCFG", + "Fuse rom" +}; + + +static const u16 *s_strOwnerMenu[] = { + L"Language", + L"Favorite color", + L"Birthday", + L"Country", + L"Nickname", + L"Comment" +}; + +static const u16 *s_strParentalMenu[] = { + L"Parental control", + L"Organization", + L"Age", + L"Password", + L"Quastion id", + L"Answer" +}; + +static const u16 *s_strOtherMenu[] = { + L"Wireless", + L"Force Disable Wireless", + L"", + L"Agree EULA", + L"Eula Version", + L"Region", + L"", + L"", + L"Unique ID", + L"", + L"", + + L"Serial No" +}; + +static const u16 *s_strSCFGMenu[] = { + L"UNDER CONSTRUCTION" +}; + +static const u16 *s_strFuseMenu[] = { + L"UNDER CONSTRUCTION" +}; + +static const u16 **s_strMetaMenu[] = { + s_strOwnerMenu, + s_strParentalMenu, + s_strOtherMenu, + s_strSCFGMenu, + s_strFuseMenu, + NULL, + NULL, + NULL, + NULL, + NULL, + s_strRootMenu +}; + +static char *s_strEnable[] = { + "DISABLED", + "ENABLED" +}; + +static char *s_strBool[] = { + "TRUE", + "FALSE" +}; + +static char *s_strRatingOrg[] = { + "CERO", + "ESRB", + "BBFC", + "USK", + "PEGI general", + "PEGI Finland", + "PEGI Portugal", + "PEGI and BBFC Great Briten", + "OFLC", + "GRB" +}; + +static char *s_strRegion[] = { + "JAPAN", + "AMERICA", + "EUROPA", + "AUSTRALIA", + "CHINA", + "KOREA", +}; + +static char *s_strUserColor[] = { + "GRAY ", + "BROWN ", + "RED ", + "PINK ", + "ORANGE ", + "YELLOW ", + "LIME_GREEN", + "GREEN ", + "DARK_GREEN", + "SEA_GREEN ", + "TURQUOISE ", + "BLUE ", + "DARK_BLUE ", + "PURPLE ", + "VIOLET ", + "MAGENTA ", +}; + +static char *s_strLanguage[] = { + "JAPANESE", + "ENGLISH", + "FRENCH", + "GERMAN", + "ITALIAN", + "SPANISH", + "CHINESE", + "KOREAN", +}; + +static char *s_strCountry[] = { + "UNDEFINED ", // 未設定 + "JAPAN ", // 日本 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "Anguilla ", // アンギラ + "ANTIGUA_AND_BARBUDA", // アンティグア・バーブーダ + "ARGENTINA ", // アルゼンチン + "ARUBA", // アルバ + "BAHAMAS", // バハマ + "BARBADOS", // バルバドス + "BELIZE", // ベリーズ + "BOLIVIA", // ボリビア + "BRAZIL", // ブラジル + "BRITISH_VIRGIN_ISLANDS", // 英領ヴァージン諸島 + "CANADA", // カナダ + "CAYMAN_ISLANDS", // ケイマン諸島 + "CHILE ", // チリ + "COLOMBIA", // コロンビア + "COSTA_RICA", // コスタリカ + "DOMINICA", // ドミニカ国 + "DOMINICAN_REPUBLIC", // ドミニカ共和国 + "ECUADOR", // エクアドル + "EL_SALVADOR", // エルサルバドル + "FRENCH_GUIANA", // フランス領ギアナ + "GRENADA", // グレナダ + "GUADELOUPE", // グアドループ + "GUATEMALA ", // グアテマラ + "GUYANA", // ガイアナ + "HAITI", // ハイチ + "HONDURAS", // ホンジュラス + "JAMAICA", // ジャマイカ + "MARTINIQUE", // マルティニーク + "MEXICO", // メキシコ + "MONTSERRAT", // モントセラト + "NETHERLANDS_ANTILLES", // オランダ領アンティル + "NICARAGUA", // ニカラグア + "PANAMA ", // パナマ + "PARAGUAY", // パラグアイ + "PERU", // ペルー + "ST_KITTS_AND_NEVIS", // セントキッツ・ネイビス + "ST_LUCIA", // セントルシア + "ST_VINCENT_AND_THE_GRENADINES", // セントビンセント・グレナディーン + "SURINAME", // スリナム + "TRINIDAD_AND_TOBAGO", // トリニダード・トバゴ + "TURKS_AND_CAICOS_ISLANDS", // タークス・カイコス諸島 + "UNITED_STATES", // アメリカ + "URUGUAY ", // ウルグアイ + "US_VIRGIN_ISLANDS", // 米領バージン諸島 + "VENEZUELA", // ベネズエラ + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "ALBANIA ", // アルバニア + "AUSTRALIA", // オーストラリア + "AUSTRIA", // オーストリア + "BELGIUM", // ベルギー + "BOSNIA_AND_HERZEGOVINA", // ボスニア・ヘルツェゴビナ + "BOTSWANA", // ボツワナ + "BULGARIA ", // ブルガリア + "CROATIA", // クロアチア + "CYPRUS", // キプロス + "CZECH_REPUBLIC", // チェコ + "DENMARK", // デンマーク + "ESTONIA", // エストニア + "FINLAND", // フィンランド + "FRANCE", // フランス + "GERMANY", // ドイツ + "GREECE", // ギリシャ + "HUNGARY ", // ハンガリー + "ICELAND", // アイスランド + "IRELAND", // アイルランド + "ITALY", // イタリア + "LATVIA", // ラトビア + "LESOTHO", // レソト + "LIECHTENSTEIN", // リヒテンシュタイン + "LITHUANIA", // リトアニア + "LUXEMBOURG", // ルクセンブルク + "MACEDONIA", // マケドニア + "MALTA ", // マルタ + "MONTENEGRO", // モンテネグロ + "MOZAMBIQUE", // モザンビーク + "NAMIBIA", // ナミビア + "NETHERLANDS", // オランダ + "NEW_ZEALAND", // ニュージーランド + "NORWAY", // ノルウェー + "POLAND", // ポーランド + "PORTUGAL", // ポルトガル + "ROMANIA", // ルーマニア + "RUSSIA ", // ロシア + "SERBIA", // セルビア + "SLOVAKIA", // スロバキア + "SLOVENIA", // スロベニア + "SOUTH_AFRICA", // 南アフリカ + "SPAIN", // スペイン + "SWAZILAND", // スワジランド + "SWEDEN", // スウェーデン + "SWITZERLAND", // スイス + "TURKEY", // トルコ + "UNITED_KINGDOM ", // イギリス + "ZAMBIA", // ザンビア + "ZIMBABWE", // ジンバブエ + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "TAIWAN ", // 台湾 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "SOUTH_KOREA ", // 韓国 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "HONG_KONG ", // ホンコン + "MACAU", // マカオ + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "INDONESIA ", // インドネシア + "SINGAPORE ", // シンガポール + "THAILAND ", // タイ + "PHILIPPINES", // フィリピン + "MALAYSIA", // マレーシア + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "CHINA ", // 中国 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UAE ", // アラブ首長国連邦 + "INDIA ", // インド + "EGYPT ", // エジプト + "OMAN", // オマーン + "QATAR", // カタール + "KUWAIT", // クウェート + "SAUDI_ARABIA", // サウジアラビア + "SYRIA", // シリア + "BAHRAIN", // バーレーン + "JORDAN", // ヨルダン + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "OTHERS ", + "UNKNOWN ", +}; + +static char s_strNA[] = { + "" +}; \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/escape/viewSystemInfo.c b/build/tests/DisplaySystemInformation/ARM9/src/escape/viewSystemInfo.c new file mode 100644 index 00000000..496648e6 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/escape/viewSystemInfo.c @@ -0,0 +1,354 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInfo + File: viewSystemInfo.c + + Copyright 2008 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ +*---------------------------------------------------------------------------*/ + + +#include +#include +#include "misc.h" +#include "viewSystemInfo.h" +#include "strResource.h" + +#define ID_BUFSIZE 2 +#define AGE_BUFSIZE 4 +#define BIRTHDAY_BUFSIZE 6 + +/* function prototype ----------------------------- */ +void getAllInfo( void ); +void initInfo( void ); +void infoAlloc( char* p, int size, const char *name); +void control( u8 *menu, u8 *page, u8 *line ); +void printAllInfo ( void ); + + +/* global variables ----------------------------- */ +RTCDrawProperty g_rtcDraw = { + TRUE, RTC_DATE_TOP_X, RTC_DATE_TOP_Y, RTC_TIME_TOP_X, RTC_TIME_TOP_Y +}; + +char** gAllInfo[ROOTMENU_KSIZE]; // それぞれのメニューごとに項目の中身を"文字列で"持つ配列 +u16 gUserName[OS_OWNERINFO_NICKNAME_MAX + 1]; +u16 gUserComment[OS_OWNERINFO_COMMENT_MAX + 1]; +u16 gSecretAnswer[OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1]; + + +static OSOwnerInfoEx gOwnerInfo; // オーナー情報 +static BOOL gbWirelessAvailable; // 無線が有効かどうか +static BOOL gbBatteryExtensionAvailable; // バッテリーエクステンションモードが有効か +static BOOL gbAgreeEula; // Eula同意済みか +static u8 gEulaVersion; // 同意Eulaのバージョン +static const OSTWLParentalControl *gpPC; // ペアレンタルコントロール情報 +static u8 gUniqueID[OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN]; // ユニークId +static BOOL gbForceDisableWireless; // 無線の強制無効化フラグ +static OSTWLRegion gRegion; // リージョン番号 +static u8 gSerialNo[OS_TWL_HWINFO_SERIALNO_LEN_MAX]; // シリアル番号 + + +/* static data ---------------------------------- */ + +// メニュー項目数 +static const u8 s_numMenu[11]; //暫定 + +// 文字列リソース +/* +static const u16 *s_strRootMenu[ROOTMENU_SIZE]; +static const char *s_strMenuName[ROOTMENU_SIZE]; +static const u16 *s_strOwnerMenu[OWNERMENU_SIZE]; +static const u16 *s_strParentalMenu[PARENTALMENU_SIZE]; +static char *s_strCountry[ 256 ]; +static char *s_strRegion[ OS_TWL_REGION_MAX ]; +static char *s_strUserColor[ OS_FAVORITE_COLOR_MAX ]; +static char *s_strLanguage[ OS_LANGUAGE_CODE_MAX ]; +static char *s_strBool[2]; +static char *s_strRatingOrg[OS_TWL_PCTL_OGN_MAX]; +*/ + +/* function definition -------------------------- */ + +void displayInfoMain( void ) +{ + static u8 menu = MENU_ROOT; + static u8 page = 0, line = 0; // 現在選択しているページナンバと行 + + static BOOL firstCall = TRUE; // 最初の呼び出しか否か + + // 初回の呼び出し時は全ての情報を取得しなおす + if( firstCall ) + { + firstCall = FALSE; + initInfo(); + getAllInfo(); + } + + // パッド情報で選んでる場所とか情報とか更新 + control( &menu, &page, &line ); + + + // 変更可能な項目でAボタン押したら変更モードに移るとか + // Bボタンでジャンルに戻るとかそんなんやる + NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); + + drawHeader(menu, page, line); + drawMenu(menu, page, line); // 情報一覧を描画する + GetAndDrawRTCData( &g_rtcDraw, FALSE ); // RTC更新 + +} + +void initInfo( void ) +{ + OS_TPrintf("buffer initialize\n"); + + // 固定文字列で対応できない項目に文字列領域を割り当てる + gAllInfo[MENU_OWNER][OWNER_BIRTHDAY] = (char*) Alloc (sizeof(char) * BIRTHDAY_BUFSIZE); + SDK_ASSERT( gAllInfo[MENU_OWNER][OWNER_BIRTHDAY] ); + + gAllInfo[MENU_PARENTAL][PARENTAL_AGE] = (char*) Alloc (sizeof(char) * AGE_BUFSIZE); + SDK_ASSERT( gAllInfo[MENU_PARENTAL][PARENTAL_AGE] ); + + gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD] = (char*) Alloc (sizeof(char) * OS_TWL_PCTL_PASSWORD_LENGTH+1); + SDK_ASSERT( gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD] ); + + gAllInfo[MENU_OTHER][OTHER_EULA_VERSION] = (char*) Alloc (sizeof(char) * AGE_BUFSIZE); + SDK_ASSERT( gAllInfo[MENU_OTHER][OTHER_EULA_VERSION] ); + + gAllInfo[MENU_OTHER][OTHER_UNIQUE_ID] = (char*) Alloc (sizeof(char) * OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3); + SDK_ASSERT( gAllInfo[MENU_OTHER][OTHER_UNIQUE_ID] ); + + gAllInfo[MENU_OTHER][OTHER_SERIAL] = (char*) Alloc (sizeof(char) * OS_TWL_HWINFO_SERIALNO_LEN_MAX); + SDK_ASSERT( gAllInfo[MENU_OTHER][OTHER_SERIAL] ); + + OS_TPrintf( "information alloc succeeded\n" ); +} + + +void getAllInfo( void ) +// +{ + BOOL SCFGAccessable = FALSE; + BOOL fuseRomAccessable = FALSE; + u8 uniqIDBuf[OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN]; + + + OS_TPrintf("reflesh Information\n"); + + OS_TPrintf( "...Owner Information\n"); + // 本体設定まわり + OS_GetOwnerInfoEx( &gOwnerInfo ); + + // 全体情報につめていく + // 泥臭すぎるやり方なのであとで考える + gAllInfo[MENU_OWNER][OWNER_LANGUAGE] = s_strLanguage[ gOwnerInfo.language ]; + gAllInfo[MENU_OWNER][OWNER_COLOR] = s_strUserColor[ gOwnerInfo.favoriteColor ]; + snprintf( gAllInfo[MENU_OWNER][OWNER_BIRTHDAY], BIRTHDAY_BUFSIZE, "%02d/%02d", gOwnerInfo.birthday.month, gOwnerInfo.birthday.day); + OS_TPrintf( "language:%s\n", gAllInfo[MENU_OWNER][OWNER_LANGUAGE]); + gAllInfo[MENU_OWNER][OWNER_COUNTRY] = s_strCountry[gOwnerInfo.country]; + wcsncpy( gUserName, gOwnerInfo.nickName, OS_OWNERINFO_NICKNAME_MAX + 1); + wcsncpy( gUserComment, gOwnerInfo.comment, OS_OWNERINFO_COMMENT_MAX + 1 ); // !!! なぜかコメントが取得できない 要検証 +// wcsncpy( gUserComment, L"うべらべらー", OS_OWNERINFO_COMMENT_MAX + 1 ); + + OS_TPrintf( "...Parental Control Information\n" ); + // ペアレンタルコントロールまわり + gpPC = OS_GetParentalControlInfoPtr(); + + gAllInfo[MENU_PARENTAL][PARENTAL_FLAG] = s_strBool[ gpPC->flags.isSetParentalControl ]; + gAllInfo[MENU_PARENTAL][PARENTAL_ORGANIZATION] = s_strRatingOrg[ gpPC->ogn ]; + snprintf( gAllInfo[MENU_PARENTAL][PARENTAL_AGE], AGE_BUFSIZE, "%d", gpPC->ratingAge ); + snprintf( gAllInfo[MENU_PARENTAL][PARENTAL_QUESTION_ID], ID_BUFSIZE, "%d", gpPC->secretQuestionID ); + wcsncpy( gUserComment, gpPC->secretAnswer, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1); + snprintf( gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD], OS_TWL_PCTL_PASSWORD_LENGTH + 1, "%d", gpPC->password ); + + OS_TPrintf( "...Other Machine Setting Information\n" ); + // そのほかの本体情報まわり + //gbBatteryExtensionAvailable = OS_IsAvailableBatteryExtension(); + gAllInfo[MENU_OTHER][OTHER_WIRELESS] = s_strEnable[ OS_IsAvailableWireless() ]; + gAllInfo[MENU_OTHER][OTHER_FORCE_DISABLE] = s_strBool[ OS_IsForceDisableWireless() ]; + gAllInfo[MENU_OTHER][OTHER_AGREE_EULA] = s_strBool[ OS_IsAgreeEULA() ]; + snprintf( gAllInfo[MENU_OTHER][OTHER_EULA_VERSION], AGE_BUFSIZE, "%d", OS_GetAgreedEULAVersion()) ; + gAllInfo[MENU_OTHER][OTHER_REGION] = s_strRegion[ OS_GetRegion() ]; + + { + int i; + char ascii[] = "0123456789abcdef"; + const u8 *unq = OS_GetMovableUniqueIDPtr(); + // 16進で1バイトずつ詰めていく + // バッファが長さの3倍長なのは、データを"%02x-%02x-%02x..."に置換するため + for(i=0; i < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3; i += 3, unq++ ) + { + gAllInfo[MENU_OTHER][OTHER_UNIQUE_ID][i] = ascii[(*unq>>4) & 0x0f]; + gAllInfo[MENU_OTHER][OTHER_UNIQUE_ID][i+1] = ascii[*unq & 0x0f]; + gAllInfo[MENU_OTHER][OTHER_UNIQUE_ID][i+2] = + (i+2) == (OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 - 1) ? '\0' : '-' ; + OS_TPrintf("uniqid: %d\n", *unq); + } + } + { + u8 serialBuf[OS_TWL_HWINFO_SERIALNO_LEN_MAX]; + OS_GetSerialNo( serialBuf ); + snprintf( gAllInfo[MENU_OTHER][OTHER_SERIAL], OS_TWL_HWINFO_SERIALNO_LEN_MAX, "%s", serialBuf); + } + + // ヘッダ情報をチェック + + // SecureアプリならfuseROM見える + // Secureアプリか明示的に指定したアプリならSCFGレジスタ見える + + /* + if( SCFGAccessable && SCFG_IsSecureRomAccessible()) + { + + } + + if( fuseRomAccessable ) + { + + }*/ + + printAllInfo(); + + OS_TPrintf("reflesh information finished\n"); +} + +void control( u8 *menu, u8 *page, u8 *line ) +{ + u8 pagemax = ( s_numMenuK[*menu] / NUM_LINES ) + 1; // 選択中メニューのページ数 + u8 linemax = ( s_numMenuK[*menu] - (*page * NUM_LINES)) > NUM_LINES ? + NUM_LINES : s_numMenuK[*menu] - (*page * NUM_LINES); // 選択中ページの項目数 + + if( pad.trg & PAD_KEY_UP ) + { + // 項目名のないところはカーソル飛ばす + do + { + *line = (*line + linemax - 1) % linemax; + } + while( !wcscmp( s_strMetaMenu[*menu][*line], L"") ); + + } + else if( pad.trg & PAD_KEY_DOWN ) + { + do + { + *line = (*line+1) % linemax; + } + while( !wcscmp( s_strMetaMenu[*menu][*line], L"") ); + } + + if( pad.trg & PAD_KEY_LEFT ) + { + // ページ送り + *page = (*page + pagemax - 1) % pagemax; + *line = 0; + } + else if( pad.trg & PAD_KEY_RIGHT ) + { + *page = (*page+1) % pagemax; + *line = 0; + } + + if( pad.trg & PAD_BUTTON_A ) + { + if(*menu == MENU_ROOT) + { + // 次のメニュー画面を開く + *menu = *line; + *line = 0; + *page = 0; + } + else + { + // !!! 設定可能な項目だったら設定変更画面 + } + + } + + if( pad.trg & PAD_BUTTON_B ) + { + // !!! とりあえず今はルートに戻る + // 値設定画面の時はキャンセルするだけにする + *menu = MENU_ROOT; + *page = 0; + *line = 0; + } +} + +void displayInfoInit( void ) +{ + int loop1,loop2; + + GX_DispOff(); + GXS_DispOff(); + NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); + + PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"RomTypeTest"); + PutStringUTF16( 4 * 8, 8 * 8, TXT_COLOR_BLACK, (const u16 *)L"Push A To Start Test."); + PutStringUTF16( 4 * 8, 10 * 8, TXT_COLOR_BLACK, (const u16 *)L"Push X To Start Test Quietly."); + GetAndDrawRTCData( &g_rtcDraw, TRUE ); + + // 全体情報を持つ配列をセット + // 全項目に文字列バッファを持たせるとメモリ書き込みが多くなるので + // 可能なものはstatic文字列へのポインタで対応 + // 必要なものだけあとでmallocする + for(loop1=0; loop1 +#include "drawFunc.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//////////////////////////////// + +// 各種本体、ユーザ情報 +extern char** gAllInfo[ROOTMENU_KSIZE]; // それぞれのメニューごとに項目の中身を"文字列で"持つ配列 +extern u16 gUserName[OS_OWNERINFO_NICKNAME_MAX + 1]; +extern u16 gUserComment[OS_OWNERINFO_COMMENT_MAX + 1]; +extern u16 gSecretAnswer[OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1]; + +//////////////////////////////// + +void displayInfoMain( void ); +void displayInfoInit( void ); + +//////////////////////////////// + + + + +#ifdef __cplusplus +} +#endif + +#endif // __LOAD_VIEW_INFO__ diff --git a/build/tests/DisplaySystemInformation/ARM9/src/main.c b/build/tests/DisplaySystemInformation/ARM9/src/main.c new file mode 100644 index 00000000..e755bcfc --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/main.c @@ -0,0 +1,116 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: main.c + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + + +#include +#include +#include "misc.h" +#include "viewSystemInfo.h" +#include "address.h" + +#define CANVAS0_WIDTH 15 +#define CANVAS0_HEIGHT 10 +#define CANVAS0_LEFT 10 +#define CANVAS0_TOP 10 + +#define CANVAS1_WIDTH 10 +#define CANVAS1_HEIGHT 10 +#define CANVAS1_LEFT 130 +#define CANVAS1_TOP 10 + +#define TEXT_HSPACE 1 // 文字列描画時の文字間 (ピクセル単位) +#define TEXT_VSPACE 1 // 文字列描画時の行間 (ピクセル単位) +#define CHARACTER_OFFSET 1 + +///////////////////////////// + +void VBlankHandler( void ); + +///////////////////////////// + + +/*---------------------------------------------------------------------------* + Name: TwlMain + + Description: main + + Arguments: None + + Returns: None + *---------------------------------------------------------------------------*/ + + + +void TwlMain( void ) +{ + + OS_Init(); + OS_InitTick(); + OS_TPrintf("Initialize begin\n"); + + // ARM7側でメモリ内にセットされたSCFGのデータを確保 + MI_CpuMove16( DISPINFO_SHARED_SCFG_REG_ADDR, gArm7SCFGReg, DISPINFO_SHARED_SCFG_REG_SIZE ); + // WRAMに退避されてる分もコピー + MI_CpuMove16( DISPINFO_SHARED_SCFG_WRAM_ADDR, gArm7SCFGWram, DISPINFO_SHARED_SCFG_WRAM_SIZE ); + + //---- interrupt setting + OS_EnableIrq(); + OS_EnableInterrupts(); + + GX_Init(); + OS_TPrintf( "File System Initialize...\n"); +// FS_Init( FS_DMA_NOT_USE ); + + OS_SetIrqFunction( OS_IE_V_BLANK, VBlankHandler ); + OS_EnableIrqMask( OS_IE_V_BLANK ); + GX_VBlankIntr( TRUE ); + + OS_TPrintf("RTC Initilize...\n"); + RTC_Init(); + + OS_TPrintf("Allocator Initialize...\n"); + InitAllocator(); + + OS_TPrintf("NAM Initialize...\n"); + NAM_Init( Alloc, Free ); + + InitBG(); + OS_TPrintf("Initialize Finished\n"); + displayInfoInit(); + + OS_TPrintf("begin mainloop\n"); + + + // メインループ + while( 1 ) + { + OS_WaitIrq(1, OS_IE_V_BLANK); // Vブランク割り込み待ち + + ReadKeyPad(); // キー入力の取得 + + displayInfoMain(); // ビューア更新 + } + + OS_Terminate(); + +} + + +void VBlankHandler(void) +{ + OS_SetIrqCheckFlag( OS_IE_V_BLANK ); // Vブランク割込チェックのセット +} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/misc.c b/build/tests/DisplaySystemInformation/ARM9/src/misc.c new file mode 100644 index 00000000..2e81ed3b --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/misc.c @@ -0,0 +1,759 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: misc.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 +#include "misc.h" + +// define data----------------------------------------------------------------- +#define NTR_IPL_FONT_DATA "data/NTR_IPL_font_m.NFTR" + +#define STRING_LENGTH_MAX 256 + +#define GRAY(x) GX_RGB(x, x, x) + +enum +{ + TXT_CPALETTE_MAIN, + TXT_CPALETTE_USERCOLOR, + TXT_CPALETTE_USERCOLORSAMPLE, + TXT_CPALETTE_4BPP, + TXT_NUM_CPALEETE +}; + +// デモ共通のカラーパレット +GXRgb TXTColorPalette[TXT_NUM_CPALEETE * 16] = +{ + 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), + + GX_RGB( 0, 0, 0), GX_RGB(12, 16, 19), GX_RGB(23, 9, 0), GX_RGB(31, 0, 3),// ユーザーカラー領域 + GX_RGB(31, 17, 31), GX_RGB(31, 18, 0), GX_RGB(30, 28, 0), GX_RGB(21, 31, 0), + GX_RGB( 0, 20, 7), GX_RGB( 9, 27, 17), GX_RGB( 6, 23, 30), GX_RGB( 0, 11, 30), + GX_RGB( 0, 0, 18), GX_RGB(17, 0, 26), GX_RGB(26, 0, 29), GX_RGB(31, 0, 18), + + GX_RGB(12, 16, 19), GX_RGB(23, 9, 0), GX_RGB(31, 0, 3), GX_RGB(31, 17, 31),// ユーザーカラーのサンプル領域 + GX_RGB(31, 18, 0), GX_RGB(30, 28, 0), GX_RGB(21, 31, 0), GX_RGB( 0, 31, 0), + GX_RGB( 0, 20, 7), GX_RGB( 9, 27, 17), GX_RGB( 6, 23, 30), GX_RGB( 0, 11, 30), + GX_RGB( 0, 0, 18), GX_RGB(17, 0, 26), GX_RGB(26, 0, 29), GX_RGB(31, 0, 18), + + GRAY(31), GRAY(29), GRAY(27), GRAY(25), + GRAY(23), GRAY(21), GRAY(19), GRAY(17), + GRAY(15), GRAY(14), GRAY(12), GRAY(10), + GRAY( 8), GRAY( 6), GRAY( 3), GRAY( 0), +}; + +// グラデパレットを作るためのマクロ +#define MAKECOLOR(r,g,b) GX_RGB( 0, 0, 0), GX_RGB(r, g, b), MC(r,g,b,1), MC(r,g,b,2),\ + MC(r,g,b,3), MC(r,g,b,4), MC(r,g,b,5), MC(r,g,b,6),\ + MC(r,g,b,7), MC(r,g,b,8), MC(r,g,b,9), MC(r,g,b,10),\ + MC(r,g,b,11), MC(r,g,b,12), MC(r,g,b,13), GX_RGB(31, 31, 31) + +#define MC(r,g,b,i) GX_RGB(r+((31-r)*i)/14, g+((31-g)*i)/14, b+((31-b)*i)/14) + +// ユーザーカラーパレット切り替え用 +GXRgb TempPalette[16 * 16] = +{ + MAKECOLOR(12, 16, 19), + MAKECOLOR(23, 9, 0), + MAKECOLOR(31, 0, 3), + MAKECOLOR(31, 17, 31), + MAKECOLOR(31, 18, 0), + MAKECOLOR(30, 28, 0), + MAKECOLOR(21, 31, 0), + MAKECOLOR( 0, 31, 0), + MAKECOLOR( 0, 20, 7), + MAKECOLOR( 9, 27, 17), + MAKECOLOR( 6, 23, 30), + MAKECOLOR( 0, 11, 30), + MAKECOLOR( 0, 0, 18), + MAKECOLOR(17, 0, 26), + MAKECOLOR(26, 0, 29), + MAKECOLOR(31, 0, 18), +}; + +// extern data----------------------------------------------------------------- + +// define data----------------------------------------------------------------- +#define CANVAS_WIDTH 32 // 文字描画域の幅 (キャラクタ単位) +#define CANVAS_HEIGHT 24 // 文字描画域の高さ (キャラクタ単位) +#define CANVAS_LEFT 0 // 文字描画域の位置X (キャラクタ単位) +#define CANVAS_TOP 0 // 文字描画域の位置Y (キャラクタ単位) + +#define TEXT_HSPACE 1 // 文字列描画時の文字間 (ピクセル単位) +#define TEXT_VSPACE 1 // 文字列描画時の行間 (ピクセル単位) + +#define CHARACTER_OFFSET 0 // 使用するキャラクタ列の開始番号 + +// RTCデータ表示位置ワーク +typedef struct RtcDrawPos{ + int date_x; + int date_y; + int time_x; + int time_y; +}RtcDrawPos; + +// function's prototype------------------------------------------------------- +static BOOL WaitDetachTP( void ); +static void StartDetachTP( void ); +static void InitScreen( void ); +static void InitCanvas( void ); + +// global variable------------------------------------------------------------- +KeyWork pad; // キーパッド入力データ +TpWork tpd; // タッチパネル入力データ +NNSFndAllocator g_allocator; // メモリアロケータ +NNSG2dFont gFont; // フォント +NNSG2dCharCanvas gCanvas; // CharCanvas +NNSG2dTextCanvas gTextCanvas; // TextCanvas +NNSG2dCharCanvas gCanvasSub; // CharCanvas +NNSG2dTextCanvas gTextCanvasSub; // TextCanvas + +// static variable------------------------------------------------------------- +static int s_detach_count; +static RtcDrawPos s_rtcPos; +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 ]; + +// const data------------------------------------------------------------------ + +// 曜日データ表示用文字コード +const u8 *const g_strWeek[] ATTRIBUTE_ALIGN(2) = { + (const u8 *)"SUN", + (const u8 *)"MON", + (const u8 *)"TUE", + (const u8 *)"WED", + (const u8 *)"THU", + (const u8 *)"FRI", + (const u8 *)"SAT", +}; + + +// ============================================================================ +// メモリ管理 +// ============================================================================ + +// アロケータの初期化 +void InitAllocator( void ) +{ + // ※暫定対策 FS_Init内でハッシュチェック用のヒープを確保しているため、 + // ユーザーヒープの確保前にFS_Initを行う必要がある。 + + // ファイルシステム初期化 + FS_Init( FS_DMA_NOT_USE ); + + { + NNSFndAllocator *pAllocator = &g_allocator; + 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, 32 ); + } +} + + +// メモリ割り当て +void *Alloc( u32 size ) +{ + return NNS_FndAllocFromAllocator( &g_allocator, size ); +} + + +// メモリ解放 +void Free( void *pBuffer ) +{ + NNS_FndFreeToAllocator( &g_allocator, pBuffer ); +} + + +// ============================================================================ +// 画面設定 +// ============================================================================ + +// BG初期化 +void InitBG(void) +{ + // 画面OFF + GX_DispOff(); + GXS_DispOff(); + + // VRAMの割り当てを全て解除 + GX_DisableBankForBG(); + GX_DisableBankForOBJ(); + GX_DisableBankForSubBG(); + GX_DisableBankForSubOBJ(); + + // メイン2Dエンジンの出力を下画面に + GX_SetDispSelect( GX_DISP_SELECT_SUB_MAIN ); + + // メインLCD + { + // VRAM割り当て + GX_SetBankForBG ( GX_VRAM_BG_128_A ); + GX_SetBankForOBJ( GX_VRAM_OBJ_128_B ); + + MI_CpuClearFast( (void *)HW_BG_VRAM, 0x20000 ); // BG -VRAM クリア + MI_CpuClearFast( (void *)HW_OBJ_VRAM, 0x20000 ); // OBJ-VRAM クリア + MI_DmaFill32( 3, (void *)HW_OAM, 192, HW_OAM_SIZE ); // OAM クリア + + // カラーパレットを設定 + GX_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); + + // BGモード設定 + GX_SetGraphicsMode( GX_DISPMODE_GRAPHICS, GX_BGMODE_0, GX_BG0_AS_2D ); + + GX_SetBGScrOffset ( GX_BGSCROFFSET_0x10000 ); + GX_SetBGCharOffset( GX_BGCHAROFFSET_0x00000 ); + } + // サブLCD + { + // 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 + + MI_CpuClearFast( (void *)HW_DB_BG_VRAM, 0x20000 ); // BG -VRAM クリア + MI_CpuClearFast( (void *)HW_DB_OBJ_VRAM, 0x20000 ); // OBJ -VRAM クリア + + // カラーパレットを設定 + GXS_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); + + // BGモード設定 + GXS_SetGraphicsMode( GX_BGMODE_0 ); // BGMODE is 0 + } + InitScreen(); + InitCanvas(); +} + + +// スクリーン初期化 +static void InitScreen( void ) +{ + // メイン画面 BG 0 を設定 + G2_SetBG0Control( + GX_BG_SCRSIZE_TEXT_256x256, // スクリーンサイズ 256x256 + GX_BG_COLORMODE_256, // カラーモード 256色 + GX_BG_SCRBASE_0xf800, // スクリーンベース + GX_BG_CHARBASE_0x00000, // キャラクタベース + GX_BG_EXTPLTT_01 // 拡張パレットスロット + ); + G2_SetBG1Control( + GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text + GX_BG_COLORMODE_16, // use 16 colors mode + GX_BG_SCRBASE_0xe800, // screen base offset + 0x0000 is the address for BG #1 screen + GX_BG_CHARBASE_0x10000, // character base offset + 0x04000 is the address for BG #0 characters + GX_BG_EXTPLTT_01 // use BGExtPltt slot #0 if BGExtPltt is enabled + ); + G2_SetBG2ControlText( + GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text + GX_BG_COLORMODE_16, // use 16 colors mode + GX_BG_SCRBASE_0xd800, // screen base offset + 0x0000 is the address for BG #1 screen + GX_BG_CHARBASE_0x14000 // character base offset + 0x04000 is the address for BG #0 characters + ); + GX_SetVisiblePlane( GX_PLANEMASK_BG0 | GX_PLANEMASK_BG1); + G2_SetBG2Priority(0); + G2_SetBG0Priority(1); + G2_SetBG1Priority(2); + + // サブ画面 BG 0 を設定 + G2S_SetBG0Control( + GX_BG_SCRSIZE_TEXT_256x256, // 256pix x 256pix text + GX_BG_COLORMODE_16, // use 16 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 +} + + +// 文字列描画の初期化 +static void InitCanvas( void ) +{ + CMN_InitFileSystem( &g_allocator ); + + // フォントを読み込みます + { + void* pFontFile; + u32 size = CMN_LoadFile( &pFontFile, NTR_IPL_FONT_DATA, &g_allocator); + NNS_G2D_ASSERT( size > 0 ); + NNS_G2dFontInitUTF16(&gFont, pFontFile); +// NNS_G2dPrintFont(&gFont); + } + + { + // CharCanvas の初期化 + NNS_G2dCharCanvasInitForBG( + &gCanvas, + (GXCharFmt256*)G2_GetBG0CharPtr() + CHARACTER_OFFSET, + CANVAS_WIDTH, + CANVAS_HEIGHT, + NNS_G2D_CHARA_COLORMODE_256 + ); + + // 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 + ); + } +} + + +// UTF16での直接文字表示 +void PutStringUTF16( int x, int y, int color, const u16 *strUTF16 ) +{ + NNS_G2dTextCanvasDrawText( &gTextCanvas, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, + strUTF16 ); +} + +void PutStringUTF16Sub( int x, int y, int color, const u16 *strUTF16 ) +{ + NNS_G2dTextCanvasDrawText( &gTextCanvasSub, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, + strUTF16 ); +} + + +// 書式付きで作成した文字列を表示した場合の幅を取得する +int GetPrintfWidth( const NNSG2dTextCanvas *pCanvas, 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; + + return NNS_G2dTextCanvasGetTextWidth( pCanvas, s_strBufferUTF16 ); +} + + +// SJISでPrintf形式で文字表示(内部でUTF16に変換) +void PrintfSJIS( 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(&gTextCanvas, x, y, color, TXT_DRAWTEXT_FLAG_DEFAULT, + 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) +{ + u16 readData = PAD_Read(); + pad.trg = (u16)(readData & (readData ^ pad.cont)); // トリガ 入力 + pad.cont = readData; // ベタ 入力 +} + + +// タッチパネルデータの取得----------------------- +void ReadTP(void) +{ + 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座標に変換。 + + if( !WaitDetachTP() ) { // TPデタッチ待ちを行う。 + SVC_CpuClear(0x0000, &tpd.disp, sizeof(tpd.disp), 16); // SPI-busyでデータ取得に失敗した時は”データなし”でリターン。 + return; + } +#if 0 + if(tpd.disp.touch) { // 現在のTPデータを表示 + switch ( tpd.disp.validity ) { + case TP_VALIDITY_VALID: + OS_Printf("( %3d, %3d ) -> ( %3d, %3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); + break; + case TP_VALIDITY_INVALID_X: + OS_Printf("( *%3d, %3d ) -> ( *%3d, %3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); + break; + case TP_VALIDITY_INVALID_Y: + OS_Printf("( %3d, *%3d ) -> ( %3d, *%3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); + break; + case TP_VALIDITY_INVALID_XY: + OS_Printf("( *%3d, *%3d ) -> ( *%3d, *%3d )\n", tpd.raw.x, tpd.raw.y, tpd.disp.x, tpd.disp.y); + break; + } + } +#endif +} + + +// TPデタッチを待つ +static BOOL WaitDetachTP( void ) +{ + // s_detach_countが始動していたら、カウント判定。 + if(s_detach_count > 0) { + if(tpd.disp.touch == 0) { // TPが押されていなければ、カウント進行し規定値で再入力を受け付ける。 + s_detach_count--; + }else { + s_detach_count = TP_CSR_DETACH_COUNT; + } + return FALSE; + } + return TRUE; +} + + +// TPデタッチ待ちの開始 +static void StartDetachTP( void ) +{ + s_detach_count = TP_CSR_DETACH_COUNT; +} + + +//====================================================== +// メニュー制御 +//====================================================== + +// メニュー描画 +void DrawMenu( u16 nowCsr, const MenuParam *pMenu ) +{ + int i; + int color; + + for( i = 0; i < pMenu->num; i++ ) { + if(i == nowCsr) { + if( !pMenu->pos[ i ].enable ) { + color = pMenu->disable_color; + }else { + color = pMenu->select_color; + } + }else { + color = pMenu->normal_color; + } + PutStringUTF16( pMenu->pos[ i ].x, pMenu->pos[ i ].y, color, (pMenu->str_elem)[ i ] ); + } +} + +// タッチパネルによる選択を行う関数・汎用版。 +// 主にチャタリングを吸収する程度の機能を持つ。 +// SelectSomethingFunc型の関数ポインタfuncには、次に示す条件を満たす関数を作り、リストにしてセットして使う。 +// 1.要素上でタッチしていればTRUEを返し、そうでなければFALSEを返す。 +// 2.第一引数に与えたポインタの指す変数にカーソル位置を入れて返す。 +BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum ) +{ + int i; + static u16 detach_count = 0; + static u16 csr_old = 0xffff; + static u16 same_csr_count = 0; + + // detach_countが始動していたら、カウント判定。 + if( detach_count > 0 ) { + if( tpd.disp.touch == 0 ) { // TPが押されていなければ、カウント進行し、TP_CSR_DETACH_COUNTカウントでメニュー選択 + if( ++detach_count == TP_CSR_DETACH_COUNT ) { + detach_count = 0; + same_csr_count = 0; + *nowCsr = csr_old; + return TRUE; + }else { + return FALSE; + } + } + } + detach_count=0; // detachカウント値のクリア + + for( i = 0; i < funcnum; i++ ) { + if( tpd.disp.touch ) { // タッチパネルがタッチされているなら、 + u16 csr; + if( func[i]( &csr, &tpd.disp ) ) { // funcは要素上にタッチされていればTRUEを返し、カーソル位置も返してくれる関数 + if( tpd.disp.validity == TP_VALIDITY_VALID ) { // カーソルをその要素に移動 + if( csr_old == csr ) { + if( same_csr_count < TP_CSR_TOUCH_COUNT ) { + same_csr_count++; + } + if( same_csr_count == TP_CSR_TOUCH_COUNT ) { + *nowCsr = csr; + } + return FALSE; + }else { + csr_old = csr; + } + break; + } + }else { + } + }else { // touch==0 + if( same_csr_count == TP_CSR_TOUCH_COUNT ) { + detach_count = 1; + break; + } + } + } + same_csr_count = 0; + return FALSE; +} + +// タッチパネルによるメニュー選択 +BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu ) +{ + u16 i; + 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; + }else { + return FALSE; + } + } + } + detach_count=0; // detachカウント値のクリア + + for( i = 0; i < pMenu->num; i++ ) { + if( tpd.disp.touch ) { // タッチパネルがメニューの要素上でタッチされているなら、 + NNSG2dTextRect rect = NNS_G2dTextCanvasGetTextRect( &gTextCanvas, (pMenu->str_elem)[ i ] ); + u16 top_x = (u16)( pMenu->pos[ i ].x ); // メニュー要素のLCD座標を算出 + u16 top_y = (u16)( pMenu->pos[ i ].y ); + u16 bottom_x = (u16)( top_x + rect.width ); + u16 bottom_y = (u16)( top_y + rect.height ); + + + if( WithinRangeTP( top_x, top_y, bottom_x, bottom_y, &tpd.disp ) ) { + if( tpd.disp.validity == TP_VALIDITY_VALID ) { // カーソルをその要素に移動 + if( csr_old == i ) { + if( same_csr_count < TP_CSR_TOUCH_COUNT ) { + same_csr_count++; + } + if( same_csr_count == TP_CSR_TOUCH_COUNT ) { + *nowCsr = i; + } + return FALSE; + }else { + csr_old = i; + } + break; + } + }else { + } + }else { // touch==0 + if( same_csr_count == TP_CSR_TOUCH_COUNT ) { + detach_count = 1; + break; + } + } + } + same_csr_count = 0; + return FALSE; +} + + +// 現在のタッチパネル座標が指定領域内にあるかどうかを返す。 +BOOL WithinRangeTP( int top_x, int top_y, int bottom_x, int bottom_y, TPData *tgt ) +{ + if( ( tgt->x >= top_x ) && + ( tgt->x <= bottom_x ) && + ( tgt->y >= top_y ) && + ( tgt->y <= bottom_y ) ) { + return TRUE; + }else { + return FALSE; + } +} + + +// バナーアイコンOBJのロード +void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp ) +{ + GXS_LoadOBJPltt( bannerp->pltt, 15, BANNER_PLTT_SIZE ); + MI_CpuCopyFast( bannerp->image, (void *)(HW_DB_OBJ_VRAM + 0x20), BANNER_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 +} + + +//=============================================== +// RTCアクセスルーチン +//=============================================== + +// RTCデータの取得 +BOOL GetRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ) +{ + if( forceGetFlag || ( pRTCDraw->vcount++ == 59 ) ) { + pRTCDraw->vcount = 0; + MI_CpuCopy16( &pRTCDraw->date, &pRTCDraw->date_old, sizeof(RTCDate) ); + MI_CpuCopy16( &pRTCDraw->time, &pRTCDraw->time_old, sizeof(RTCTime) ); + (void)RTC_GetDateTime( &pRTCDraw->date, &pRTCDraw->time ); + return TRUE; + } + return FALSE; +} + + +// RTCデータの表示 +void DrawRTCData( RTCDrawProperty *pRTCDraw ) +{ + void (*pPrintFunc)( int x, int y, int color, const char *fmt, ... ) = + ( pRTCDraw->isTopLCD ) ? PrintfSJISSub : PrintfSJIS; + + // 前RTC情報の消去 + { + u32 year = pRTCDraw->date_old.year + 2000; + pPrintFunc( pRTCDraw->date_x, pRTCDraw->date_y, TXT_COLOR_WHITE, "%04d/%02d/%02d[%3s]", + year, + pRTCDraw->date_old.month, + pRTCDraw->date_old.day, + g_strWeek[ pRTCDraw->date_old.week ] + ); + pPrintFunc( pRTCDraw->time_x, pRTCDraw->time_y, TXT_COLOR_WHITE, "%02d:%02d:%02d", + pRTCDraw->time_old.hour, + pRTCDraw->time_old.minute, + pRTCDraw->time_old.second + ); + } + // RTC情報の表示 + { + u32 year = pRTCDraw->date.year + 2000; + pPrintFunc( pRTCDraw->date_x, pRTCDraw->date_y, TXT_COLOR_BLACK, "%d/%02d/%02d[%3s]", + year, + pRTCDraw->date.month, + pRTCDraw->date.day, + g_strWeek[ pRTCDraw->date.week ] + ); + pPrintFunc( pRTCDraw->time_x, pRTCDraw->time_y, TXT_COLOR_BLACK, "%02d:%02d:%02d", + pRTCDraw->time.hour, + pRTCDraw->time.minute, + pRTCDraw->time.second + ); + } +} + +// RTCデータの取得&表示 +void GetAndDrawRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ) +{ + if( GetRTCData( pRTCDraw, forceGetFlag ) ) { + DrawRTCData( pRTCDraw ); + } +} + +// ユーザーカラー領域の切り替え +void ChangeUserColor( u8 col ) +{ + int l; + if(col > 15) return; + for(l=0;l<16;l++) + { + TXTColorPalette[16+l] = TempPalette[16 * col + l]; + } + GX_LoadBGPltt( TXTColorPalette, 0, sizeof(TXTColorPalette) ); +} diff --git a/build/tests/DisplaySystemInformation/ARM9/src/misc.h b/build/tests/DisplaySystemInformation/ARM9/src/misc.h new file mode 100644 index 00000000..ba7cd3bc --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/misc.h @@ -0,0 +1,196 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL + File: misc.h + + Copyright 2007 Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev$ + $Author$ + *---------------------------------------------------------------------------*/ + +#ifndef __MISC_H__ +#define __MISC_H__ + +#include +#include + +#define NNS_G2D_UNICODE +#include +#include +#include +#include + +#include "cmn.h" + +#ifdef __cplusplus +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) + +// TXTColorPalette の色名 256色パレットへのロードを想定 +enum +{ + // パレット0 TXT_CPALETTE_MAIN + TXT_COLOR_NULL=0, + TXT_COLOR_WHITE, + TXT_COLOR_BLACK, + TXT_COLOR_RED, + TXT_COLOR_GREEN, + TXT_COLOR_BLUE, + TXT_COLOR_CYAN, + TXT_COLOR_MAGENTA, + TXT_COLOR_YELLOW, + + // ユーザーカラーグラデーションパレット領域 + TXT_UCOLOR_GNULL=16, + TXT_UCOLOR_G0, + TXT_UCOLOR_G1, + TXT_UCOLOR_G2, + TXT_UCOLOR_G3, + TXT_UCOLOR_G4, + TXT_UCOLOR_G5, + TXT_UCOLOR_G6, + TXT_UCOLOR_G7, + TXT_UCOLOR_G8, + TXT_UCOLOR_G9, + TXT_UCOLOR_G10, + TXT_UCOLOR_G11, + TXT_UCOLOR_G12, + TXT_UCOLOR_G13, + TXT_UCOLOR_GWHITE, + + // ユーザーカラーサンプル領域 + TXT_UCOLOR_GRAY=32, + TXT_UCOLOR_BROWN, + TXT_UCOLOR_RED, + TXT_UCOLOR_PINK, + TXT_UCOLOR_ORANGE, + TXT_UCOLOR_YELLOW, + TXT_UCOLOR_LIMEGREEN, + TXT_UCOLOR_GREEN, + TXT_UCOLOR_DARKGREEN, + TXT_UCOLOR_SEAGREEN, + TXT_UCOLOR_TURQUOISE, + TXT_UCOLOR_BLUE, + TXT_UCOLOR_DARKBLUE, + TXT_UCOLOR_PURPLE, + TXT_UCOLOR_VIOLET, + TXT_UCOLOR_MAGENTA, + + // パレット TXT_CPALETTE_4BPP + TXT_COLOR_4BPP_NULL=48, + TXT_COLOR_4BPP_BG=49, + TXT_COLOR_4BPP_TEXT=49 +}; + +// 時計表示場所 +#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 ) + + +// キーデータワーク +typedef struct { + u16 trg; // トリガ入力 + u16 cont; // ベタ 入力 +}KeyWork; + + +// タッチパネルワーク +typedef struct { + int detached; // 今回のデータ入力でタッチが離れたことを示す。 + TPData disp; // 今回の入力値(LCD座標) + TPData raw; // 今回の入力値(TP 座標) + TPData last; // 前回の入力値(LCD座標) +}TpWork; + + +// メニュー要素座標 +typedef struct MenuPos { + BOOL enable; + int x; + int y; +}MenuPos; + + +// メニュー構成パラメータ構造体 +typedef struct MenuParam { + int num; + int normal_color; + int select_color; + int disable_color; + MenuPos *pos; + const u16 **str_elem; +}MenuParam; + + +// RTCデータ表示位置ワーク +typedef struct RTCDrawProperty { + BOOL isTopLCD; + int date_x; + int date_y; + int time_x; + int time_y; + int vcount; + RTCDate date; + RTCTime time; + RTCDate date_old; + RTCTime time_old; +}RTCDrawProperty; + +typedef BOOL (*SelectSomethingFunc)( u16 *csr, TPData *tgt ); + +// global variables-------------------------------------------------- +extern TpWork tpd; // タッチパネルデータ +extern KeyWork pad; // キーパッド入力データ +extern const u8 *const g_strWeek[ 7 ]; // 曜日文字列 +extern RTCDrawProperty g_rtcDraw; + +extern NNSFndAllocator g_allocator; // メモリアロケータ +extern NNSG2dFont gFont; // フォント +extern NNSG2dCharCanvas gCanvas; // CharCanvas +extern NNSG2dTextCanvas gTextCanvas; // TextCanvas +extern NNSG2dCharCanvas gCanvasSub; // CharCanvas +extern NNSG2dTextCanvas gTextCanvasSub; // TextCanvas + +// function------------------------------------------------------------- +void InitAllocator( void ); +void *Alloc( u32 size ); +void Free( void *pBuffer ); +void InitBG( void ); +int GetPrintfWidth( const NNSG2dTextCanvas *pCanvas, 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 ReadTP( void ); +void DrawMenu( u16 nowCsr, const MenuParam *pMenu ); +BOOL SelectSomethingByTP( u16 *nowCsr, SelectSomethingFunc func[], int funcnum ); +BOOL SelectMenuByTP( u16 *nowCsr, const MenuParam *pMenu ); +BOOL WithinRangeTP( int top_x, int top_y, int bottom_x, int bottom_y, TPData *tgt ); +void SetBannerIconOBJ( GXOamAttr *pDstOAM, BannerFileV1 *bannerp ); +BOOL GetRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ); +void DrawRTCData( RTCDrawProperty *pRTCDraw ); +void GetAndDrawRTCData( RTCDrawProperty *pRTCDraw, BOOL forceGetFlag ); +void ChangeUserColor( u8 col ); + +#ifdef __cplusplus +} +#endif + +#endif // __MISC_H__ diff --git a/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h b/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h new file mode 100644 index 00000000..57c2456a --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/myIoreg_SCFG.h @@ -0,0 +1,491 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: myIoreg_SCFG.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. + + *---------------------------------------------------------------------------*/ + +// ARM9側で受け取ったARM7のSCFGを参照するために +// ARM9側なのにARM7依存のオフセット情報が必要... + + +// マクロ再定義を防ぐための苦肉の策 + +#ifndef __MY_IOREG_SCFG_H__ +#define __MY_IOREG_SCFG_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Definition of Register offsets, addresses and variables. + */ + + +/* ROM */ + +#define DISP_REG_ROM_OFFSET 0x4000 +#define DISP_REG_ROM_ADDR (HW_REG_BASE + DISP_REG_ROM_OFFSET) + +/* A9ROM */ + +#define DISP_REG_A9ROM_OFFSET 0x4000 +#define DISP_REG_A9ROM_ADDR (HW_REG_BASE + DISP_REG_A9ROM_OFFSET) + +/* A7ROM */ + +#define DISP_REG_A7ROM_OFFSET 0x4001 +#define DISP_REG_A7ROM_ADDR (HW_REG_BASE + DISP_REG_A7ROM_OFFSET) + +/* ROMWE */ + +#define DISP_REG_ROMWE_OFFSET 0x4002 +#define DISP_REG_ROMWE_ADDR (HW_REG_BASE + DISP_REG_ROMWE_OFFSET) + +/* CLK */ + +#define DISP_REG_CLK_OFFSET 0x4004 +#define DISP_REG_CLK_ADDR (HW_REG_BASE + DISP_REG_CLK_OFFSET) + +/* JTAG */ + +#define DISP_REG_JTAG_OFFSET 0x4006 +#define DISP_REG_JTAG_ADDR (HW_REG_BASE + DISP_REG_JTAG_OFFSET) + +/* EXT */ + +#define DISP_REG_EXT_OFFSET 0x4008 +#define DISP_REG_EXT_ADDR (HW_REG_BASE + DISP_REG_EXT_OFFSET) + +/* MC */ + +#define DISP_REG_MC_OFFSET 0x4010 +#define DISP_REG_MC_ADDR (HW_REG_BASE + DISP_REG_MC_OFFSET) + +/* MCCHAT */ + +#define DISP_REG_MCCHAT_OFFSET 0x4012 +#define DISP_REG_MCCHAT_ADDR (HW_REG_BASE + DISP_REG_MCCHAT_OFFSET) + +/* MC2 */ + +#define DISP_REG_MC2_OFFSET 0x4014 +#define DISP_REG_MC2_ADDR (HW_REG_BASE + DISP_REG_MC2_OFFSET) + + +/* WL */ + +#define DISP_REG_WL_OFFSET 0x4020 +#define DISP_REG_WL_ADDR (HW_REG_BASE + DISP_REG_WL_OFFSET) + +/* OP */ + +#define DISP_REG_OP_OFFSET 0x4024 +#define DISP_REG_OP_ADDR (HW_REG_BASE + DISP_REG_OP_OFFSET) + + +/* + * Definitions of Register fields + */ + + +/* ROM */ + +#define DISP_REG_SCFG_ROM_ROMWE_SHIFT 16 +#define DISP_REG_SCFG_ROM_ROMWE_SIZE 1 +#define DISP_REG_SCFG_ROM_ROMWE_MASK 0x00010000 + +#define DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT 10 +#define DISP_REG_SCFG_ROM_ARM7FUSE_SIZE 1 +#define DISP_REG_SCFG_ROM_ARM7FUSE_MASK 0x00000400 + +#define DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT 9 +#define DISP_REG_SCFG_ROM_ARM7RSEL_SIZE 1 +#define DISP_REG_SCFG_ROM_ARM7RSEL_MASK 0x00000200 + +#define DISP_REG_SCFG_ROM_ARM7SEL_SHIFT 8 +#define DISP_REG_SCFG_ROM_ARM7SEL_SIZE 1 +#define DISP_REG_SCFG_ROM_ARM7SEL_MASK 0x00000100 + +#define DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT 1 +#define DISP_REG_SCFG_ROM_ARM9RSEL_SIZE 1 +#define DISP_REG_SCFG_ROM_ARM9RSEL_MASK 0x00000002 + +#define DISP_REG_SCFG_ROM_ARM9SEL_SHIFT 0 +#define DISP_REG_SCFG_ROM_ARM9SEL_SIZE 1 +#define DISP_REG_SCFG_ROM_ARM9SEL_MASK 0x00000001 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_ROM_FIELD( romwe, arm7fuse, arm7rsel, arm7sel, arm9rsel, arm9sel ) \ + (u32)( \ + ((u32)(romwe) << DISP_REG_SCFG_ROM_ROMWE_SHIFT) | \ + ((u32)(arm7fuse) << DISP_REG_SCFG_ROM_ARM7FUSE_SHIFT) | \ + ((u32)(arm7rsel) << DISP_REG_SCFG_ROM_ARM7RSEL_SHIFT) | \ + ((u32)(arm7sel) << DISP_REG_SCFG_ROM_ARM7SEL_SHIFT) | \ + ((u32)(arm9rsel) << DISP_REG_SCFG_ROM_ARM9RSEL_SHIFT) | \ + ((u32)(arm9sel) << DISP_REG_SCFG_ROM_ARM9SEL_SHIFT)) +#endif + + +/* A9ROM */ + +#define DISP_REG_SCFG_A9ROM_RSEL_SHIFT 1 +#define DISP_REG_SCFG_A9ROM_RSEL_SIZE 1 +#define DISP_REG_SCFG_A9ROM_RSEL_MASK 0x02 + +#define DISP_REG_SCFG_A9ROM_SEC_SHIFT 0 +#define DISP_REG_SCFG_A9ROM_SEC_SIZE 1 +#define DISP_REG_SCFG_A9ROM_SEC_MASK 0x01 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_A9ROM_FIELD( rsel, sec ) \ + (u8)( \ + ((u32)(rsel) << DISP_REG_SCFG_A9ROM_RSEL_SHIFT) | \ + ((u32)(sec) << DISP_REG_SCFG_A9ROM_SEC_SHIFT)) +#endif + + +/* A7ROM */ + +#define DISP_REG_SCFG_A7ROM_FUSE_SHIFT 2 +#define DISP_REG_SCFG_A7ROM_FUSE_SIZE 1 +#define DISP_REG_SCFG_A7ROM_FUSE_MASK 0x04 + +#define DISP_REG_SCFG_A7ROM_RSEL_SHIFT 1 +#define DISP_REG_SCFG_A7ROM_RSEL_SIZE 1 +#define DISP_REG_SCFG_A7ROM_RSEL_MASK 0x02 + +#define DISP_REG_SCFG_A7ROM_SEC_SHIFT 0 +#define DISP_REG_SCFG_A7ROM_SEC_SIZE 1 +#define DISP_REG_SCFG_A7ROM_SEC_MASK 0x01 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_A7ROM_FIELD( fuse, rsel, sec ) \ + (u8)( \ + ((u32)(fuse) << DISP_REG_SCFG_A7ROM_FUSE_SHIFT) | \ + ((u32)(rsel) << DISP_REG_SCFG_A7ROM_RSEL_SHIFT) | \ + ((u32)(sec) << DISP_REG_SCFG_A7ROM_SEC_SHIFT)) +#endif + + +/* ROMWE */ + +#define DISP_REG_SCFG_ROMWE_WE_SHIFT 0 +#define DISP_REG_SCFG_ROMWE_WE_SIZE 1 +#define DISP_REG_SCFG_ROMWE_WE_MASK 0x0001 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_ROMWE_FIELD( we ) \ + (u16)( \ + ((u32)(we) << DISP_REG_SCFG_ROMWE_WE_SHIFT)) +#endif + + +/* CLK */ + +#define DISP_REG_SCFG_CLK_SNDMCLK_SHIFT 8 +#define DISP_REG_SCFG_CLK_SNDMCLK_SIZE 1 +#define DISP_REG_SCFG_CLK_SNDMCLK_MASK 0x0100 + +#define DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT 7 +#define DISP_REG_SCFG_CLK_WRAMHCLK_SIZE 1 +#define DISP_REG_SCFG_CLK_WRAMHCLK_MASK 0x0080 + +#define DISP_REG_SCFG_CLK_AESHCLK_SHIFT 2 +#define DISP_REG_SCFG_CLK_AESHCLK_SIZE 1 +#define DISP_REG_SCFG_CLK_AESHCLK_MASK 0x0004 + +#define DISP_REG_SCFG_CLK_SD2HCLK_SHIFT 1 +#define DISP_REG_SCFG_CLK_SD2HCLK_SIZE 1 +#define DISP_REG_SCFG_CLK_SD2HCLK_MASK 0x0002 + +#define DISP_REG_SCFG_CLK_SD1HCLK_SHIFT 0 +#define DISP_REG_SCFG_CLK_SD1HCLK_SIZE 1 +#define DISP_REG_SCFG_CLK_SD1HCLK_MASK 0x0001 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_CLK_FIELD( sndmclk, wramhclk, aeshclk, sd2hclk, sd1hclk ) \ + (u16)( \ + ((u32)(sndmclk) << DISP_REG_SCFG_CLK_SNDMCLK_SHIFT) | \ + ((u32)(wramhclk) << DISP_REG_SCFG_CLK_WRAMHCLK_SHIFT) | \ + ((u32)(aeshclk) << DISP_REG_SCFG_CLK_AESHCLK_SHIFT) | \ + ((u32)(sd2hclk) << DISP_REG_SCFG_CLK_SD2HCLK_SHIFT) | \ + ((u32)(sd1hclk) << DISP_REG_SCFG_CLK_SD1HCLK_SHIFT)) +#endif + + +/* JTAG */ + +#define DISP_REG_SCFG_JTAG_DSPJE_SHIFT 8 +#define DISP_REG_SCFG_JTAG_DSPJE_SIZE 1 +#define DISP_REG_SCFG_JTAG_DSPJE_MASK 0x0100 + +#define DISP_REG_SCFG_JTAG_CPUJE_SHIFT 1 +#define DISP_REG_SCFG_JTAG_CPUJE_SIZE 1 +#define DISP_REG_SCFG_JTAG_CPUJE_MASK 0x0002 + +#define DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT 0 +#define DISP_REG_SCFG_JTAG_ARM7SEL_SIZE 1 +#define DISP_REG_SCFG_JTAG_ARM7SEL_MASK 0x0001 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_JTAG_FIELD( dspje, cpuje, arm7sel ) \ + (u16)( \ + ((u32)(dspje) << DISP_REG_SCFG_JTAG_DSPJE_SHIFT) | \ + ((u32)(cpuje) << DISP_REG_SCFG_JTAG_CPUJE_SHIFT) | \ + ((u32)(arm7sel) << DISP_REG_SCFG_JTAG_ARM7SEL_SHIFT)) +#endif + + +/* EXT */ + +#define DISP_REG_SCFG_EXT_CFG_SHIFT 31 +#define DISP_REG_SCFG_EXT_CFG_SIZE 1 +#define DISP_REG_SCFG_EXT_CFG_MASK 0x80000000 + +#define DISP_REG_SCFG_EXT_PUENABLE_SHIFT 28 +#define DISP_REG_SCFG_EXT_PUENABLE_SIZE 1 +#define DISP_REG_SCFG_EXT_PUENABLE_MASK 0x10000000 + +#define DISP_REG_SCFG_EXT_SD20_SHIFT 28 +#define DISP_REG_SCFG_EXT_SD20_SIZE 1 +#define DISP_REG_SCFG_EXT_SD20_MASK 0x10000000 + +#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SHIFT 16 +#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SIZE 10 +#define DISP_REG_SCFG_EXT_NEWB_ACCESS_E_MASK 0x03ff0000 + +#define DISP_REG_SCFG_EXT_WRAM_SHIFT 25 +#define DISP_REG_SCFG_EXT_WRAM_SIZE 1 +#define DISP_REG_SCFG_EXT_WRAM_MASK 0x02000000 + +#define DISP_REG_SCFG_EXT_MC_B_SHIFT 24 +#define DISP_REG_SCFG_EXT_MC_B_SIZE 1 +#define DISP_REG_SCFG_EXT_MC_B_MASK 0x01000000 + +#define DISP_REG_SCFG_EXT_GPIO_SHIFT 23 +#define DISP_REG_SCFG_EXT_GPIO_SIZE 1 +#define DISP_REG_SCFG_EXT_GPIO_MASK 0x00800000 + +#define DISP_REG_SCFG_EXT_I2C_SHIFT 22 +#define DISP_REG_SCFG_EXT_I2C_SIZE 1 +#define DISP_REG_SCFG_EXT_I2C_MASK 0x00400000 + +#define DISP_REG_SCFG_EXT_I2S_SHIFT 21 +#define DISP_REG_SCFG_EXT_I2S_SIZE 1 +#define DISP_REG_SCFG_EXT_I2S_MASK 0x00200000 + +#define DISP_REG_SCFG_EXT_MIC_SHIFT 20 +#define DISP_REG_SCFG_EXT_MIC_SIZE 1 +#define DISP_REG_SCFG_EXT_MIC_MASK 0x00100000 + +#define DISP_REG_SCFG_EXT_SD2_SHIFT 19 +#define DISP_REG_SCFG_EXT_SD2_SIZE 1 +#define DISP_REG_SCFG_EXT_SD2_MASK 0x00080000 + +#define DISP_REG_SCFG_EXT_SD1_SHIFT 18 +#define DISP_REG_SCFG_EXT_SD1_SIZE 1 +#define DISP_REG_SCFG_EXT_SD1_MASK 0x00040000 + +#define DISP_REG_SCFG_EXT_AES_SHIFT 17 +#define DISP_REG_SCFG_EXT_AES_SIZE 1 +#define DISP_REG_SCFG_EXT_AES_MASK 0x00020000 + +#define DISP_REG_SCFG_EXT_DMAC_SHIFT 16 +#define DISP_REG_SCFG_EXT_DMAC_SIZE 1 +#define DISP_REG_SCFG_EXT_DMAC_MASK 0x00010000 + +#define DISP_REG_SCFG_EXT_NITROB_EX_E_SHIFT 8 +#define DISP_REG_SCFG_EXT_NITROB_EX_E_SIZE 8 +#define DISP_REG_SCFG_EXT_NITROB_EX_E_MASK 0x0000ff00 + +#define DISP_REG_SCFG_EXT_PSRAM_SHIFT 14 +#define DISP_REG_SCFG_EXT_PSRAM_SIZE 2 +#define DISP_REG_SCFG_EXT_PSRAM_MASK 0x0000c000 + +#define DISP_REG_SCFG_EXT_VRAM_SHIFT 13 +#define DISP_REG_SCFG_EXT_VRAM_SIZE 1 +#define DISP_REG_SCFG_EXT_VRAM_MASK 0x00002000 + +#define DISP_REG_SCFG_EXT_LCDC_SHIFT 12 +#define DISP_REG_SCFG_EXT_LCDC_SIZE 1 +#define DISP_REG_SCFG_EXT_LCDC_MASK 0x00001000 + +#define DISP_REG_SCFG_EXT_SIO_SHIFT 11 +#define DISP_REG_SCFG_EXT_SIO_SIZE 1 +#define DISP_REG_SCFG_EXT_SIO_MASK 0x00000800 + +#define DISP_REG_SCFG_EXT_DSEL_SHIFT 10 +#define DISP_REG_SCFG_EXT_DSEL_SIZE 1 +#define DISP_REG_SCFG_EXT_DSEL_MASK 0x00000400 + +#define DISP_REG_SCFG_EXT_SPI_SHIFT 9 +#define DISP_REG_SCFG_EXT_SPI_SIZE 1 +#define DISP_REG_SCFG_EXT_SPI_MASK 0x00000200 + +#define DISP_REG_SCFG_EXT_INTC_SHIFT 8 +#define DISP_REG_SCFG_EXT_INTC_SIZE 1 +#define DISP_REG_SCFG_EXT_INTC_MASK 0x00000100 + +#define DISP_REG_SCFG_EXT_NITROB_MOD_E_SHIFT 0 +#define DISP_REG_SCFG_EXT_NITROB_MOD_E_SIZE 8 +#define DISP_REG_SCFG_EXT_NITROB_MOD_E_MASK 0x000000ff + +#define DISP_REG_SCFG_EXT_MC_SHIFT 7 +#define DISP_REG_SCFG_EXT_MC_SIZE 1 +#define DISP_REG_SCFG_EXT_MC_MASK 0x00000080 + +#define DISP_REG_SCFG_EXT_SND_SHIFT 2 +#define DISP_REG_SCFG_EXT_SND_SIZE 1 +#define DISP_REG_SCFG_EXT_SND_MASK 0x00000004 + +#define DISP_REG_SCFG_EXT_SDMA_SHIFT 1 +#define DISP_REG_SCFG_EXT_SDMA_SIZE 1 +#define DISP_REG_SCFG_EXT_SDMA_MASK 0x00000002 + +#define DISP_REG_SCFG_EXT_DMA_SHIFT 0 +#define DISP_REG_SCFG_EXT_DMA_SIZE 1 +#define DISP_REG_SCFG_EXT_DMA_MASK 0x00000001 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_EXT_FIELD( cfg, puenable, sd20, newb_access_e, wram, mc_b, gpio, i2c, i2s, mic, sd2, sd1, aes, dmac, nitrob_ex_e, psram, vram, lcdc, sio, dsel, spi, intc, nitrob_mod_e, mc, snd, sdma, dma ) \ + (u32)( \ + ((u32)(cfg) << DISP_REG_SCFG_EXT_CFG_SHIFT) | \ + ((u32)(puenable) << DISP_REG_SCFG_EXT_PUENABLE_SHIFT) | \ + ((u32)(sd20) << DISP_REG_SCFG_EXT_SD20_SHIFT) | \ + ((u32)(newb_access_e) << DISP_REG_SCFG_EXT_NEWB_ACCESS_E_SHIFT) | \ + ((u32)(wram) << DISP_REG_SCFG_EXT_WRAM_SHIFT) | \ + ((u32)(mc_b) << DISP_REG_SCFG_EXT_MC_B_SHIFT) | \ + ((u32)(gpio) << DISP_REG_SCFG_EXT_GPIO_SHIFT) | \ + ((u32)(i2c) << DISP_REG_SCFG_EXT_I2C_SHIFT) | \ + ((u32)(i2s) << DISP_REG_SCFG_EXT_I2S_SHIFT) | \ + ((u32)(mic) << DISP_REG_SCFG_EXT_MIC_SHIFT) | \ + ((u32)(sd2) << DISP_REG_SCFG_EXT_SD2_SHIFT) | \ + ((u32)(sd1) << DISP_REG_SCFG_EXT_SD1_SHIFT) | \ + ((u32)(aes) << DISP_REG_SCFG_EXT_AES_SHIFT) | \ + ((u32)(dmac) << DISP_REG_SCFG_EXT_DMAC_SHIFT) | \ + ((u32)(nitrob_ex_e) << DISP_REG_SCFG_EXT_NITROB_EX_E_SHIFT) | \ + ((u32)(psram) << DISP_REG_SCFG_EXT_PSRAM_SHIFT) | \ + ((u32)(vram) << DISP_REG_SCFG_EXT_VRAM_SHIFT) | \ + ((u32)(lcdc) << DISP_REG_SCFG_EXT_LCDC_SHIFT) | \ + ((u32)(sio) << DISP_REG_SCFG_EXT_SIO_SHIFT) | \ + ((u32)(dsel) << DISP_REG_SCFG_EXT_DSEL_SHIFT) | \ + ((u32)(spi) << DISP_REG_SCFG_EXT_SPI_SHIFT) | \ + ((u32)(intc) << DISP_REG_SCFG_EXT_INTC_SHIFT) | \ + ((u32)(nitrob_mod_e) << DISP_REG_SCFG_EXT_NITROB_MOD_E_SHIFT) | \ + ((u32)(mc) << DISP_REG_SCFG_EXT_MC_SHIFT) | \ + ((u32)(snd) << DISP_REG_SCFG_EXT_SND_SHIFT) | \ + ((u32)(sdma) << DISP_REG_SCFG_EXT_SDMA_SHIFT) | \ + ((u32)(dma) << DISP_REG_SCFG_EXT_DMA_SHIFT)) +#endif + + +/* MC */ + +#define DISP_REG_MI_MC_SWP_SHIFT 15 +#define DISP_REG_MI_MC_SWP_SIZE 1 +#define DISP_REG_MI_MC_SWP_MASK 0x8000 + +#define DISP_REG_MI_MC_SL2_MODE_SHIFT 6 +#define DISP_REG_MI_MC_SL2_MODE_SIZE 2 +#define DISP_REG_MI_MC_SL2_MODE_MASK 0x00c0 + +#define DISP_REG_MI_MC_SL2_CDET_SHIFT 4 +#define DISP_REG_MI_MC_SL2_CDET_SIZE 1 +#define DISP_REG_MI_MC_SL2_CDET_MASK 0x0010 + +#define DISP_REG_MI_MC_SL1_MODE_SHIFT 2 +#define DISP_REG_MI_MC_SL1_MODE_SIZE 2 +#define DISP_REG_MI_MC_SL1_MODE_MASK 0x000c + +#define DISP_REG_MI_MC_SL1_CDET_SHIFT 0 +#define DISP_REG_MI_MC_SL1_CDET_SIZE 1 +#define DISP_REG_MI_MC_SL1_CDET_MASK 0x0001 + +#ifndef SDK_ASM +#define DISP_REG_MI_MC_FIELD( swp, sl2_mode, sl2_cdet, sl1_mode, sl1_cdet ) \ + (u16)( \ + ((u32)(swp) << DISP_REG_MI_MC_SWP_SHIFT) | \ + ((u32)(sl2_mode) << DISP_REG_MI_MC_SL2_MODE_SHIFT) | \ + ((u32)(sl2_cdet) << DISP_REG_MI_MC_SL2_CDET_SHIFT) | \ + ((u32)(sl1_mode) << DISP_REG_MI_MC_SL1_MODE_SHIFT) | \ + ((u32)(sl1_cdet) << DISP_REG_MI_MC_SL1_CDET_SHIFT)) +#endif + +/* MCCHAT */ + +#define DISP_REG_MI_MCCHAT_CC_SHIFT 0 +#define DISP_REG_MI_MCCHAT_CC_SIZE 16 +#define DISP_REG_MI_MCCHAT_CC_MASK 0xffff + +#ifndef SDK_ASM +#define DISP_REG_MI_MCCHAT_FIELD( cc ) \ + (u16)( \ + ((u32)(cc) << DISP_REG_MI_MCCHAT_CC_SHIFT)) +#endif + + +/* MC2 */ + +#define DISP_REG_MI_MC2_CA_SHIFT 0 +#define DISP_REG_MI_MC2_CA_SIZE 16 +#define DISP_REG_MI_MC2_CA_MASK 0xffff + +#ifndef SDK_ASM +#define DISP_REG_MI_MC2_FIELD( ca ) \ + (u16)( \ + ((u32)(ca) << DISP_REG_MI_MC2_CA_SHIFT)) +#endif + + +/* WL */ + +#define DISP_REG_SCFG_WL_OFFB_SHIFT 0 +#define DISP_REG_SCFG_WL_OFFB_SIZE 1 +#define DISP_REG_SCFG_WL_OFFB_MASK 0x0001 + +#ifndef SDK_ASM +#define DISP_REG_SCFG_WL_FIELD( offb ) \ + (u16)( \ + ((u32)(offb) << DISP_REG_SCFG_WL_OFFB_SHIFT)) +#endif + + +/* OP */ + +#define DISP_REG_SCFG_OP_OP1_SHIFT 1 +#define DISP_REG_SCFG_OP_OP1_SIZE 1 +#define DISP_REG_SCFG_OP_OP1_MASK 0x0002 + +#define DISP_REG_SCFG_OP_OP0_SHIFT 0 +#define DISP_REG_SCFG_OP_OP0_SIZE 1 +#define DISP_REG_SCFG_OP_OP0_MASK 0x0001 + +#define DISP_REG_SCFG_OP_OPT_SHIFT 0 +#define DISP_REG_SCFG_OP_OPT_SIZE 2 +#define DISP_REG_SCFG_OP_OPT_MASK 0x0003 + +#ifndef SDK_ASM + +#define DISP_REG_SCFG_OP_FIELD( op1, op0, opt ) \ + (u16)( \ + ((u32)(op1) << DISP_REG_SCFG_OP_OP1_SHIFT) | \ + ((u32)(op0) << DISP_REG_SCFG_OP_OP0_SHIFT) | \ + ((u32)(opt) << DISP_REG_SCFG_OP_OPT_SHIFT)) +#endif + + +#ifdef __cplusplus +} /* extern "C" */ +#endif + +/* TWL_IOREG_SCFG_H_ */ +#endif diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.c b/build/tests/DisplaySystemInformation/ARM9/src/strResource.c new file mode 100644 index 00000000..87711009 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/strResource.c @@ -0,0 +1,605 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: strResource.c + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + +#include "drawFunc.h" + + +const int s_pageOffset[ROOTMENU_SIZE][MAXPAGE] = { + { 0, OWNERMENU_SIZE }, // owner + { 0, 7, PARENTALMENU_SIZE }, // parental + { 0, NORMAL_HW_MENU_SIZE }, // normal hw + { 0, SECURE_HW_MENU_SIZE }, // secure hw + { 0, SCFG_ARM7_MENU_SIZE }, // scfg arm7 + { 0, SCFG_ARM9_MENU_SIZE }, // scfg arm9 + { 0, VERSIONMENU_SIZE } // fuse +}; + +const u8 s_numMenu[] = { + OWNERMENU_SIZE, + PARENTALMENU_SIZE, + NORMAL_HW_MENU_SIZE, + SECURE_HW_MENU_SIZE, + SCFG_ARM7_MENU_SIZE, + SCFG_ARM9_MENU_SIZE, + VERSIONMENU_SIZE, + 0, + 0, + 0, + ROOTMENU_SIZE +}; + +const u16 *s_strARM7RegisterName[] = { + L"ROM State", + L"CLK", + L"JTAG", + L"EXTEND", + L"MC I/F 1", + L"MC I/F 2", + L"DS WL", + L"BONDING", +}; + +const u16 *s_strARM9RegisterName[] = { + L"ROMステータスレジスタ", + L"新規ブロッククロック制御レジスタ", + L"新規ブロックリセット制御レジスタ", + L"拡張機能制御レジスタ", + L"メモリーカード I/F ステータスレジスタ" +}; + +const char *s_strRootMenu[] = { + "Owner", + "Parental control", + "Normal Hardware Info", + "Secure Hardware Info", + "SCFG Info (ARM7 side)", + "SCFG Info (ARM9 side)", + "Content Version" +}; + +const char *s_strMenuName[] = { + "Owner", + "Parental control", + "Normal Hardware Info", + "Secure Hardware Info", + "SCFG Info (ARM7 side)", + "SCFG Info (ARM9 side)", + "Content Version" +}; + + +const char *s_strOwnerMenu[] = { + "Language", + "Favorite color", + "Birthday", + "Country", + "Nickname", + "Comment" +}; + +const char *s_strParentalMenu[] = { + "Parental control", + "Picto Chat", + "ds Download", + "browser", + "Wii Point", + "Photo Exchange", + "UGC", + "Organization", + "Age", + "Password", + "Quastion id", + "Answer" +}; + +const char *s_strNormalHWMenu[] = { + "Wireless", + "RTC Offset", + "Agree EULA", + "Eula Version" +}; + +const char *s_strSecureHWMenu[] = { + "Force Disable Wireless", + "Region", + "Unique ID", + "Serial No", + "Language Bitmap", + "Fuse Data" +}; + +const char *s_strSCFGArm9Menu[] = { + "Rom Status", + "Camera CKI", + "WRAM Clock", + "Camera Clock", + "DSP Clock", + "CPU Speed", + "DSP Reset Flag", + "CFG Block Access", + "WRAM Access", + "DSP Access", + "Camera Access", + "New DMA Access", + "PSRAM Boundary", + "Expanded INTC", + "Expanded LCDC", + "Expanded VRAM", + "Fixed Card I/F", + "Fixed Divider", + "Fixed 2D Engine", + "Fixed Renderer", + "Fixed Geometry", + "Fixed DMA" +}; + +const char *s_strSCFGArm7Menu[] = { + + // rom制御 + "ARM9 SecureROM", + "ARM9 ROM Type", + "ARM7 SecureROM", + "ARM7 ROM Type", + "ARM7 FuseRom", + "Write Rom Area", + + // 新規ブロッククロック + "SD1 I/F Clock", + "SD2 I/F Clock", + "AES Clock", + "WRAM Clock", + "SND Clock", + + // JTAG + "Chain ARM7 to CPU JTAG", + "CPU JTAG", + "DSP JTAG", + + // 拡張機能 + "Fixed A7-DMAC1", + "Fixed Sound DMA", + "Fixed Sound", + "Fixed Memory Card", + "Expanded A7-INTC", + "Expanded SPI", + "Expanded Sound DMA", + "Expanded SIO", + "Expanded LCDC", + "Expanded VRAM", + "PSRAM Boundary", + "A7-DMAC2 Block", + "AES Block", + "SD1 I/F Block", + "SD2 I/F Block", + "Mic Block", + "I2S I/F Block", + "I2C I/F Block", + "GPIO Block", + "MemoryCard I/F", + "Shared WRAM", + "PU Resistance", + "ALL SCFG Block", + + // メモリカード I/F + "MC Slot1 DET", + "MC Slot1 Mode", + "MC Slot2 DET", + "MC Slot2 Mode", + "Swap MC1 MC2", + "Chatter. Count", + "MC Counter Data", + + // 旧無線 + "Old Wireless", + + // オプション端子読み出し + "Option Form", + "Option App for" +}; + +const char *s_strVersionMenu[] = { + "Shared Font", + "Wireless Firm", + "Whitelist" +}; + +const char **s_strMetaMenu[] = { + s_strOwnerMenu, + s_strParentalMenu, + s_strNormalHWMenu, + s_strSecureHWMenu, + s_strSCFGArm7Menu, + s_strSCFGArm9Menu, + s_strVersionMenu, + NULL, + NULL, + NULL, + s_strRootMenu +}; + +char *s_strAccess[] = { + "Inaccessible", + "Accessible" +}; + +char *s_strSupply[] = { + "STOPPED", + "SUPPLIED" +}; + +char *s_strPSRAM[] = { + "4MB", + "16MB", + "32MB" +}; + +char *s_strRomMode[] = { + "TWL 64KB ROM", + "NITRO 8KB ROM" + +}; + +char *s_strCpuSpeed[] = { + "67.03 MHz", + "134.06 MHz" +}; + +char *s_strRomForm[] = { + "Included ROM", + "Downloaded PROM" +}; + +char *s_strRomApp[] = { + "Mass Product", + "Development 1", + "Development 2", + "PROM Download" +}; + +char *s_strMCMode[] = { + // !!! あとで項目埋める + "00", + "01", + "10", + "11" +}; + +char *s_strEnable[] = { + "DISABLED", + "ENABLED" +}; + +char *s_strBool[] = { + "FALSE", + "TRUE" +}; + +char *s_strRatingOrg[] = { + "CERO", + "ESRB", + "BBFC", + "USK", + "PEGI general", + "PEGI Finland", + "PEGI Portugal", + "PEGI and BBFC Great Briten", + "OFLC", + "GRB" +}; + + char *s_strRegion[] = { + "JAPAN", + "AMERICA", + "EUROPA", + "AUSTRALIA", + "CHINA", + "KOREA", +}; + + char *s_strUserColor[] = { + "GRAY ", + "BROWN ", + "RED ", + "PINK ", + "ORANGE ", + "YELLOW ", + "LIME GREEN", + "GREEN ", + "DARK GREEN", + "SEA GREEN ", + "TURQUOISE ", + "BLUE ", + "DARK BLUE ", + "PURPLE ", + "VIOLET ", + "MAGENTA ", +}; + +char *s_strLanguage[] = { + "JAPANESE", + "ENGLISH", + "FRENCH", + "GERMAN", + "ITALIAN", + "SPANISH", + "CHINESE", + "KOREAN", +}; + +char *s_strCountry[] = { + "UNDEFINED ", // 未設定 + "JAPAN ", // 日本 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "Anguilla ", // アンギラ + "ANTIGUA_AND_BARBUDA", // アンティグア・バーブーダ + "ARGENTINA ", // アルゼンチン + "ARUBA", // アルバ + "BAHAMAS", // バハマ + "BARBADOS", // バルバドス + "BELIZE", // ベリーズ + "BOLIVIA", // ボリビア + "BRAZIL", // ブラジル + "BRITISH_VIRGIN_ISLANDS", // 英領ヴァージン諸島 + "CANADA", // カナダ + "CAYMAN_ISLANDS", // ケイマン諸島 + "CHILE ", // チリ + "COLOMBIA", // コロンビア + "COSTA_RICA", // コスタリカ + "DOMINICA", // ドミニカ国 + "DOMINICAN_REPUBLIC", // ドミニカ共和国 + "ECUADOR", // エクアドル + "EL_SALVADOR", // エルサルバドル + "FRENCH_GUIANA", // フランス領ギアナ + "GRENADA", // グレナダ + "GUADELOUPE", // グアドループ + "GUATEMALA ", // グアテマラ + "GUYANA", // ガイアナ + "HAITI", // ハイチ + "HONDURAS", // ホンジュラス + "JAMAICA", // ジャマイカ + "MARTINIQUE", // マルティニーク + "MEXICO", // メキシコ + "MONTSERRAT", // モントセラト + "NETHERLANDS_ANTILLES", // オランダ領アンティル + "NICARAGUA", // ニカラグア + "PANAMA ", // パナマ + "PARAGUAY", // パラグアイ + "PERU", // ペルー + "ST_KITTS_AND_NEVIS", // セントキッツ・ネイビス + "ST_LUCIA", // セントルシア + "ST_VINCENT_AND_THE_GRENADINES", // セントビンセント・グレナディーン + "SURINAME", // スリナム + "TRINIDAD_AND_TOBAGO", // トリニダード・トバゴ + "TURKS_AND_CAICOS_ISLANDS", // タークス・カイコス諸島 + "UNITED_STATES", // アメリカ + "URUGUAY ", // ウルグアイ + "US_VIRGIN_ISLANDS", // 米領バージン諸島 + "VENEZUELA", // ベネズエラ + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "ALBANIA ", // アルバニア + "AUSTRALIA", // オーストラリア + "AUSTRIA", // オーストリア + "BELGIUM", // ベルギー + "BOSNIA_AND_HERZEGOVINA", // ボスニア・ヘルツェゴビナ + "BOTSWANA", // ボツワナ + "BULGARIA ", // ブルガリア + "CROATIA", // クロアチア + "CYPRUS", // キプロス + "CZECH_REPUBLIC", // チェコ + "DENMARK", // デンマーク + "ESTONIA", // エストニア + "FINLAND", // フィンランド + "FRANCE", // フランス + "GERMANY", // ドイツ + "GREECE", // ギリシャ + "HUNGARY ", // ハンガリー + "ICELAND", // アイスランド + "IRELAND", // アイルランド + "ITALY", // イタリア + "LATVIA", // ラトビア + "LESOTHO", // レソト + "LIECHTENSTEIN", // リヒテンシュタイン + "LITHUANIA", // リトアニア + "LUXEMBOURG", // ルクセンブルク + "MACEDONIA", // マケドニア + "MALTA ", // マルタ + "MONTENEGRO", // モンテネグロ + "MOZAMBIQUE", // モザンビーク + "NAMIBIA", // ナミビア + "NETHERLANDS", // オランダ + "NEW_ZEALAND", // ニュージーランド + "NORWAY", // ノルウェー + "POLAND", // ポーランド + "PORTUGAL", // ポルトガル + "ROMANIA", // ルーマニア + "RUSSIA ", // ロシア + "SERBIA", // セルビア + "SLOVAKIA", // スロバキア + "SLOVENIA", // スロベニア + "SOUTH_AFRICA", // 南アフリカ + "SPAIN", // スペイン + "SWAZILAND", // スワジランド + "SWEDEN", // スウェーデン + "SWITZERLAND", // スイス + "TURKEY", // トルコ + "UNITED_KINGDOM ", // イギリス + "ZAMBIA", // ザンビア + "ZIMBABWE", // ジンバブエ + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "TAIWAN ", // 台湾 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "SOUTH_KOREA ", // 韓国 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "HONG_KONG ", // ホンコン + "MACAU", // マカオ + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "INDONESIA ", // インドネシア + "SINGAPORE ", // シンガポール + "THAILAND ", // タイ + "PHILIPPINES", // フィリピン + "MALAYSIA", // マレーシア + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "CHINA ", // 中国 + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UAE ", // アラブ首長国連邦 + "INDIA ", // インド + "EGYPT ", // エジプト + "OMAN", // オマーン + "QATAR", // カタール + "KUWAIT", // クウェート + "SAUDI_ARABIA", // サウジアラビア + "SYRIA", // シリア + "BAHRAIN", // バーレーン + "JORDAN", // ヨルダン + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "UNKNOWN", + "OTHERS ", + "UNKNOWN ", +}; + +char s_strNA[] = { + "N/A" +}; + diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.h b/build/tests/DisplaySystemInformation/ARM9/src/strResource.h new file mode 100644 index 00000000..3b325909 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/strResource.h @@ -0,0 +1,54 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: strResource.h + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + +#ifndef __DISPLAY_INFO_RESOURCE__ +#define __DISPLAY_INFO_RESOURCE__ + +// 各項目のページごとのオフセット値 +extern const int s_pageOffset[ROOTMENU_SIZE][MAXPAGE]; + +extern const u8 s_numMenu[]; +extern const char *s_strRootMenu[]; +extern const char *s_strMenuName[]; +extern const char *s_strOwnerMenu[]; +extern const char *s_strParentalMenu[]; +extern const char *s_strNormalHWMenu[]; +extern const char *s_strSecureHWMenu[]; +extern const char *s_strSCFGARM7Menu[]; +extern const char *s_strSCFGARM9Menu[]; +extern const char *s_strVersionMenu[]; +extern const char **s_strMetaMenu[]; +const u16 *s_strARM7RegisterName[]; +const u16 *s_strARM9RegisterName[]; +extern char *s_strEnable[]; +extern char *s_strSupply[]; +extern char *s_strRomMode[]; +extern char *s_strPSRAM[]; +extern char *s_strCpuSpeed[]; +extern char *s_strBool[]; +extern char *s_strAccess[]; +extern char *s_strRomApp[]; +extern char *s_strRomForm[]; +extern char *s_strMCMode[]; +extern char *s_strRatingOrg[]; +extern char *s_strRegion[]; +extern char *s_strUserColor[]; +extern char *s_strLanguage[]; +extern char *s_strCountry[]; +extern char s_strNA[]; + +#endif \ No newline at end of file diff --git a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c new file mode 100644 index 00000000..e19d38bd --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c @@ -0,0 +1,756 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: viewSystemInfo.c + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + +#include +#include +#include +#include +#include "misc.h" +#include "viewSystemInfo.h" +#include "strResource.h" +#include "control.h" +#include "myIoreg_SCFG.h" + +#define DISPINFO_BUFSIZE 64 +#define WL_TITLEID 0x0003000F484E4341 + +/* function prototype ----------------------------- */ +void getAllInfo( void ); +void initInfo( void ); +void infoAlloc( DispInfoEntry *p, u8 index, u8 size, BOOL isSjis ); +void printAllInfo ( void ); +void getOwnerInfo( void ); +void getParentalInfo( void ); +void getNormalHWInfo( void ); +BOOL getSecureHWInfo( void ); +void getSCFGARM9Info( void ); +void getSCFGARM7Info( void ); +void getVersions( void ); +void getWirelessVersion( void ); +void getContentsVersion( void ); +void getSharedFontVersion( void ); + + +/* global variables ----------------------------- */ + +DispInfoEntry* gAllInfo[ROOTMENU_SIZE]; // それぞれのメニューごとに項目の中身を"文字列で"持つ配列 +//u16 gUserName[OS_OWNERINFO_NICKNAME_MAX + 1]; // ユーザ名 +//u16 gUserComment[OS_OWNERINFO_COMMENT_MAX + 1]; // ユーザコメント +//u16 gSecretAnswer[OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1]; // 秘密の答え + +// コンテンツタイトル関係 +OSTitleId *gContentsTitle; // コンテンツタイトルの一覧 +s32 gNumContents; // gContentsTitleに含まれるタイトルの数 +u16 *gContentsVersion; // gContentsTitleそれぞれのバージョン情報 + +// ARM7側のSCFGデータを保持 +u8 gArm7SCFGReg[DISPINFO_SHARED_SCFG_REG_SIZE]; +u8 gArm7SCFGWram[DISPINFO_SHARED_SCFG_WRAM_SIZE]; + +/* +static OSOwnerInfoEx gOwnerInfo; // オーナー情報 +static BOOL gbWirelessAvailable; // 無線が有効かどうか +static BOOL gbBatteryExtensionAvailable; // バッテリーエクステンションモードが有効か +static BOOL gbAgreeEula; // Eula同意済みか +static u8 gEulaVersion; // 同意Eulaのバージョン +static const OSTWLParentalControl *gpPC; // ペアレンタルコントロール情報 +static u8 gUniqueID[OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN]; // ユニークId +static BOOL gbForceDisableWireless; // 無線の強制無効化フラグ +static OSTWLRegion gRegion; // リージョン番号 +static u8 gSerialNo[OS_TWL_HWINFO_SERIALNO_LEN_MAX]; // シリアル番号 +*/ + +/* static data ---------------------------------- */ + + +/* function definition -------------------------- */ + +void displayInfoMain( void ) +{ + static int menu = MENU_ROOT; + static int line = 0; // 現在選択しているページナンバと行 + + static BOOL firstCall = TRUE; // 最初の呼び出しか否か + + // 初回の呼び出し時は全ての情報を取得しなおす + if( firstCall ) + { + initInfo(); + getAllInfo(); + } + + // パッド情報で選んでる場所とか情報とか更新 + if( control( &menu, &line ) || firstCall ) + { + // 何か操作があったときはキャンバスクリアして描画しなおし + NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); + NNS_G2dCharCanvasClear( &gCanvasSub, TXT_COLOR_WHITE ); + + firstCall = FALSE; + } + + drawMenu( menu, line); // 情報一覧を描画する + drawHeader( menu, line ); +} + +void initInfo( void ) +{ + OS_TPrintf("buffer initialize\n"); + + // 固定文字列で対応できない項目に文字列領域を割り当てる + infoAlloc( gAllInfo[MENU_OWNER], OWNER_BIRTHDAY, DISPINFO_BUFSIZE , TRUE ); +// infoAlloc( gAllInfo[MENU_PARENTAL], PARENTAL_AGE, DISPINFO_BUFSIZE , TRUE ); +// infoAlloc( gAllInfo[MENU_PARENTAL], PARENTAL_QUESTION_ID, DISPINFO_BUFSIZE, TRUE ); +// infoAlloc( gAllInfo[MENU_PARENTAL], PARENTAL_PASSWORD, OS_TWL_PCTL_PASSWORD_LENGTH+1, TRUE ); +// infoAlloc( gAllInfo[MENU_NORMAL_HW], NORMAL_HW_EULA_VERSION , DISPINFO_BUFSIZE , TRUE ); +// infoAlloc( gAllInfo[MENU_NORMAL_HW], NORMAL_HW_RTC_OFFSET, DISPINFO_BUFSIZE, TRUE ); + infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_UNIQUE_ID, OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 , TRUE ); + infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_SERIAL , OS_TWL_HWINFO_SERIALNO_LEN_MAX + 1, TRUE ); + infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_LANGUAGE, DISPINFO_BUFSIZE , TRUE ); + infoAlloc( gAllInfo[MENU_SECURE_HW], SECURE_HW_FUSE, DISPINFO_BUFSIZE , TRUE ); + infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CC, DISPINFO_BUFSIZE , TRUE ); + infoAlloc( gAllInfo[MENU_SCFG_ARM7], SCFG_ARM7_MI_CA, DISPINFO_BUFSIZE , TRUE ); + + infoAlloc( gAllInfo[MENU_OWNER], OWNER_NICKNAME, OS_OWNERINFO_NICKNAME_MAX + 1 , FALSE ); + infoAlloc( gAllInfo[MENU_OWNER], OWNER_COMMENT, OS_OWNERINFO_COMMENT_MAX + 1 , FALSE ); + infoAlloc( gAllInfo[MENU_PARENTAL], PARENTAL_ANSWER, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1 , FALSE ); + + OS_TPrintf( "information alloc succeeded\n" ); + + +} + +void infoAlloc( DispInfoEntry *p, u8 index, u8 size, BOOL isSjis ) +{ + if( isSjis ) + { + p[index].str.sjis = (char*) Alloc (sizeof(char) * size); + SDK_ASSERT( p->str.sjis ); + p[index].str.sjis[size] = '\0'; + } + else + { + p[index].str.utf = (u16*) Alloc (sizeof(u16) * size); + SDK_ASSERT( p->str.utf ); + p[index].str.utf[size-1] = '\0'; + } + +} + + +void getAllInfo( void ) +// +{ + BOOL SCFGAccessable = FALSE; + BOOL fuseRomAccessable = FALSE; + + OS_TPrintf("reflesh Information\n"); + + getOwnerInfo(); + getParentalInfo(); + getNormalHWInfo(); + getSecureHWInfo(); + getSCFGARM7Info(); + getSCFGARM9Info(); + getVersions(); + + + /* + if( fuseRomAccessable ) + { + + }*/ + + printAllInfo(); + OS_TPrintf("reflesh information finished\n"); +} + +void getOwnerInfo( void ) +// オーナー情報周りを取得する +{ + OSOwnerInfoEx ownerInfo; + + OS_TPrintf( "...Owner Information\n"); + // 本体設定まわり + OS_GetOwnerInfoEx( &ownerInfo ); + + // 全体情報につめていく + // 泥臭すぎるやり方なのであとで考える + gAllInfo[MENU_OWNER][OWNER_LANGUAGE].str.sjis = s_strLanguage[ ownerInfo.language ]; + gAllInfo[MENU_OWNER][OWNER_LANGUAGE].iValue = ownerInfo.language; + + gAllInfo[MENU_OWNER][OWNER_COLOR].str.sjis = s_strUserColor[ ownerInfo.favoriteColor ]; + gAllInfo[MENU_OWNER][OWNER_COLOR].iValue = ownerInfo.favoriteColor; + + snprintf( gAllInfo[MENU_OWNER][OWNER_BIRTHDAY].str.sjis, DISPINFO_BUFSIZE-1, "%02d/%02d", ownerInfo.birthday.month, ownerInfo.birthday.day); + gAllInfo[MENU_OWNER][OWNER_BIRTHDAY].iValue = ownerInfo.birthday.month * 100 + ownerInfo.birthday.day; + + gAllInfo[MENU_OWNER][OWNER_COUNTRY].str.sjis = s_strCountry[ownerInfo.country]; + gAllInfo[MENU_OWNER][OWNER_COUNTRY].iValue = ownerInfo.country; + + wcsncpy( gAllInfo[MENU_OWNER][OWNER_NICKNAME].str.utf , ownerInfo.nickName, OS_OWNERINFO_NICKNAME_MAX + 1); + gAllInfo[MENU_OWNER][OWNER_NICKNAME].isSjis = FALSE; + wcsncpy( gAllInfo[MENU_OWNER][OWNER_COMMENT].str.utf , ownerInfo.comment, OS_OWNERINFO_COMMENT_MAX + 1 ); + gAllInfo[MENU_OWNER][OWNER_COMMENT].isSjis = FALSE; +} + +void getParentalInfo( void ) +// ペアレンタルコントロール情報を取得する +{ + // ペアレンタルコントロールまわり + const LCFGTWLParentalControl *pPC = (const LCFGTWLParentalControl *) OS_GetParentalControlInfoPtr(); + + OS_TPrintf( "...Parental Control Information\n" ); + + gAllInfo[MENU_PARENTAL][PARENTAL_FLAG].str.sjis = s_strBool[ pPC->flags.isSetParentalControl ]; + gAllInfo[MENU_PARENTAL][PARENTAL_FLAG].iValue = (int) pPC->flags.isSetParentalControl; + + gAllInfo[MENU_PARENTAL][PARENTAL_PICTOCHAT].str.sjis = s_strBool[ pPC->flags.pictoChat ]; + gAllInfo[MENU_PARENTAL][PARENTAL_PICTOCHAT].iValue = (int) pPC->flags.pictoChat; + + gAllInfo[MENU_PARENTAL][PARENTAL_DOWNLOAD].str.sjis = s_strBool[ pPC->flags.dsDownload ]; + gAllInfo[MENU_PARENTAL][PARENTAL_DOWNLOAD].iValue = (int) pPC->flags.dsDownload; + + gAllInfo[MENU_PARENTAL][PARENTAL_BROWSER].str.sjis = s_strBool[ pPC->flags.browser ]; + gAllInfo[MENU_PARENTAL][PARENTAL_BROWSER].iValue = (int) pPC->flags.browser; + + gAllInfo[MENU_PARENTAL][PARENTAL_WIIPOINT].str.sjis = s_strBool[ pPC->flags.wiiPoint ]; + gAllInfo[MENU_PARENTAL][PARENTAL_WIIPOINT].iValue = (int) pPC->flags.wiiPoint; + + gAllInfo[MENU_PARENTAL][PARENTAL_PHOTO_EXCHANGE].str.sjis = s_strBool[ pPC->flags.photoExchange ]; + gAllInfo[MENU_PARENTAL][PARENTAL_PHOTO_EXCHANGE].iValue = (int) pPC->flags.photoExchange; + + gAllInfo[MENU_PARENTAL][PARENTAL_UGC].str.sjis = s_strBool[ pPC->flags.ugc ]; + gAllInfo[MENU_PARENTAL][PARENTAL_UGC].iValue = (int) pPC->flags.ugc; + + gAllInfo[MENU_PARENTAL][PARENTAL_ORGANIZATION].str.sjis = s_strRatingOrg[ pPC->ogn ]; + gAllInfo[MENU_PARENTAL][PARENTAL_ORGANIZATION].iValue = (int) pPC->ogn; + + gAllInfo[MENU_PARENTAL][PARENTAL_AGE].iValue = pPC->ratingAge; + gAllInfo[MENU_PARENTAL][PARENTAL_AGE].isNumData = TRUE; + + gAllInfo[MENU_PARENTAL][PARENTAL_QUESTION_ID].iValue = pPC->secretQuestionID; + gAllInfo[MENU_PARENTAL][PARENTAL_QUESTION_ID].isNumData = TRUE; + + gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD].iValue = atoi( pPC->password ) ; + gAllInfo[MENU_PARENTAL][PARENTAL_PASSWORD].isNumData = TRUE; + + wcsncpy( gAllInfo[MENU_PARENTAL][PARENTAL_ANSWER].str.utf , pPC->secretAnswer, OS_TWL_PCTL_SECRET_ANSWER_LENGTH_MAX + 1); + gAllInfo[MENU_PARENTAL][PARENTAL_ANSWER].isSjis = FALSE; +} + +void getNormalHWInfo( void ) +{ + int val; + + val = OS_IsAvailableWireless(); + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_WIRELESS].iValue = val; + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_WIRELESS].str.sjis = s_strEnable[ val ]; + + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_OFFSET].iValue = (int) OS_GetOwnerRtcOffset(); + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_RTC_OFFSET].isNumData = TRUE; + + val = OS_IsAgreeEULA(); + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_AGREE_EULA].iValue = val; + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_AGREE_EULA].str.sjis = s_strBool[ val ]; + + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_EULA_VERSION].iValue = OS_GetAgreedEULAVersion(); + gAllInfo[MENU_NORMAL_HW][NORMAL_HW_EULA_VERSION].isNumData = TRUE; +} + +BOOL getSecureHWInfo( void ) +{ + gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].str.sjis = s_strBool[ OS_IsForceDisableWireless() ]; + gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].isAligned = FALSE; + gAllInfo[MENU_SECURE_HW][SECURE_HW_FORCE_DISABLE].numLines = 2; + + gAllInfo[MENU_SECURE_HW][SECURE_HW_REGION].str.sjis = s_strRegion[ OS_GetRegion() ]; + + { + int i; + char ascii[] = "0123456789abcdef"; + const u8 *unq = OS_GetMovableUniqueIDPtr(); + // 16進で1バイトずつ詰めていく + // バッファが長さの3倍長なのは、データを"%02x-%02x-%02x..."に置換するため + for(i=0; i < OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3; i += 3, unq++ ) + { + gAllInfo[MENU_SECURE_HW][SECURE_HW_UNIQUE_ID].str.sjis[i] = ascii[(*unq>>4) & 0x0f]; + gAllInfo[MENU_SECURE_HW][SECURE_HW_UNIQUE_ID].str.sjis[i+1] = ascii[*unq & 0x0f]; + gAllInfo[MENU_SECURE_HW][SECURE_HW_UNIQUE_ID].str.sjis[i+2] = + (i+2) == (OS_TWL_HWINFO_MOVABLE_UNIQUE_ID_LEN*3 - 1) ? (char)'\0' : (char)'-' ; + OS_TPrintf("uniqid: %d\n", *unq); + } + } + + { + u8 serialBuf[OS_TWL_HWINFO_SERIALNO_LEN_MAX]; + OS_GetSerialNo( serialBuf ); + snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_SERIAL].str.sjis , OS_TWL_HWINFO_SERIALNO_LEN_MAX, "%s", serialBuf); + } + + { + u64 buf; + buf = OS_GetValidLanguageBitmap(); + OS_TPrintf("language bitmap : %lx\n", buf ); + snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_LANGUAGE].str.sjis , + DISPINFO_BUFSIZE-1, "%08lx", OS_GetValidLanguageBitmap() ); + + // fuseRomデータの読み出し + // secureなアプリ以外はハード的に切り離されるのでゼロになる + buf = SCFG_ReadFuseData(); + OS_TPrintf("fuse data : %llx\n", buf); + snprintf( gAllInfo[MENU_SECURE_HW][SECURE_HW_FUSE].str.sjis , + DISPINFO_BUFSIZE-1, "%016llx", SCFG_ReadFuseData() ); + + // 返り値でセキュアアプリかどうか判定できるように + if( buf ) + { + return TRUE; + } + else + { + return FALSE; + } + } +} + +void getSCFGARM9Info( void ) +// SCFG情報を取得する +{ + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].str.sjis = + SCFG_GetSystemRomType() == SCFG_SYSTEM_ROM_FOR_NITRO ? s_strRomMode[1] : s_strRomMode[0]; + + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_CKI].str.sjis = s_strEnable[ SCFG_IsCameraCKIClockEnable() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_WRAM_CLOCK].str.sjis = s_strSupply[ SCFG_IsClockSuppliedToWram() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_CLOCK].str.sjis = s_strSupply[ SCFG_IsClockSuppliedToCamera() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_CLOCK].str.sjis = s_strSupply[ SCFG_IsClockSuppliedToDSP() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CPU_SPEED].str.sjis = + SCFG_GetCpuSpeed() == SCFG_CPU_SPEED_1X ? s_strCpuSpeed[0] : s_strCpuSpeed[1]; + + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_RESET].str.sjis = s_strBool[ SCFG_IsDSPReset() ]; + + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CFG_ACCESSIBLE].str.sjis = s_strEnable[ SCFG_IsConfigBlockAccessible() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CFG_ACCESSIBLE].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CFG_ACCESSIBLE].numLines = 2; + + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_WRAM_ACCESSIBLE].str.sjis = s_strEnable[ SCFG_IsWramAccessible() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_ACCESSIBLE].str.sjis = s_strEnable[ SCFG_IsDSPAccessible() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_ACCESSIBLE].str.sjis = s_strEnable[ SCFG_IsCameraAccessible() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_NDMA_ACCESSIBLE].str.sjis = s_strEnable[ SCFG_IsNDmaAccessible() ]; + + { + u8 idx; + + if( SCFG_GetPsramBoundary() == SCFG_PSRAM_BOUNDARY_4MB ) + { + idx = 0; + } + else if ( SCFG_GetPsramBoundary() == SCFG_PSRAM_BOUNDARY_16MB ) + { + idx = 1; + } + else if ( SCFG_GetPsramBoundary() == SCFG_PSRAM_BOUNDARY_32MB ) + { + idx = 2; + } + + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_PSRAM_BOUNDARY].str.sjis = s_strPSRAM[ idx ]; + } + + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_INTC_EXPANSION].str.sjis = s_strEnable[ SCFG_IsIntcExpanded() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_LCDC_EXPANSION].str.sjis = s_strEnable[ SCFG_IsLCDCExpanded() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_VRAM_EXPANSION].str.sjis = s_strEnable[ SCFG_IsVramExpanded() ]; + + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_CARD].str.sjis = s_strEnable[ SCFG_IsCardFixed() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_DIVIDER].str.sjis = s_strEnable[ SCFG_IsDividerFixed() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_2DENGINE].str.sjis = s_strEnable[ SCFG_Is2DEngineFixed() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_RENDERER].str.sjis = s_strEnable[ SCFG_IsRendererFixed() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_GEOMETRY].str.sjis = s_strEnable[ SCFG_IsGeometryFixed() ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_DMA].str.sjis = s_strEnable[ SCFG_IsDmacFixed() ]; + +} + +void getSCFGARM7Info( void ) +{ + // 必要なデータは全てgARM7SCFGReg, gARM7SCFGWramで確保済 + + // ROM制御レジスタ(L)、(H) + { + // SECフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可) + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].str.sjis = + gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_SEC_MASK ? s_strAccess[0]: s_strAccess[1]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].str.sjis = + gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_RSEL_MASK ? s_strRomMode[1]: s_strRomMode[0]; + + // SECフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可) + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].str.sjis = + gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_SEC_MASK ? s_strAccess[0]: s_strAccess[1]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].str.sjis = + gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_RSEL_MASK ? s_strRomMode[1]: s_strRomMode[0]; + + // FuseROMフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可) + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].str.sjis = + gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_FUSE_MASK ? s_strAccess[0]: s_strAccess[1]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].str.sjis = + gArm7SCFGReg[DISP_REG_ROMWE_OFFSET - 0x4000] & DISP_REG_SCFG_ROMWE_WE_MASK ? s_strEnable[1]: s_strEnable[0]; + } + + // 新規ブロッククロック制御レジスタ + { + u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_CLK_OFFSET - 0x4000] ); + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].str.sjis = + flag & DISP_REG_SCFG_CLK_SD1HCLK_MASK ? s_strSupply[1]: s_strSupply[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].str.sjis = + flag & DISP_REG_SCFG_CLK_SD2HCLK_MASK ? s_strSupply[1]: s_strSupply[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].str.sjis = + flag & DISP_REG_SCFG_CLK_AESHCLK_MASK ? s_strSupply[1]: s_strSupply[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].str.sjis = + flag & DISP_REG_SCFG_CLK_WRAMHCLK_MASK ? s_strSupply[1]: s_strSupply[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].str.sjis = + flag & DISP_REG_SCFG_CLK_SNDMCLK_MASK ? s_strSupply[1]: s_strSupply[0]; + } + + // JTAG制御レジスタ + { + u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_JTAG_OFFSET - 0x4000] ); + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].str.sjis = + flag & DISP_REG_SCFG_JTAG_ARM7SEL_MASK ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].numLines = 2; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].str.sjis = + flag & DISP_REG_SCFG_JTAG_CPUJE_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].str.sjis = + flag & DISP_REG_SCFG_JTAG_DSPJE_MASK ? s_strEnable[1]: s_strEnable[0]; + } + + // 拡張機能制御レジスタ + { + u32 flag = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_EXT_OFFSET - 0x4000] ); + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].str.sjis = + flag & DISP_REG_SCFG_EXT_DMA_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].str.sjis = + flag & DISP_REG_SCFG_EXT_SDMA_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].str.sjis = + flag & DISP_REG_SCFG_EXT_SND_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].str.sjis = + flag & DISP_REG_SCFG_EXT_MC_MASK ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].numLines = 2; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].str.sjis = + flag & DISP_REG_SCFG_EXT_INTC_MASK ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].numLines = 2; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].str.sjis = + flag & DISP_REG_SCFG_EXT_SPI_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].str.sjis = + flag & DISP_REG_SCFG_EXT_DSEL_MASK ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].numLines = 2; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].str.sjis = + flag & DISP_REG_SCFG_EXT_SIO_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].str.sjis = + flag & DISP_REG_SCFG_EXT_LCDC_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].str.sjis = + flag & DISP_REG_SCFG_EXT_VRAM_MASK ? s_strEnable[1]: s_strEnable[0]; + + { + u32 psFlag = (flag & DISP_REG_SCFG_EXT_PSRAM_MASK) >> DISP_REG_SCFG_EXT_PSRAM_SHIFT; + u8 idx = 0; + + if( psFlag <= 1 ) + { + idx = 0; + } + else if ( psFlag == 2 ) + { + idx = 1; + } + else if ( psFlag == 3 ) + { + idx = 2; + } + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PS].str.sjis = s_strPSRAM[idx]; + } + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].str.sjis = + flag & DISP_REG_SCFG_EXT_DMAC_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].str.sjis = + flag & DISP_REG_SCFG_EXT_AES_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].str.sjis = + flag & DISP_REG_SCFG_EXT_SD1_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].str.sjis = + flag & DISP_REG_SCFG_EXT_SD2_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].str.sjis = + flag & DISP_REG_SCFG_EXT_MIC_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].str.sjis = + flag & DISP_REG_SCFG_EXT_I2S_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].str.sjis = + flag & DISP_REG_SCFG_EXT_I2C_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].str.sjis = + flag & DISP_REG_SCFG_EXT_GPIO_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].str.sjis = + flag & DISP_REG_SCFG_EXT_MC_B_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].str.sjis = + flag & DISP_REG_SCFG_EXT_WRAM_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].str.sjis = + flag & DISP_REG_SCFG_EXT_PUENABLE_MASK ? s_strEnable[1]: s_strEnable[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].str.sjis = + flag & DISP_REG_SCFG_EXT_CFG_MASK ? s_strEnable[1]: s_strEnable[0]; + + } + + // メモリカード I/F 制御レジスタ + { + u16 flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC_OFFSET - 0x4000] ); + u8 idx; + + OS_TPrintf("mc flag: %04x\n", flag ); + OS_TPrintf("flag & SC1 cdet mask: %d\n", flag & DISP_REG_MI_MC_SL1_CDET_MASK ); + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].str.sjis = + flag & DISP_REG_MI_MC_SL1_CDET_MASK ? s_strBool[1]: s_strBool[0]; + + OS_TPrintf("mi SC1 cdet: %s\n", gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].str.sjis ); + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].str.sjis = + flag & DISP_REG_MI_MC_SL2_CDET_MASK ? s_strBool[1]: s_strBool[0]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].str.sjis = + flag & DISP_REG_MI_MC_SWP_MASK ? s_strBool[1]: s_strBool[0]; + + idx = (u8) ( (flag & DISP_REG_MI_MC_SL1_MODE_MASK) >> DISP_REG_MI_MC_SL1_MODE_SHIFT ); + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].str.sjis = s_strMCMode[idx]; + + idx = (u8) ( (flag & DISP_REG_MI_MC_SL2_MODE_MASK) >> DISP_REG_MI_MC_SL2_MODE_SHIFT ); + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_MODE].str.sjis = s_strMCMode[idx]; + + flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MCCHAT_OFFSET - 0x4000] ); + snprintf( gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CC].str.sjis , DISPINFO_BUFSIZE-1, "%04x", + flag & DISP_REG_MI_MCCHAT_CC_MASK); + + flag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_MC2_OFFSET - 0x4000] ); + snprintf( gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_CA].str.sjis , DISPINFO_BUFSIZE-1, "%04x", + flag & DISP_REG_MI_MC2_CA_MASK ); + + } + + // 旧無線送受信制御レジスタ + { + u8 flag = gArm7SCFGReg[DISP_REG_WL_OFFSET - 0x4000]; + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].str.sjis = + flag & DISP_REG_SCFG_WL_OFFB_MASK ? s_strEnable[1]: s_strEnable[0]; + + } + + + // オプション端子読み出しレジスタ + { + + u8 flag = gArm7SCFGReg[DISP_REG_OP_OFFSET - 0x4000]; + u8 idx = (u8)(flag & DISP_REG_SCFG_OP_OPT_MASK); + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_FORM].str.sjis = idx == 3 ? s_strRomForm[1] : s_strRomForm[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_OP_APP].str.sjis = s_strRomApp[idx]; + } + +} + + +void getVersions( void ) +{ + getWirelessVersion(); + getSharedFontVersion(); + getContentsVersion(); +} + +void getWirelessVersion( void ) +// 無線ファームウェアのバージョンを取得する +{ + FSFile file; + char filePath[NAM_PATH_LEN+1]; + char filebuf[2]; // FWバージョンはMajor, Minorそれぞれ1バイトずつ + int res; + + FS_InitFile( &file ); + NAM_GetTitleBootContentPath( filePath , WL_TITLEID); // 無線ファームのファイルパスを取得 + + res = FS_OpenFileEx( &file, filePath, FS_FILEMODE_R ); + + // バージョン情報の読み取り + FS_SeekFile( &file, 0xA0, FS_SEEK_SET ); // ファイルの0xA0から2バイトがバージョン情報 + res = FS_ReadFile( &file, filebuf, 2 ); + SDK_ASSERT( res == 2 ); + + gAllInfo[MENU_VERSION][VERSION_WIRELESS].iValue = filebuf[0] *100 + filebuf[1]; + gAllInfo[MENU_VERSION][VERSION_WIRELESS].isNumData = TRUE; +} + +void getSharedFontVersion( void ) +{ + u32 time = OS_GetSharedFontTimestamp(); + gAllInfo[MENU_VERSION][VERSION_FONT].iValue = (int) time; + gAllInfo[MENU_VERSION][VERSION_FONT].isNumData = TRUE; +} + +void getContentsVersion( void ) +// コンテンツリストをもとに各コンテンツのタイトルIDとバージョンを取得 +{ + NAMTitleInfo info; + int i; + + gNumContents = NAM_GetNumTitles(); + + if( gContentsTitle == NULL ) + { + // 初回処理の時はバッファを確保 + gContentsTitle = (NAMTitleId*) Alloc( sizeof(NAMTitleId) * gNumContents ); + gContentsVersion = (u16*) Alloc( sizeof(u16) * (u32)gNumContents); + } + + NAM_GetTitleList( gContentsTitle, (u32)gNumContents); + SDK_POINTER_ASSERT( gContentsTitle ); + + for( i=0; iisNumData ) + { + OS_TPrintf("%d %d : %d\n", loop1, loop2, entry->iValue); + } + else if( entry->isSjis ) + { + OS_TPrintf("%d %d : %s\n", loop1, loop2, entry->str.sjis); + } + else + { + OS_TPrintf("%d %d : %s\n", loop1, loop2, entry->str.utf); + } + + /* + // utf16で描画するものだけ分ける + if(loop1 == MENU_OWNER && loop2 == OWNER_NICKNAME) + { + OS_TPrintf("%d %d : %s\n", loop1, loop2, gUserName); + } + else if(loop1 == MENU_OWNER && loop2 == OWNER_COMMENT) + { + OS_TPrintf("%d %d : %s\n", loop1, loop2, gUserComment); + } + else if(loop1 == MENU_PARENTAL && loop2 == PARENTAL_ANSWER) + { + OS_TPrintf("%d %d : %s\n", loop1, loop2, gSecretAnswer); + } + else + { + OS_TPrintf("%d %d : %s\n", loop1, loop2, gAllInfo[loop1][loop2]); + } + */ + } + } +} + diff --git a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h new file mode 100644 index 00000000..b3efea61 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h @@ -0,0 +1,76 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: viewSystemInfo.h + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + +#ifndef __LOAD_VIEW_INFO__ +#define __LOAD_VIEW_INFO__ + +#include +#include "drawFunc.h" +#include "address.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//////////////////////////////// + +typedef struct DispInfoEntry +{ + BOOL isNumData; // 表示するときは数値データか文字列データか + BOOL isSjis; // UTF16で描画するデータだけFALSE isNumData=TRUEなら未定義 + BOOL isAligned; // 一列に表示できるならTRUE、字下げが必要ならFALSE + int numLines; // 項目名、項目内容を表示するのに必要な行数 + + const char *kind; // 項目名 + + union { + char* sjis; + u16* utf; + } str; + + int iValue; // データの数値型表現(インデクスとか) + BOOL changable; // その値が変更可能か否か +} DispInfoEntry; + + +//////////////////////////////// + +// 各種本体、ユーザ情報 +extern DispInfoEntry* gAllInfo[ROOTMENU_SIZE]; + +extern s32 gNumContents; +extern OSTitleId *gContentsTitle; +extern u16 *gContentsVersion; + +extern u8 gArm7SCFGReg[DISPINFO_SHARED_SCFG_REG_SIZE]; // ARM7からのデータ取得用バッファ +extern u8 gArm7SCFGWram[DISPINFO_SHARED_SCFG_WRAM_SIZE]; // ARM7からのデータ取得用バッファ + +//////////////////////////////// + +void displayInfoMain( void ); +void displayInfoInit( void ); + +//////////////////////////////// + + + + +#ifdef __cplusplus +} +#endif + +#endif // __LOAD_VIEW_INFO__ diff --git a/build/tests/DisplaySystemInformation/Makefile b/build/tests/DisplaySystemInformation/Makefile new file mode 100644 index 00000000..5ae69c3e --- /dev/null +++ b/build/tests/DisplaySystemInformation/Makefile @@ -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:: $ +# $Rev$ +# $Author$ +#---------------------------------------------------------------------------- + +include $(TWLSDK_ROOT)/build/buildtools/commondefs + +#---------------------------------------------------------------------------- + +SUBDIRS = banner ARM7 ARM9 + +#---------------------------------------------------------------------------- + +include $(TWLSDK_ROOT)/build/buildtools/modulerules + + +#===== End of Makefile ===== diff --git a/build/tests/DisplaySystemInformation/banner/Makefile b/build/tests/DisplaySystemInformation/banner/Makefile new file mode 100644 index 00000000..1f8aa1d4 --- /dev/null +++ b/build/tests/DisplaySystemInformation/banner/Makefile @@ -0,0 +1,49 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlIPL +# File: Makefile +# +# Copyright 2007 Nintendo. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev$ +# $Author$ +#---------------------------------------------------------------------------- + +include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs + +ICON_DIR = ./icon + +BANNER_ICON = $(ICON_DIR)/gameIcon.bmp +BANNER_SPEC = banner_v3.bsf + +TARGETS = banner.bnr +INSTALL_DIR = ./ +INSTALL_TARGETS = $(TARGETS) + +BANNER_ICON_NAME = $(basename $(BANNER_ICON)) + +LDIRT_CLEAN = $(TARGETS) \ + $(BANNER_ICON_NAME).nbfs \ + $(BANNER_ICON_NAME).nbfc \ + $(BANNER_ICON_NAME).nbfp \ + $(TARGETS:.bnr=.srl) + +include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules + +#---------------------------------------------------------------------------- +# build +#---------------------------------------------------------------------------- +do-build: $(TARGETS) + +$(TARGETS): $(BANNER_SPEC) $(BANNER_ICON) + $(NTEXCONV) -no -bg -bgb -bgnc $(BANNER_ICON) >/dev/null && \ + $(MAKEBANNER) -N $(BANNER_ICON_NAME) $(BANNER_SPEC) $(TARGETS) + +# diff --git a/build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp b/build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp new file mode 100644 index 00000000..8ec56f1c Binary files /dev/null and b/build/tests/DisplaySystemInformation/banner/icon/gameIcon.bmp differ diff --git a/build/tests/DisplaySystemInformation/common/include/address.h b/build/tests/DisplaySystemInformation/common/include/address.h new file mode 100644 index 00000000..4eeaf221 --- /dev/null +++ b/build/tests/DisplaySystemInformation/common/include/address.h @@ -0,0 +1,28 @@ +/*---------------------------------------------------------------------------* + Project: TwlIPL - tests - DisplaySystemInformation + File: main.c + + Copyright **** Nintendo. All rights reserved. + + These coded instructions, statements, and computer programs contain + proprietary information of Nintendo of America Inc. and/or Nintendo + Company Ltd., and are protected by Federal copyright law. They may + not be disclosed to third parties or copied or duplicated in any form, + in whole or in part, without the prior written consent of Nintendo. + + $Date:: $ + $Rev:$ + $Author:$ + *---------------------------------------------------------------------------*/ + +#ifndef __DISP_INFO_ADDRESS_H__ +#define __DISP_INFO_ADDRESS_H__ + +#include + +#define DISPINFO_SHARED_SCFG_REG_ADDR (void*)0x02fff000 +#define DISPINFO_SHARED_SCFG_REG_SIZE 0x26U +#define DISPINFO_SHARED_SCFG_WRAM_ADDR (void*)0x02fff030 +#define DISPINFO_SHARED_SCFG_WRAM_SIZE 0x06U + +#endif \ No newline at end of file