From 724f0a66c7e47cffd9069797826a0dd8ae3e4b15 Mon Sep 17 00:00:00 2001 From: aoki_ryoma Date: Thu, 17 Jul 2008 04:56:36 +0000 Subject: [PATCH] git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1930 b08762b0-b915-fc4b-9d8c-17b2551a87ff --- .../ARM7_racoon/Makefile | 84 ++ .../ARM7_racoon/racoon.lcf.template | 928 ++++++++++++++++ .../ARM7_racoon/racoon.lsf | 232 ++++ .../ARM7_racoon/racoon.response.template | 40 + .../ARM7_racoon/src/initScfg.c | 108 ++ .../ARM7_racoon/src/main.c | 992 ++++++++++++++++++ .../DisplaySystemInformation/ARM9/Makefile | 21 +- .../ARM9/src/control.c | 127 ++- .../ARM9/src/control.h | 8 +- .../ARM9/src/drawFunc.c | 269 +++-- .../ARM9/src/drawFunc.h | 53 +- .../DisplaySystemInformation/ARM9/src/main.c | 7 +- .../ARM9/src/strResource.c | 14 +- .../ARM9/src/strResource.h | 6 +- .../ARM9/src/viewSystemInfo.c | 686 ++++++++---- .../ARM9/src/viewSystemInfo.h | 26 +- build/tests/DisplaySystemInformation/Makefile | 2 +- 17 files changed, 3229 insertions(+), 374 deletions(-) create mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/Makefile create mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template create mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf create mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template create mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c create mode 100644 build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile b/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile new file mode 100644 index 00000000..2917e382 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7_racoon/Makefile @@ -0,0 +1,84 @@ +#! make -f +#---------------------------------------------------------------------------- +# Project: TwlSDK - components - racoon.TWL +# 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$ +#---------------------------------------------------------------------------- + +override TARGET_PLATFORM = TWL +override TWL_PROC = ARM7 +override TWL_ARCHGEN = LIMITED +TWL_NO_STD_PCHDR = True +TWL_CODEGEN ?= ALL + +#---------------------------------------------------------------------------- + +SRCDIR += ./src + +SRCS = main.c initScfg.c + +TARGET_NAME = racoon + +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.LTD.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 + +ifeq ($(TWL_PLATFORM),BB) +MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037e0000' +else +MAKELCF_FLAGS += -DADDRESS_LTDWRAM='0x037c0000' +endif + +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 +#-------------------------------- +LINCLUDES = $(ROOT)/build/libraries/spi/ARM7/include\ + $(DISP_INFO)/common/include +#LLIBRARIES += libwl_sp.TWL.LTD.a libsdio_hcd_twl$(TWL_LIBSUFFIX).a libsdio_busdriver$(TWL_LIBSUFFIX).a libsdio_lib$(TWL_LIBSUFFIX).a libARM7athdrv$(TWL_LIBSUFFIX).a +LLIBRARIES += libwl_sp.TWL.LTD.a +#LLIBRARIES += libwl_sp$(TWL_LIBSUFFIX).a \ +# libcdc_sp$(TWL_LIBSUFFIX).a \ +# libtpex_sp$(TWL_LIBSUFFIX).a \ +# libmicex_sp$(TWL_LIBSUFFIX).a \ +# libsdio_hcd_twl$(TWL_LIBSUFFIX).a \ +# libsdio_busdriver$(TWL_LIBSUFFIX).a \ +# libsdio_lib$(TWL_LIBSUFFIX).a \ +# librompatch_sp$(TWL_LIBSUFFIX).a \ +# libARM7athdrv$(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_racoon/racoon.lcf.template b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template new file mode 100644 index 00000000..58bcf2a1 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lcf.template @@ -0,0 +1,928 @@ +#--------------------------------------------------------------------------- +# Project: TwlSDK - components - racoon.TWL +# File: racoon.lcf.template +# +# Copyright 2007 Nintendo. All rights reserved. +# +# These coded instructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev$ +# $Author$ +#--------------------------------------------------------------------------- +MEMORY +{ + (RWX) : ORIGIN = , LENGTH = 0x0 > + + + (RWX) : ORIGIN = , LENGTH = 0x0 >> + + binary.AUTOLOAD_INFO (RWX) : ORIGIN = 0, LENGTH = 0x0 >> + binary.STATIC_FOOTER (RWX) : ORIGIN = 0, LENGTH = 0x0 >> + + F (RW) : ORIGIN = 0, LENGTH = 0x0 > + F (RW) : ORIGIN = 0, LENGTH = 0x0 > + + (RWXO): ORIGIN = , LENGTH = 0x0 > + + + check.WORKRAM (RWX) : ORIGIN = 0x037c0000, LENGTH = 0x50000 > workram.check + + 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 > + L (RW) : ORIGIN = 0, LENGTH = 0x0 > + + (RWXO): ORIGIN = , LENGTH = 0x0 > + + + check.LTDMAIN (RWX) : ORIGIN = 0x02f88000, LENGTH = 0x74000 > ltdmain.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 =.; + SDK_STATIC_TEXT_START =.; + #:::::::::: text/rodata + OBJECT(_start,*) + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_STATIC_SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_STATIC_SINIT_END =.; + #:::::::::: text/rodata + SDK_STATIC_TEXT_END =.; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(4); + SDK_STATIC_DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + #:::::::::: data + SDK_STATIC_DATA_END =.; + . = ALIGN(4); + SDK_STATIC_END =.; + + SDK_STATIC_TEXT_SIZE = SDK_STATIC_TEXT_END - SDK_STATIC_TEXT_START; + SDK_STATIC_DATA_SIZE = SDK_STATIC_DATA_END - SDK_STATIC_DATA_START; + SDK_STATIC_SIZE = SDK_STATIC_END - SDK_STATIC_START; + __sinit__ = SDK_STATIC_SINIT_START; # for static initializer + + } > + + ..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 =.; + #:::::::::: bss + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(4); + SDK_STATIC_BSS_END = .; + + SDK_STATIC_BSS_SIZE = SDK_STATIC_BSS_END - SDK_STATIC_BSS_START; + + } >> + + + ############################ AUTOLOADS ############################## + SDK_AUTOLOAD.WRAM.START = 0x037c0000; + SDK_AUTOLOAD.WRAM.END = SDK_AUTOLOAD.WRAM.START; + SDK_AUTOLOAD.WRAM.BSS_END = SDK_AUTOLOAD.WRAM.START; + SDK_AUTOLOAD.WRAM.SIZE = 0; + SDK_AUTOLOAD.WRAM.BSS_SIZE = 0; + SDK_AUTOLOAD_START = SDK_STATIC_END; + SDK_AUTOLOAD_SIZE = 0; + SDK_AUTOLOAD_NUMBER = ; + + + .: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # TEXT BLOCK: READ ONLY + # + SDK_AUTOLOAD__ID =; + SDK_AUTOLOAD..ID =; + SDK_AUTOLOAD..START =.; + SDK_AUTOLOAD..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + . = ALIGN(4); + SDK_STATIC_ETABLE_START =.; + __exception_table_start__ =.; + EXCEPTION + __exception_table_end__ =.; + SDK_STATIC_ETABLE_END =.; + + + + + + + + + + + + + + . = ALIGN(4); + SDK_AUTOLOAD..SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_AUTOLOAD..SINIT_END =.; + #:::::::::: text/rodata + SDK_AUTOLOAD..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE BLOCK + # + . = ALIGN(4); + SDK_AUTOLOAD..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + + + + + + + + + + + + + #:::::::::: data + SDK_AUTOLOAD..DATA_END =.; + . = ALIGN(4); + SDK_AUTOLOAD..END =.; + + SDK_AUTOLOAD..TEXT_SIZE = SDK_AUTOLOAD..TEXT_END - SDK_AUTOLOAD..TEXT_START; + SDK_AUTOLOAD..DATA_SIZE = SDK_AUTOLOAD..DATA_END - SDK_AUTOLOAD..DATA_START; + SDK_AUTOLOAD..SIZE = SDK_AUTOLOAD..END - SDK_AUTOLOAD..START; + SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SDK_AUTOLOAD..SIZE; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_AUTOLOAD..BSS_START = .; + #:::::::::: bss + + + + + + + + + + + + + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(4); + SDK_AUTOLOAD..BSS_END = .; + + SDK_AUTOLOAD..BSS_SIZE = SDK_AUTOLOAD..BSS_END - SDK_AUTOLOAD..BSS_START; + + } >> + + + + SDK_AUTOLOAD_WRAM_START = SDK_AUTOLOAD.WRAM.START; + SDK_AUTOLOAD_WRAM_END = SDK_AUTOLOAD.WRAM.END; + SDK_MOUNT_INFO_TABLE = SDK_AUTOLOAD.WRAM.BSS_END; + SDK_AUTOLOAD_WRAM_BSS_END = SDK_MOUNT_INFO_TABLE + 0x400; + SDK_AUTOLOAD_WRAM_SIZE = SDK_AUTOLOAD.WRAM.SIZE; + SDK_AUTOLOAD_WRAM_BSS_SIZE = SDK_AUTOLOAD.WRAM.BSS_SIZE; + + ############################ AUTOLOAD_INFO ########################## + .binary.AUTOLOAD_INFO: + { + + WRITEW ADDR(.); + WRITEW SDK_AUTOLOAD..SIZE; + WRITEW SDK_AUTOLOAD..SINIT_START; + WRITEW SDK_AUTOLOAD..BSS_SIZE; + + + } > binary.AUTOLOAD_INFO + + SDK_AUTOLOAD_LIST = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE; + SDK_AUTOLOAD_LIST_END = SDK_AUTOLOAD_START + SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); + SDK_AUTOLOAD_SIZE = SDK_AUTOLOAD_SIZE + SIZEOF(.binary.AUTOLOAD_INFO); + + ############################ STATIC_FOOTER ########################## + .binary.STATIC_FOOTER: + { + WRITEW 0xdec00621; # LE(0x2106C0DE) = NITRO CODE + WRITEW _start_ModuleParams - ADDR(.); + WRITEW 0; # NO DIGEST + WRITEW _start_LtdModuleParams - ADDR(.); + } > binary.STATIC_FOOTER + + ############################ OVERLAYS ############################### + SDK_OVERLAY_NUMBER = ; + + + .: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # TEXT BLOCK: READ ONLY + # + SDK_OVERLAY__ID =; ### SEGMENT OVERLAY ID + SDK_OVERLAY..ID =; + SDK_OVERLAY..START =.; + SDK_OVERLAY..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_OVERLAY..SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_OVERLAY..SINIT_END =.; + #:::::::::: text/rodata + SDK_OVERLAY..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(4); + SDK_OVERLAY..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + #:::::::::: data + SDK_OVERLAY..DATA_END =.; + . = ALIGN(4); + SDK_OVERLAY..END =.; + + SDK_OVERLAY..TEXT_SIZE = SDK_OVERLAY..TEXT_END - SDK_OVERLAY..TEXT_START; + SDK_OVERLAY..DATA_SIZE = SDK_OVERLAY..DATA_END - SDK_OVERLAY..DATA_START; + SDK_OVERLAY..SIZE = SDK_OVERLAY..END - SDK_OVERLAY..START; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_OVERLAY..BSS_START = .; + #:::::::::: bss + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(4); + SDK_OVERLAY..BSS_END = .; + + SDK_OVERLAY..BSS_SIZE = SDK_OVERLAY..BSS_END - SDK_OVERLAY..BSS_START; + + } >> + + + + ############################ OVERLAYDEFS ############################ + .F: + { + ### module information + WRITEW ADDR(.); # load address + WRITEW _start; # entry address + WRITEW SDK_STATIC_SIZE + SDK_AUTOLOAD_SIZE; # size of module + WRITEW _start_AutoloadDoneCallback; # callback autoload done + + ### overlay filename + + WRITES (""); # Overlay + + + } > F + + ############################ OVERLAYTABLE ########################### + .F: + { + + WRITEW ; # overlay ID + WRITEW ADDR(.); # load address + WRITEW SDK_OVERLAY..SIZE; # size of module + WRITEW SDK_OVERLAY..BSS_SIZE; # size of bss + WRITEW SDK_OVERLAY..SINIT_START; # start address of static init + WRITEW SDK_OVERLAY..SINIT_END; # end address of static init + WRITEW ; # ROM file ID + WRITEW 0; # Reserved + + + } > F + + ############################ OTHERS ################################# + SDK_WRAM_ARENA_LO = SDK_AUTOLOAD_WRAM_BSS_END; + + 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_AUTOLOAD_WRAM_BSS_END - SDK_AUTOLOAD.WRAM.START + 0x080 + SDK_IRQ_STACKSIZE + SDK_SYS_STACKSIZE * SDK_SYS_STACKSIZE_SIGN; + + } > check.WORKRAM + + ########################### LTDAUTOLOADS ############################ + SDK_LTDAUTOLOAD.LTDMAIN.START = 0x02f88000; + SDK_LTDAUTOLOAD.LTDMAIN.END = SDK_LTDAUTOLOAD.LTDMAIN.START; + SDK_LTDAUTOLOAD.LTDMAIN.BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.START; + SDK_LTDAUTOLOAD.LTDMAIN.SIZE = 0; + SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE = 0; + SDK_LTDAUTOLOAD_TOP_START = 0x02e80000; + SDK_LTDAUTOLOAD_TOP_SIZE = 4; # STATIC 領域が無い代わりに 4 bytes のダミーがバイナリファイルの先頭に入る # + SDK_LTDAUTOLOAD_START = SDK_LTDAUTOLOAD_TOP_START + SDK_LTDAUTOLOAD_TOP_SIZE; + SDK_LTDAUTOLOAD_SIZE = 0; + SDK_LTDAUTOLOAD_NUMBER = ; + + .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 ; + + + SDK_LTDAUTOLOAD__ID =; + SDK_LTDAUTOLOAD..ID =; + SDK_LTDAUTOLOAD..START =.; + # + # TEXT BLOCK: READ ONLY + # + SDK_LTDAUTOLOAD..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_LTDAUTOLOAD..SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_LTDAUTOLOAD..SINIT_END =.; + #:::::::::: text/rodata + SDK_LTDAUTOLOAD..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE BLOCK + # + . = ALIGN(4); + SDK_LTDAUTOLOAD..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + + + + + + + + + + + + + #:::::::::: data + SDK_LTDAUTOLOAD..DATA_END =.; + . = ALIGN(4); + SDK_LTDAUTOLOAD..END =.; + + SDK_LTDAUTOLOAD..TEXT_SIZE = SDK_LTDAUTOLOAD..TEXT_END - SDK_LTDAUTOLOAD..TEXT_START; + SDK_LTDAUTOLOAD..DATA_SIZE = SDK_LTDAUTOLOAD..DATA_END - SDK_LTDAUTOLOAD..DATA_START; + 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 =.; + #:::::::::: bss + + + + + + + + + + + + + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(4); + SDK_LTDAUTOLOAD..BSS_END =.; + + SDK_LTDAUTOLOAD..BSS_SIZE = SDK_LTDAUTOLOAD..BSS_END - SDK_LTDAUTOLOAD..BSS_START; + + } >> + + + + SDK_LTDAUTOLOAD_LTDMAIN_START = SDK_LTDAUTOLOAD.LTDMAIN.START; + SDK_LTDAUTOLOAD_LTDMAIN_END = SDK_LTDAUTOLOAD.LTDMAIN.END; + SDK_LTDAUTOLOAD_LTDMAIN_BSS_END = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; + SDK_LTDAUTOLOAD_LTDMAIN_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.SIZE; + SDK_LTDAUTOLOAD_LTDMAIN_BSS_SIZE = SDK_LTDAUTOLOAD.LTDMAIN.BSS_SIZE; + + ######################### LTDAUTOLOAD_INFO ########################## + .binary.LTDAUTOLOAD_INFO: + { + + 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); + + ########################### LTDOVERLAYS ############################# + SDK_LTDOVERLAY_NUMBER = ; + + + .: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + SDK_LTDOVERLAY__ID =; + SDK_LTDOVERLAY..ID =; + SDK_LTDOVERLAY..START =.; + # + # TEXT BLOCK: READ ONLY + # + SDK_LTDOVERLAY..TEXT_START =.; + #:::::::::: text/rodata + + + + + + + + + + + + + + + + + + + . = ALIGN(4); + SDK_LTDOVERLAY..SINIT_START =.; + #:::::::::: ctor + + + + + + + + + + + + + WRITEW 0; + #:::::::::: ctor + SDK_LTDOVERLAY..SINIT_END =.; + #:::::::::: text/rodata + SDK_LTDOVERLAY..TEXT_END =.; + + # + # DATA BLOCK: READ WRITE + # + . = ALIGN(4); + SDK_LTDOVERLAY..DATA_START =.; + #:::::::::: data + + + + + + + + + + + + + #:::::::::: data + SDK_LTDOVERLAY..DATA_END =.; + . = ALIGN(4); + SDK_LTDOVERLAY..END =.; + + SDK_LTDOVERLAY..TEXT_SIZE = SDK_LTDOVERLAY..TEXT_END - SDK_LTDOVERLAY..TEXT_START; + SDK_LTDOVERLAY..DATA_SIZE = SDK_LTDOVERLAY..DATA_END - SDK_LTDOVERLAY..DATA_START; + SDK_LTDOVERLAY..SIZE = SDK_LTDOVERLAY..END - SDK_LTDOVERLAY..START; + + } > + + ..bss: + { + ALIGNALL(4); + . = ALIGN(4); + + # + # Definition to refer overlay segment, when same name symbols exist in multiple overlays. + # + + SEARCH_SYMBOL ; + + + # + # BSS BLOCK + # + SDK_LTDOVERLAY..BSS_START =.; + #:::::::::: bss + + + + + + + + + + + + + #:::::::::: bss + . = ALIGN(4); + SDK_LTDOVERLAY..BSS_END =.; + + SDK_LTDOVERLAY..BSS_SIZE = SDK_LTDOVERLAY..BSS_END - SDK_LTDOVERLAY..BSS_START; + + } >> + + + + ########################## 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 + + ### TWL limited overlay filename + + WRITES (""); + + + } > L + + ######################### LTDOVERLAYTABLE ########################### + .L: + { + + WRITES # overlay ID + WRITEW ADDR(.); # load address + WRITEW SDK_LTDOVERLAY..SIZE; # size of module + WRITEW SDK_LTDOVERLAY..BSS_SIZE; # size of bss + WRITEW SDK_LTDOVERLAY..SINIT_START; # start address of static init + WRITEW SDK_LTDOVERLAY..SINIT_END; # end address of static init + WRITEW # ROM file ID + WRITEW 0; # Reserved + + + } > L + + ############################ OTHERS ################################# + SDK_SUBPRIV_ARENA_LO = SDK_LTDAUTOLOAD.LTDMAIN.BSS_END; + .check.LTDMAIN: + { + . = SDK_SUBPRIV_ARENA_LO; + + } > check.LTDMAIN + +} diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf new file mode 100644 index 00000000..f15f1c31 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.lsf @@ -0,0 +1,232 @@ +#---------------------------------------------------------------------------- +# Project: TwlSDK - components - racoon.TWL +# File: racoon.lsf +# +# Copyright 2007 Nintendo. All rights reserved. +# +# These coded insructions, statements, and computer programs contain +# proprietary information of Nintendo of America Inc. and/or Nintendo +# Company Ltd., and are protected by Federal copyright law. They may +# not be disclosed to third parties or copied or duplicated in any form, +# in whole or in part, without the prior written consent of Nintendo. +# +# $Date:: $ +# $Rev$ +# $Author$ +#---------------------------------------------------------------------------- +# +# Nitro LCF SPEC FILE +# +#-------- +Static $(TARGET_NAME) +{ + Address 0x02380000 + Library $(CRT0_O) + Object $(OBJDIR)/initScfg.o + StackSize 1024 1024 +} + +#-------- +Autoload WRAM +{ + Address $(ADDRESS_LTDWRAM) + + Library libsubpsyscall.a \ + libsyscall_sp.twl.a \ + $(CW_LIBS) \ + libos_sp$(LIBSUFFIX).a \ + libmi_sp$(LIBSUFFIX).a \ + libpad_sp$(LIBSUFFIX).a \ + libpxi_sp$(LIBSUFFIX).a \ + libstd_sp$(LIBSUFFIX).a \ + libexi_sp$(LIBSUFFIX).a \ + libsnd_sp$(LIBSUFFIX).a \ + libspi_sp$(LIBSUFFIX).a \ + libpm_sp$(LIBSUFFIX).a \ + libmath_sp$(LIBSUFFIX).a \ + libscfg_sp$(LIBSUFFIX).a \ + libtp_sp$(LIBSUFFIX).a \ + libmic_sp$(LIBSUFFIX).a \ + libfs_sp$(LIBSUFFIX).a \ + libcard_sp$(LIBSUFFIX).a \ + libi2c_sp$(LIBSUFFIX).a \ + libcamera_sp$(LIBSUFFIX).a \ + libcdc_sp$(LIBSUFFIX).a \ + libsndex_sp$(LIBSUFFIX).a \ + libtpex_sp$(LIBSUFFIX).a \ + libmicex_sp$(LIBSUFFIX).a \ + libmcu_sp$(LIBSUFFIX).a \ + + Library libsdio_sp$(LIBSUFFIX).a + + Library libnvram_sp$(LIBSUFFIX).a + Library librtc_sp$(LIBSUFFIX).a + + + Object * (.etable) + Object * (.wram) + Object * (.ltdwram) + Object $(OBJDIR)/main.o + + # caches in fatfs library, that should be on WRAM. + # 2007/12/11 OBJECT() による .bss シンボルのリンクがうまくいかないので、 + # 変数定義箇所に pragma で .ltdwram セクションに含まれるように暫定対策しました。 +# Object OBJECT( FATFSi___mem_drives_structures , libfatfs_sp$(LIBSUFFIX).a) (.bss) + + ##### + # Sub-routines in WL library , that should be on WRAM. + # in TaskMan.o + Object OBJECT( MainTaskRoutine , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( AddTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DeleteTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( LowestIdleTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ExecuteMessage , libwl_sp$(LIBSUFFIX).a ) (.text) + # in BufMan.o + Object OBJECT( NewHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DeleteHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( AllocateHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ReleaseHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( MoveHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( AddHeapBuf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( GetHeapBufNextAdrs , libwl_sp$(LIBSUFFIX).a ) (.text) + # in WlCmdIf.o + Object OBJECT( RequestCmdTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( SendMessageToWmDirect , libwl_sp$(LIBSUFFIX).a ) (.text) + # in WlNic.o + Object OBJECT( WStart , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WStop , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WSetStaState , libwl_sp$(LIBSUFFIX).a ) (.text) + # in WlIntr.o + Object OBJECT( WlIntr , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrPreTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrTbtt , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrActEnd , libwl_sp$(LIBSUFFIX).a ) (.text) +# Object OBJECT( WlIntrAckCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrCntOvf , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrTxErr , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrRxCntup , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrRxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrMpEnd , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrStartTx , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrStartRx , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( SetParentTbttTxq , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( MacBugTxMp , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( AdjustRingPointer , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( CheckKeyTxEnd , libwl_sp$(LIBSUFFIX).a ) (.text) + # in WlIntrTask.o + Object OBJECT( WlIntrTxBeaconTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrTxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrRxEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WlIntrMpEndTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( SetParentTbttTxqTask , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( TakeoutRxFrame , libwl_sp$(LIBSUFFIX).a ) (.text) + # in TxCtrl.o + Object OBJECT( InitTxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) + # in RxCtrl.o + Object OBJECT( InitRxCtrl , libwl_sp$(LIBSUFFIX).a ) (.text) + # in WaitLoop.o + Object OBJECT( WaitLoop_Rxpe , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WaitLoop_Waitus , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WaitLoop_ClrAid , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WaitLoop_BbpAccess , libwl_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( WaitLoop_RfAccess , libwl_sp$(LIBSUFFIX).a ) (.text) + + ##### + # Sub-routines in TWL WIRELESS Driver , that should be on WRAM. + Object OBJECT( HTCSendPktCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCIssueSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCTrySend, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCSendPkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCProcessCreditRpt, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DevRecvPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCProcessRecvHeader, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCRecvCompleteHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCRecvMessagePendingHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCAddReceivePkt, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( AR6KFreeIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( AR6KAllocIOPacket, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DevRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DevGetEventAsyncHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DevCheckPendingRecvMsgsAsync, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DevDsrHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HIFReadWrite, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( hifRWCompletionHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( hifIRQHandler, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HIFAckInterrupt, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ar6000_credit_distribute, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_alloc, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_alloc_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_put, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_push, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_pull, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_free, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_to_data, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_to_len, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( a_netbuf_headroom, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( nin_drv_return_netbuf, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ath_queue_remove_from_head, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ath_queue_insert_tail, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ar6000_alloc_cookie, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( nin_driver_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( nin_tx_complete, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( wmi_dix_2_dot3, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( wmi_data_hdr_add, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( wmi_data_hdr_remove, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( nin_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ar6000_ibss_map_epid, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DL_ListInsertTail, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( DL_ListRemove, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( wmi_control_rx, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( wmi_cmd_send, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( ar6000_control_tx, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( wmi_implicit_create_pstream, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCAllocControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( HTCFreeControlBuffer, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( BMILZData, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( bmiBufferSend, libathdrv_sp$(LIBSUFFIX).a ) (.text) + Object OBJECT( BMIWriteMemory, libathdrv_sp$(LIBSUFFIX).a ) (.text) + + Object OBJECT( wpa_sm_rx_eapol , libwpa_sp$(LIBSUFFIX).a ) (.text) + + +} + +#-------- +Ltdautoload RSVWRAM +{ + Address 0x03040000 + Object * (.rsvwram) + Library libathdrv_sp$(LIBSUFFIX).a (.bss) + Library libathdrv_sp$(LIBSUFFIX).a (.data) + + # FATFS core symbols + Object OBJECT(FATFSi_lfi2text, libfatfs_sp$(LIBSUFFIX).a) (.text) # 360 BYTEs + Object OBJECT(FATFSi_pc_findin, libfatfs_sp$(LIBSUFFIX).a) (.text) # 904 BYTEs + Object OBJECT(FATFSi_pc_patcmp_vfat, libfatfs_sp$(LIBSUFFIX).a) (.text) # 436 BYTEs + Object OBJECT(FATFSi_pc_ascii_mfile, libfatfs_sp$(LIBSUFFIX).a) (.text) # 160 BYTEs + Object OBJECT(FATFSi_map_ascii_to_unicode, libfatfs_sp$(LIBSUFFIX).a) (.text) # 48 BYTEs + Object OBJECT(SDCARD_Intr_Thread, libfatfs_sp$(LIBSUFFIX).a) (.text) # 520 BYTEs + Object OBJECT(FATFSi_unicode_cmp_to_ascii_char, libfatfs_sp$(LIBSUFFIX).a) (.text) # 40 BYTEs + Object OBJECT(FATFSi_pc_read_blk, libfatfs_sp$(LIBSUFFIX).a) (.text) # 352 BYTEs +} + +#-------- +Ltdautoload LTDMAIN +{ + Address 0x02f88000 + + Object * (.ltdmain) + Library libwm_sp$(LIBSUFFIX).a \ + libnwm_sp$(LIBSUFFIX).a \ + libwvr_sp$(LIBSUFFIX).a \ + libwl_sp$(LIBSUFFIX).a + + Library libwpa_sp$(LIBSUFFIX).a + Library libathdrv_sp$(LIBSUFFIX).a + + Library libfatfs_sp$(LIBSUFFIX).a \ + libaes_sp$(LIBSUFFIX).a + Library $(ISDBG_LIBS_TWL) + Library $(ISDBG_LIBS_NITRO) +} diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template new file mode 100644 index 00000000..88b18081 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7_racoon/racoon.response.template @@ -0,0 +1,40 @@ + + + + + -l + + + + + + + -l + + + + -og ,0 -ol + + + + + -l + + + + + + + + -l + + + + -og ,0 -ol + + + + + -l + + diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c b/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c new file mode 100644 index 00000000..611fb1b1 --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7_racoon/src/initScfg.c @@ -0,0 +1,108 @@ +/*---------------------------------------------------------------------------* + 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:$ + *---------------------------------------------------------------------------*/ + +#include +#include + +extern void INIT_InitializeScfg(void); + +#include +/*---------------------------------------------------------------------------* + Name: INIT_InitializeScfg + + Description: ローダーが行う SCFG ブロックへの設定処理を代行する為の関数。 + crt0 内の弱シンボルを上書きする。 + + Arguments: None. + + Returns: None. + *---------------------------------------------------------------------------*/ +asm void +INIT_InitializeScfg(void) +{ + // SCFG enable? + ldr r2, =REG_EXT_ADDR + ldr r0, [r2] + tst r0, #REG_SCFG_EXT_CFG_MASK + beq @end + + /* NITRO 互換無線の送受信機能を動作 */ + ldr r1, =REG_WL_ADDR + ldrh r0, [r1] + orr r0, r0, #REG_SCFG_WL_OFFB_MASK + strh r0, [r1] + + /* 新規サウンドブロックへのクロック供給 */ + ldr r1, =REG_CLK_ADDR + ldrh r0, [r1] + orr r0, r0, #REG_SCFG_CLK_SNDMCLK_MASK + strh r0, [r1] + + /* ARM7 側の DMA には新 DMA 回路を採用 */ + ldr r1, =REG_EXT_ADDR + ldr r0, [r1] + orr r0, r0, #REG_SCFG_EXT_DMAC_MASK + str r0, [r1] + + ldr r2, =HW_PRV_WRAM_SYSRV + //EXT(extentions) + ldr r3, =REG_EXT_ADDR + ldr r0, [r3] + str r0, [r2, #HWi_WSYS04_WRAMOFFSET] + //OPT(bonding option) + ldr r3, =REG_OP_ADDR + ldrb r0, [r3] + //A9ROM(ARM9 ROM) + ldr r3, =REG_A9ROM_ADDR + ldrb r1, [r3] + and r12,r1, #(REG_SCFG_A9ROM_RSEL_MASK | REG_SCFG_A9ROM_SEC_MASK) + orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM9RSEL_SHIFT - REG_SCFG_A9ROM_RSEL_SHIFT) + //A7ROM(ARM7 ROM) + ldr r3, =REG_A7ROM_ADDR + ldrb r1, [r3] + and r12,r1, #(REG_SCFG_A7ROM_RSEL_MASK | REG_SCFG_A7ROM_FUSE_MASK) + orr r0, r0, r12, LSL #(HWi_WSYS08_ROM_ARM7RSEL_SHIFT - REG_SCFG_A7ROM_RSEL_SHIFT) + //DS-WL(DS wireless) + ldr r3, =REG_WL_ADDR + ldrb r1, [r3] + and r12,r1, #REG_SCFG_WL_OFFB_MASK + orr r0, r0, r12, LSL #(HWi_WSYS08_WL_OFFB_SHIFT - REG_SCFG_WL_OFFB_SHIFT) + strb r0, [r2, #HWi_WSYS08_WRAMOFFSET] + //OPT(JTAG info) + ldr r3, =REG_JTAG_ADDR + ldrh r0, [r3] + and r12,r0, #REG_SCFG_JTAG_DSPJE_MASK + orr r0, r0, r12, LSR #(REG_SCFG_JTAG_DSPJE_SHIFT - HWi_WSYS09_JTAG_DSPJE_SHIFT) + //CLK(only wram clock) + ldr r3, =REG_CLK_ADDR + ldrh r1, [r3] + and r12,r1, #(REG_SCFG_CLK_AESHCLK_MASK | REG_SCFG_CLK_SD2HCLK_MASK | REG_SCFG_CLK_SD1HCLK_MASK) + orr r0, r0, r12, LSL #(HWi_WSYS09_CLK_SD1HCLK_SHIFT - REG_SCFG_CLK_SD1HCLK_SHIFT) + and r12,r1, #(REG_SCFG_CLK_SNDMCLK_MASK | REG_SCFG_CLK_WRAMHCLK_MASK) + orr r0, r0, r12, LSR #(REG_SCFG_CLK_WRAMHCLK_SHIFT - HWi_WSYS09_CLK_WRAMHCLK_SHIFT) + strb r0, [r2, #HWi_WSYS09_WRAMOFFSET] + + /* A7-SCFG ブロックへのアクセスを無効化 */ +// ldr r1, =REG_EXT_ADDR +// ldr r0, [r1] +// bic r0, r0, #REG_SCFG_EXT_CFG_MASK +// str r0, [r1] + +@end: + bx lr +} +#include diff --git a/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c b/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c new file mode 100644 index 00000000..ccfd1a6d --- /dev/null +++ b/build/tests/DisplaySystemInformation/ARM7_racoon/src/main.c @@ -0,0 +1,992 @@ +/*---------------------------------------------------------------------------* + 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "nvram_sp.h" +#include "address.h" + +#ifdef SDK_SEA +#include +#endif // ifdef SDK_SEA + +/*---------------------------------------------------------------------------* + 定数定義 + *---------------------------------------------------------------------------*/ +#define WM_WL_HEAP_SIZE 0x2100 +#define ATH_DRV_HEAP_SIZE 0x5800 +#define WPA_HEAP_SIZE 0x1C00 + +#define MEM_TYPE_WRAM 0 +#define MEM_TYPE_MAIN 1 + +/* Priorities of each threads */ +#define THREAD_PRIO_SPI 2 +#define THREAD_PRIO_MCU 4 // 暫定 +#define THREAD_PRIO_SND 6 +#define THREAD_PRIO_FATFS 8 +#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 */ + +/* [TODO] 以下は New WM 側に移行するほうが好ましい? */ +#define NWM_DMANO NWMSP_DMA_7 +#define THREAD_PRIO_NWM_COMMMAND 9 +#define THREAD_PRIO_NWM_EVENT 7 +#define THREAD_PRIO_NWM_SDIO 8 +#define THREAD_PRIO_NWM_WPA 10 + +// ROM 内登録エリアの拡張言語コード +#define ROMHEADER_FOR_CHINA_BIT 0x80 +#define ROMHEADER_FOR_KOREA_BIT 0x40 + +/*---------------------------------------------------------------------------* + 内部関数定義 + *---------------------------------------------------------------------------*/ +static void PrintDebugInfo(void); +static OSHeapHandle InitializeAllocateSystem(u8 memType); +static OSHeapHandle InitializeAllocateSystemCore(u8 memType); +#ifdef SDK_TWLHYB +static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType); +#endif +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); +static void InitializeFatfs(void); +static void InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle); +/*---------------------------------------------------------------------------* + 外部シンボル参照 + *---------------------------------------------------------------------------*/ +#ifdef SDK_TWLHYB +extern void SDK_LTDAUTOLOAD_LTDWRAM_BSS_END(void); +extern void SDK_LTDAUTOLOAD_LTDMAIN_BSS_END(void); +#endif + + +/*---------------------------------------------------------------------------* + Name: TwlSpMain + Description: 起動ベクタ。 + Arguments: None. + Returns: None. + *---------------------------------------------------------------------------*/ +void TwlSpMain(void) +{ + OSHeapHandle wramHeapHandle, mainHeapHandle; + + + // 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(); + + // ヒープ領域設定 + wramHeapHandle = InitializeAllocateSystem(MEM_TYPE_WRAM); + mainHeapHandle = InitializeAllocateSystem(MEM_TYPE_MAIN); + + // ボタン入力サーチ初期化 + (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(); + + // ファイルシステム初期化 + FS_Init(FS_DMA_NOT_USE); + FS_CreateReadServerThread(THREAD_PRIO_FS); + + if (OS_IsRunOnTwl() == TRUE) + { + InitializeFatfs(); // FATFS 初期化 +#ifndef SDK_SEA // !暫定処置! + // NWM 初期化 +#ifdef SDK_TWLLTD + InitializeNwm(mainHeapHandle, mainHeapHandle); // LIMITED モードでは 無線のヒープを MAIN から確保 +#else + InitializeNwm(wramHeapHandle, mainHeapHandle); // HYBRID モードでは 無線のヒープを WRAM から確保 +#endif +#endif // ifndef SDK_SEA + AES_Init(THREAD_PRIO_AES); // AES 初期化 + +#ifdef SDK_SEA + SEA_Init(THREAD_PRIO_SEA); +#endif // ifdef SDK_SEA + MCU_InitIrq(THREAD_PRIO_MCU); // MCU 初期化 + + CDC_InitLib(); // CODECライブラリ初期化 + } + + if (OSi_IsCodecTwlMode() == TRUE) + { + // カメラ初期化 + CAMERA_Init(); + /* CODEC が TWL モードでないとシャッター音を強制的に鳴らす + 機能が使用できません。この為、CODEC が TWL モードの場合 + にのみカメラライブラリを使用可能な状態にします。 */ + } + + // サウンド初期化 + SND_Init(THREAD_PRIO_SND); + if (OS_IsRunOnTwl() == TRUE) + { + SNDEX_Init(THREAD_PRIO_SNDEX); + } + + // RTC 初期化 + RTC_Init(THREAD_PRIO_RTC); + + // 旧無線初期化 +#ifndef SDK_SEA // !暫定処置! + WVR_Begin(wramHeapHandle); +#endif // ifdef SDK_SEA + + // SPI 初期化 + SPI_Init(THREAD_PRIO_SPI); + + + while (TRUE) + { + OS_Halt(); + + //---- check reset + if (OS_IsResetOccurred()) + { + //VIB_STOP + CTRDG_VibPulseEdgeUpdate(NULL); + + OS_ResetSystem(); + } + + //---- check pull out cartridge + CTRDG_CheckPullOut_Polling(); + +#ifndef SDK_SMALL_BUILD + //---- check pull out card + CARD_CheckPullOut_Polling(); +#endif + } +} + +/*---------------------------------------------------------------------------* + Name: PrintDebugInfo + Description: ARM7 コンポーネントの情報をデバッグ出力する。 + Arguments: None. + Returns: None. + *---------------------------------------------------------------------------*/ +static void +PrintDebugInfo(void) +{ + if(OS_IsRunOnTwl()) + { + OS_TPrintf("ARM7: This component is running on TWL.\n"); + } + else + { + OS_TPrintf("ARM7: This component is running on NITRO.\n"); + } +#ifdef SDK_SEA +#ifdef SDK_TWLLTD + OS_TPrintf("ARM7: This component is \"armadillo.TWL\"\n"); +#else /* ifdef SDK_TWLLTD */ +#error invalid parameter combination +#endif /* ifdef SDK_TWLLTD else */ +#else /* ifdef SDK_SEA */ +#ifdef SDK_TWLLTD + OS_TPrintf("ARM7: This component is \"racoon.TWL\"\n"); +#else /* ifdef SDK_TWLLTD */ +#ifdef SDK_WIRELESS_IN_VRAM + OS_TPrintf("ARM7: This component is \"ichneumon.TWL\"\n"); +#else /* ifdef SDK_WIRELESS_IN_VRAM */ + OS_TPrintf("ARM7: This component is \"mongoose.TWL\"\n"); +#endif /* ifdef SDK_WIRELESS_IN_VRAM else */ +#endif /* ifdef SDK_TWLLTD else */ +#endif /* ifdef SDK_SEA else */ +} + +#include +/*---------------------------------------------------------------------------* + 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ライブラリの初期化 + if(!FATFS_Init( FATFS_DMA_4, FATFS_DMA_5, THREAD_PRIO_FATFS)) + { + // do nothing + } + + // ダミースレッド破棄 + OS_KillThread(&thread, NULL); +} +#include + +#include +/*---------------------------------------------------------------------------* + Name: InitializeNwm + Description: NWMライブラリを初期化する。 + Arguments: None. + Returns: None. + *---------------------------------------------------------------------------*/ +static void +InitializeNwm(OSHeapHandle drvHeapHandle, OSHeapHandle wpaHeapHandle) +{ + NwmspInit nwmInit; + + nwmInit.dmaNo = NWM_DMANO; + nwmInit.cmdPrio = THREAD_PRIO_NWM_COMMMAND; + nwmInit.evtPrio = THREAD_PRIO_NWM_EVENT; + nwmInit.sdioPrio = THREAD_PRIO_NWM_SDIO; + +#ifdef SDK_TWLLTD + nwmInit.drvHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ +#else + nwmInit.drvHeap.id = OS_ARENA_WRAM_SUBPRIV; /* [TODO] */ +#endif + nwmInit.drvHeap.handle = drvHeapHandle; + + nwmInit.wpaPrio = THREAD_PRIO_NWM_WPA; + nwmInit.wpaHeap.id = OS_ARENA_MAIN_SUBPRIV; /* [TODO] */ + nwmInit.wpaHeap.handle = wpaHeapHandle; + + NWMSP_Init(&nwmInit); + +} +#include + +#include +/*---------------------------------------------------------------------------* + Name: DummyThread + Description: FATFSライブラリ、CDCライブラリを初期化する際に立てるダミーの + スレッド。 + Arguments: arg - 使用しない。 + Returns: None. + *---------------------------------------------------------------------------*/ +static void +DummyThread(void* arg) +{ +#pragma unused(arg) + while (TRUE) + { + } +} +#include + +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystem + Description: メモリ割当てシステムを初期化する。 + Arguments: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + *---------------------------------------------------------------------------*/ +static OSHeapHandle InitializeAllocateSystem(u8 memType) +{ + + OSHeapHandle hh; + +#ifdef SDK_TWLHYB + if( OS_IsRunOnTwl() == TRUE) + { + hh = InitializeAllocateSystemCoreEx(memType); /* Hybrid を TWL で動作させる */ + } + else +#endif + { + hh = InitializeAllocateSystemCore(memType); /* Hybrid を DS で動作させる or Limited */ + } + + return hh; +} + +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystemCore + Description: メモリ割当てシステムを初期化する。 + Hybrid を DS で動作させた場合、Limited を TWL で動作させた場合に動作 + Arguments: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + *---------------------------------------------------------------------------*/ +static OSHeapHandle InitializeAllocateSystemCore(u8 memType) +{ + OSHeapHandle hh; + + /* MAIN */ + if(memType == MEM_TYPE_MAIN) + { + { + void* lo = (void*)OS_GetSubPrivArenaLo(); + void* hi = (void*)OS_GetSubPrivArenaHi(); + + // アリーナを 0 クリア + MI_CpuClear8(lo, (u32)hi - (u32)lo); + + // メモリ割り当て初期化 + lo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, lo, hi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, lo); + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, lo, hi); + + if (hh < 0) + { + OS_Panic("ARM7: Failed to MAIN create heap.\n"); + } + } + // カレントヒープに設定 + (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic("ARM7: Failed to MAIN create heap.\n"); + } + + #ifdef SDK_TWLLTD + { + if ((ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE) > heapSize) + { + OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, ATH_DRV_HEAP_SIZE + WPA_HEAP_SIZE); + } + } + #endif + OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize); + } + } + + /* WRAM */ + if( memType == MEM_TYPE_WRAM) + { + { + void* lo = (void*)OS_GetWramSubPrivArenaLo(); + void* hi = (void*)OS_GetWramSubPrivArenaHi(); + + // アリーナを 0 クリア + MI_CpuClear8(lo, (u32)hi - (u32)lo); + + // メモリ割り当て初期化 + lo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, lo, hi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, lo); + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, lo, hi); + + if (hh < 0) + { + OS_Panic("ARM7: Failed to WRAM 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 MAIN create heap.\n"); + } + + if (WM_WL_HEAP_SIZE > heapSize) + { + OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE); + } + OS_TPrintf("ARM7: WRAM heap size is %d\n", heapSize); + } + } + return hh; +} + +#ifdef SDK_TWLHYB +#include +/*---------------------------------------------------------------------------* + Name: InitializeAllocateSystemCoreEx + Description: メモリ割当てシステムを初期化する。 + Hybrid を TWL で動作させた場合に動作 + Arguments: None. + Returns: OSHeapHandle - WRAM アリーナ上に確保されたヒープのハンドルを返す。 + *---------------------------------------------------------------------------*/ +static OSHeapHandle InitializeAllocateSystemCoreEx(u8 memType) +{ + OSHeapHandle hh; + + if(memType == MEM_TYPE_MAIN) + { + { + void* basicLo = (void*)OS_GetSubPrivArenaLo(); + void* basicHi = (void*)OS_GetSubPrivArenaHi(); + void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDMAIN_BSS_END, 32); + void* extraHi = (void*)MATH_ROUNDDOWN(HW_MAIN_MEM_SUB, 32); + +#if SDK_DEBUG + // debug information + OS_TPrintf("ARM7: MAIN arena basicLo = %p\n", basicLo); + OS_TPrintf("ARM7: MAIN arena basicHi = %p\n", basicHi); + OS_TPrintf("ARM7: MAIN arena extraLo = %p\n", extraLo); + OS_TPrintf("ARM7: MAIN arena extraHi = %p\n", extraHi); +#endif + // アリーナを 0 クリア + MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); + MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); + + // メモリ割り当て初期化 + if ((u32)basicLo < (u32)extraLo) + { + basicLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, basicLo, extraHi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_MAIN_SUBPRIV, basicLo); + } + else + { + extraLo = OS_InitAlloc(OS_ARENA_MAIN_SUBPRIV, extraLo, basicHi, 1); + } + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_MAIN_SUBPRIV, basicLo, basicHi); + + if (hh < 0) + { + OS_Panic("ARM7: Failed to create MAIN heap.\n"); + } + + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic("ARM7: Failed to MAIN create heap.\n"); + } + + OS_TPrintf("ARM7: MAIN heap size is %d (before AddToHead)\n", heapSize); + } + + // ヒープに拡張ブロックを追加 + OS_AddToHeap(OS_ARENA_MAIN_SUBPRIV, hh, extraLo, extraHi); + } + // カレントヒープに設定 + (void)OS_SetCurrentHeap(OS_ARENA_MAIN_SUBPRIV, hh); + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_MAIN_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic("ARM7: Failed to MAIN create heap.\n"); + } + + if ((WPA_HEAP_SIZE) > heapSize) + { + OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WPA_HEAP_SIZE); + } + OS_TPrintf("ARM7: MAIN heap size is %d\n", heapSize); + } + } + + if(memType == MEM_TYPE_WRAM) + { + { + void* basicLo = (void*)OS_GetWramSubPrivArenaLo(); + void* basicHi = (void*)OS_GetWramSubPrivArenaHi(); + void* extraLo = (void*)MATH_ROUNDUP((u32)SDK_LTDAUTOLOAD_LTDWRAM_BSS_END, 32); + void* extraHi = (void*)MATH_ROUNDDOWN(HW_WRAM_A_HYB_END, 32); + +#if SDK_DEBUG + // debug information + OS_TPrintf("ARM7: WRAM arena basicLo = %p\n", basicLo); + OS_TPrintf("ARM7: WRAM arena basicHi = %p\n", basicHi); + OS_TPrintf("ARM7: WRAM arena extraLo = %p\n", extraLo); + OS_TPrintf("ARM7: WRAM arena extraHi = %p\n", extraHi); +#endif + + // アリーナを 0 クリア + MI_CpuClear8(basicLo, (u32)basicHi - (u32)basicLo); + MI_CpuClear8(extraLo, (u32)extraHi - (u32)extraLo); + + // メモリ割り当て初期化 + if ((u32)basicLo < (u32)extraLo) + { + basicLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, basicLo, extraHi, 1); + // アリーナ下位アドレスを設定 + OS_SetArenaLo(OS_ARENA_WRAM_SUBPRIV, basicLo); + } + else + { + extraLo = OS_InitAlloc(OS_ARENA_WRAM_SUBPRIV, extraLo, basicHi, 1); + } + + // ヒープ作成 + hh = OS_CreateHeap(OS_ARENA_WRAM_SUBPRIV, basicLo, basicHi); + + if (hh < 0) + { + OS_Panic("ARM7: Failed to WRAM create heap.\n"); + } + + // ヒープサイズの確認 + { + u32 heapSize; + + heapSize = (u32)OS_CheckHeap(OS_ARENA_WRAM_SUBPRIV, hh); + + if( heapSize <= 0) /* ヒープ領域の確保に失敗 */ + { + OS_Panic("ARM7: Failed to WRAM create heap.\n"); + } + + if (WM_WL_HEAP_SIZE > heapSize) + { + OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE); + } + OS_TPrintf("ARM7: WRAM heap size is %d (before AddToHeap)\n", heapSize); + } + + // ヒープに拡張ブロックを追加 + OS_AddToHeap(OS_ARENA_WRAM_SUBPRIV, hh, extraLo, extraHi); + } + + // カレントヒープに設定 + (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 WRAM create heap.\n"); + } + + if (ATH_DRV_HEAP_SIZE + WM_WL_HEAP_SIZE > heapSize) + { + OS_Panic("Insufficient heap size. (0x%x < 0x%x)\n", heapSize, WM_WL_HEAP_SIZE + ATH_DRV_HEAP_SIZE ); + } + OS_TPrintf("ARM7: WRAM heap size is %d\n", heapSize); + } + } + + return hh; +} +#include +#endif + +#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; +void PM_SelfBlinkProc(void); + +static void +VBlankIntr(void) +{ + if (PMi_Initialized) + { + PM_SelfBlinkProc(); + } +} diff --git a/build/tests/DisplaySystemInformation/ARM9/Makefile b/build/tests/DisplaySystemInformation/ARM9/Makefile index 467a921e..aec2d1bb 100644 --- a/build/tests/DisplaySystemInformation/ARM9/Makefile +++ b/build/tests/DisplaySystemInformation/ARM9/Makefile @@ -11,8 +11,8 @@ # in whole or in part, without the prior written consent of Nintendo. # # $Date:: $ -# $Rev:$ -# $Author:$ +# $Rev$ +# $Author$ # *---------------------------------------------------------------------------*/ TARGET_FIRM = SYSTEMMENU TARGET_PLATFORM = TWL @@ -56,15 +56,24 @@ SDK_APPEND_LIBS = \ LLIBRARIES += $(SYSMENU_LIBS) $(SDK_APPEND_LIBS) +DEFAULT_COMP_ARM7 = armadillo + TARGET_BIN = main.srl -ROM_SPEC = main.rsf +ROM_SPEC = main_$(DEFAULT_COMP_ARM7).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) + +DEFAULT_MAKEROM_ARM7_BASE = ../ARM7_$(DEFAULT_COMP_ARM7)/bin/$(TWL_BUILDTYPE_ARM7)/$(DEFAULT_COMP_ARM7) +DEFAULT_MAKEROM_ARM7 = $(DEFAULT_MAKEROM_ARM7_BASE).$(TWL_ELF_EXT) + +MACRO_FLAGS += -DCOMP_ARMADILLO=TRUE + +ifeq ($(DEFAULTCOMP_ARM7), armadillo) +MACRO_FLAGS += -DCOMP_ARMADILLO +endif + #---------------------------------------------------------------------------- diff --git a/build/tests/DisplaySystemInformation/ARM9/src/control.c b/build/tests/DisplaySystemInformation/ARM9/src/control.c index f3923412..d2f2da0e 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/control.c +++ b/build/tests/DisplaySystemInformation/ARM9/src/control.c @@ -20,16 +20,113 @@ #include "drawFunc.h" #include "control.h" #include "strResource.h" +#include "viewSystemInfo.h" static int selectLine[ROOTMENU_SIZE+1]; +ChangeCotnrolResult changeControl( int *menu, int *line, int *changeLine, int *changeMode ) +{ + int linemax = gAllInfo[*menu][*line].numKindName; + BOOL controlFlag = FALSE; -BOOL control( int *menu, int *line ) + if( !gAllInfo[*menu][*line].changable ) + { + *changeMode = FALSE; + return CHANGE_CONTROL; + } + + // 上下で項目変更 + if( pad.trg & PAD_KEY_UP ) + { + controlFlag = TRUE; + + if( --(*changeLine) < 0 ) + { + // ラインをデクリメントした結果マイナスになったら一番最後へ + *changeLine = linemax - 1; + } + } + else if( pad.trg & PAD_KEY_DOWN ) + { + controlFlag = TRUE; + + if( ++(*changeLine) >= linemax ) + { + // ラインをインクリメントした結果、maxlineを超えたら最初へ + *changeLine = 0; + } + } + + if( pad.trg & PAD_BUTTON_A ) + { + switch( gAllInfo[*menu][*line].argType ) + { + case ARG_INT: + gAllInfo[*menu][*line].changeFunc.cInt(*changeLine); + break; + + case ARG_BOOL: + gAllInfo[*menu][*line].changeFunc.cBool(*changeLine); + break; + + case ARG_OTHER: + // 論理値でもintでも渡せない関数は残念な対応をする + if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_RST_DSP ) + { + *changeLine == 0 ? SCFG_ReleaseResetDSP(): SCFG_ResetDSP(); + } + else if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_EXT_PS ) + { + SCFGPsramBoundary idx = SCFG_PSRAM_BOUNDARY_4MB; + + switch(*changeLine) + { + case 0: + idx = SCFG_PSRAM_BOUNDARY_4MB; + break; + case 1: + idx = SCFG_PSRAM_BOUNDARY_16MB; + break; + case 2: + idx = SCFG_PSRAM_BOUNDARY_32MB; + break; + } + + SCFG_SetPsramBoundary( idx ); + + } + + else if( *menu == MENU_SCFG_ARM7 && *line == SCFG_ARM9_EXT_CFG ) + { + if( *changeLine == 0 ) + { + SCFG_SetConfigBlockInaccessible(); + } + } + + break; + } + + return CHANGE_VALUE_CHANGED; + } + + // Bでキャンセルして戻る + if( pad.trg & PAD_BUTTON_B ) + { + controlFlag = TRUE; + *changeMode = FALSE; + } + + return controlFlag ? CHANGE_CONTROL : CHANGE_NOTHING ; +} + + +BOOL control( int *menu, int *line, int *changeLine, int *changeMode ) { int linemax = s_numMenu[*menu]; // 選択中ページの項目数 BOOL controlFlag = FALSE; // 何か操作があったらTRUEになる - // 上下で項目変更 + // 上下で項目変更 if( pad.trg & PAD_KEY_UP ) { controlFlag = TRUE; @@ -73,13 +170,12 @@ BOOL control( int *menu, int *line ) } } - if( pad.trg & PAD_BUTTON_A ) { - controlFlag = TRUE; - if(*menu == MENU_ROOT) { + controlFlag = TRUE; + // 今の画面の選択位置を記録 selectLine[ROOTMENU_SIZE] = *line; @@ -87,9 +183,13 @@ BOOL control( int *menu, int *line ) *menu = *line; *line = selectLine[*menu]; } - else + else if( gAllInfo[*menu][*line].changable ) { - // !!! 設定可能な項目だったら設定変更画面 + controlFlag = TRUE; + + // 変更可能な項目は変更画面を開く + *changeMode = TRUE; + *changeLine = gAllInfo[*menu][*line].iValue; } } @@ -98,15 +198,22 @@ BOOL control( int *menu, int *line ) { if( *menu != MENU_ROOT ) { - // !!! とりあえず今はルートに戻る - // 値設定画面の時はキャンセルするだけにする controlFlag = TRUE; - + + // 設定値表示画面のときはルートに戻る selectLine[*menu] = *line; *menu = MENU_ROOT; *line = selectLine[ROOTMENU_SIZE]; } } + + if( ( pad.trg & PAD_BUTTON_SELECT ) && *menu == MENU_SCFG_ARM7 ) + { + controlFlag = TRUE; + + // ARM7SCFGの表示データを切り替える + switchViewMode(); + } return controlFlag; } diff --git a/build/tests/DisplaySystemInformation/ARM9/src/control.h b/build/tests/DisplaySystemInformation/ARM9/src/control.h index 411d4263..ac5496ab 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/control.h +++ b/build/tests/DisplaySystemInformation/ARM9/src/control.h @@ -24,8 +24,14 @@ extern "C" { #endif +typedef enum ChangeCotnrolResult{ + CHANGE_NOTHING, + CHANGE_CONTROL, + CHANGE_VALUE_CHANGED +} ChangeCotnrolResult; -BOOL control( int *menu, int *line ); +ChangeCotnrolResult changeControl( int *menu, int *line, int *changeLine, int *changeMode ); +BOOL control( int *menu, int *line, int *changeLine, int *changeMode ); int getMaxPage( int menu ); int getMaxLine( int menu , int page ); diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c index 5afdeec5..5b8b5f89 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c +++ b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.c @@ -1,7 +1,6 @@ /*---------------------------------------------------------------------------* Project: TwlIPL - tests - DisplaySystemInformation File: drawFunc.c - Copyright **** Nintendo. All rights reserved. These coded instructions, statements, and computer programs contain @@ -11,8 +10,8 @@ in whole or in part, without the prior written consent of Nintendo. $Date:: $ - $Rev$ - $Author$ + $Rev:$ + $Author:$ *---------------------------------------------------------------------------*/ @@ -32,7 +31,7 @@ #define HEADER_UP 0 #define HEADER_LEFT 10 #define PAGE_LEFT 160 -#define FOOTER_UP 140 +#define FOOTER_UP 110 #define FOOTER_LEFT 10 #define ALLOW_LEFT 0 @@ -49,6 +48,21 @@ #define REGISTER_DATA_LEFT 50 #define REGISTER_DATA_UP 15 +#define FOOTER_REGIST 0 +#define FOOTER_CONTROL1 1 +#define FOOTER_CONTROL2 2 +#define FOOTER_MENU 3 +#define FOOTER_LINES 4 + +#define CHANGE_ITEMNAME_UP 20 +#define CHANGE_ITEMNAME_LEFT 20 +#define CHANGE_VALUE_LEFT 80 +#define CHANGE_VALUE_UP 80 +#define CHANGE_ALLOW_LEFT (CHANGE_VALUE_LEFT - 15) +#define CHANGE_NOW_SETTING_UP 150 + + + #define SCROLL_MARGIN 2 // 画面端何行でスクロールするか #define UNIQUE_BUF 12 @@ -59,26 +73,22 @@ static int gDrawIdx[ROOTMENU_SIZE]; // 今何項目目から下を描画しているのか static int gMenuLineSize[ROOTMENU_SIZE] = {};// 各メニューの全体行数 static const int gRegisterIdx[2][SCFG_ARM7_MENU_SIZE]; -int gMenuKindOffset[ROOTMENU_SIZE][MAXITEM]; +static BOOL gSelectedARM7SCFGReg = TRUE; // ARM7SCFGでレジスタサイドの描画ならtrue,共有領域ならfalse /* function prototypes -------------------- */ +void calibrateDrawIdx( int menu, int idx ); 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, int selected, int selectSize ); void printBinary32( int x, int y, u32 value, int selected, int selectSize ); 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 drawChangeMode( DispInfoEntry *Entry, int changeLine ); void printUniqueID( int drawLineOffset, char *uniqueId ); int getPageNum( int valueIdx, const int* pageOffset ); int countMenuLine( int menu ); +int countLinesDown( int menu, int idx ); void drawHeader( int menu, int line) // 画面端に簡単な情報を表示する @@ -86,23 +96,29 @@ 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 ); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_MENU * 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 ); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_LINES * LINE_OFFSET, TXT_COLOR_BLUE, buf ); } else { - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L"Root" ); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_MENU * 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 + FOOTER_LINES * LINE_OFFSET, TXT_COLOR_BLUE, buf ); } - PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP, TXT_COLOR_BLUE, (const u16 *)L" A: Decide B: Back "); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_CONTROL1 * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L" A: Decide B: Back "); + + if( menu == MENU_SCFG_ARM7 ) + { + PrintfSJISSub( FOOTER_LEFT, FOOTER_UP + FOOTER_REGIST * LINE_OFFSET, TXT_COLOR_RED, s_strSCFGViewMode[ gSelectedARM7SCFGReg ] ); + PutStringUTF16Sub( FOOTER_LEFT, FOOTER_UP + FOOTER_CONTROL2 * LINE_OFFSET, TXT_COLOR_BLUE, (const u16 *)L" Select: Switch Viewing Area" ); + } } void printData( int x, int y, int color, DispInfoEntry *entry ) @@ -215,57 +231,6 @@ void drawRegister( int menu, int selected ) regJtag = MI_LoadLE16( &gArm7SCFGReg[DISP_REG_JTAG_OFFSET - 0x4000] ); regExt = MI_LoadLE32( &gArm7SCFGReg[DISP_REG_EXT_OFFSET - 0x4000] ); - /* - 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 - ); - */ - if( selected == SCFG_ARM7_EXT_PS ) { selectRegSize = 2; @@ -320,7 +285,7 @@ void drawRegister( int menu, int selected ) } else if( menu == MENU_SCFG_ARM9 ) { - // ARM9側のSCFGレジスタ + // ARM9側のSCFGレジスタセット u16 regRom = MI_LoadLE16( (void*) (HW_IOREG + REG_A9ROM_OFFSET) ); u16 regClk = MI_LoadLE16( (void*) (HW_IOREG + REG_CLK_OFFSET) ); u16 regRst = MI_LoadLE16( (void*) (HW_IOREG + REG_RST_OFFSET) ); @@ -328,7 +293,7 @@ void drawRegister( int menu, int selected ) u16 regMc = MI_LoadLE16( (void*) (HW_IOREG + REG_MC_OFFSET ) ); selectBitNum = gRegisterIdx[1][selected]; - if( selected == SCFG_ARM9_PSRAM_BOUNDARY ) + if( selected == SCFG_ARM9_EXT_PS) { selectRegSize = 2; } @@ -423,12 +388,55 @@ void printBinary16( int x, int y, u16 value, int selected, int selectSize ) PutStringUTF16Sub( x, y, TXT_COLOR_RED, buf ); } -void drawMenu( int menu, int line ) +void drawChangeMode( DispInfoEntry *entry, int changeLine ) +// 値変更画面の描画 +{ + int i; + + // 項目名 + PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_ITEMNAME_UP, TXT_COLOR_RED, entry->kind ); + + if( entry->kindNameList != NULL ) + { + // BOOL値で変更設定する項目の場合は値一覧を選択肢として表示 + PrintfSJIS( CHANGE_ITEMNAME_LEFT, CHANGE_NOW_SETTING_UP, TXT_COLOR_BLACK, "Now Setting: %s", entry->kindNameList[entry->iValue] ); + + for( i = 0; i < entry->numKindName; i++ ) + { + int kindColor = TXT_COLOR_BLACK; + + if( i == changeLine ) + { + kindColor = TXT_COLOR_GREEN; + PutStringUTF16( CHANGE_ALLOW_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, TXT_COLOR_BLACK, (const u16 *)L"→" ); + } + + PrintfSJIS( CHANGE_VALUE_LEFT, CHANGE_VALUE_UP + i*LINE_OFFSET, kindColor, entry->kindNameList[i] ); + } + + return; + } + +} + + +void drawMenu( int menu, int line, int changeLine, BOOL isChangeMode ) // 情報一覧を描画する { int lineNum = 0; int i=0; + drawHeader( menu, line ); + drawRegister( menu, line ); + + if( isChangeMode ) + { + // 変更モード画面の描画 + drawChangeMode( &gAllInfo[menu][line], changeLine ); + return; + } + + if( menu == MENU_ROOT ) { // ルートメニューは値がないので項目名だけ描画して終わり @@ -440,28 +448,33 @@ void drawMenu( int menu, int line ) return; } + // 描画位置の調整 if( line - gDrawIdx[menu] < SCROLL_MARGIN ) { gDrawIdx[menu] = line - SCROLL_MARGIN >= 0 ? line - SCROLL_MARGIN : 0; } - else if( gDrawIdx[menu] + DISP_NUM_LINES - line - 1 <= SCROLL_MARGIN ) + else if( countLinesDown(menu, line) < SCROLL_MARGIN ) { - // 矢印が下に近すぎる場合のスクロール補正 - gDrawIdx[menu] = line + SCROLL_MARGIN < s_numMenu[menu] ? - line + SCROLL_MARGIN - DISP_NUM_LINES + 1 : s_numMenu[menu] - DISP_NUM_LINES ; + + calibrateDrawIdx( menu, line ); } - 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] ); + + if( menu == MENU_SCFG_ARM7 && !gSelectedARM7SCFGReg ) + { + printValue( menu, i, lineNum, &gAllInfo[menu][i + SCFG_ARM7_SHARED_OFFSET] ); + } + else + { + printValue( menu, i, lineNum, &gAllInfo[menu][i] ); + } // 描画オフセットの更新 lineNum += gAllInfo[menu][i].numLines; } - - drawRegister( menu, line ); // 全体の行数を把握 if( gMenuLineSize[menu] == 0 ) @@ -469,44 +482,74 @@ void drawMenu( int menu, int line ) gMenuLineSize[menu] = countMenuLine(menu); } - // スクロールバーとか出す + // スクロールバーとか出す? + } - - -/* - for( linenum = 0; linenum < nowPageMaxLine; linenum++ ) +int countLinesDown( int menu, int idx ) +// 選択項目より下側に何項目表示されているかカウント +{ + int i; + int lines = 0; + + for( i = gDrawIdx[menu]; lines < DISP_NUM_LINES && i < s_numMenu[menu] ; i++ ) { - 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; - } -*/ + lines += gAllInfo[menu][i].numLines; + } + + return (i-1) - idx; +} +void calibrateDrawIdx( int menu, int idx ) +// 折り返し項目とかがあると描画位置がずれるので +// 下側に常に2項目表示されるように補正を行う +{ + int i; + int lines = 0; + + // まずは自分と下2項目の行数を探索 + for( i = 0; i <= 2 && i + idx < s_numMenu[menu] ; i++ ) + { + lines += gAllInfo[menu][i + idx].numLines; + } + + // 自分より上方向へ探索 + for( i = 1; 0 <= idx - i && lines < DISP_NUM_LINES ; i++) + { + lines += gAllInfo[menu][idx - i].numLines; + } + + // ループが一回余計に回る + i--; + + if( lines < DISP_NUM_LINES ) + { + // idx - iがゼロより小さくなった場合 + gDrawIdx[menu] = 0; + } + else if( lines == DISP_NUM_LINES ) + { + // 表示行数ちょうどはそのまま + gDrawIdx[menu] = idx - i; + } + else if( lines == DISP_NUM_LINES + 1 && gAllInfo[menu][ idx - i ].numLines != 1) + { + // 1行溢れてて、かつ一番上の項目が複数行描画だった場合はそのまま + gDrawIdx[menu] = idx - i; + } + else + { + // それ以外の場合は一番上の行を外す + gDrawIdx[menu] = idx - i + 1; + } + +} +void switchViewMode( void ) +// ARM7SCFGのレジスタデータと共有領域データの表示内容を切り替える +{ + gSelectedARM7SCFGReg = !gSelectedARM7SCFGReg; +} /* void drawKindName( int menu, int page, int line ) diff --git a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h index 034c7740..e51c2040 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h +++ b/build/tests/DisplaySystemInformation/ARM9/src/drawFunc.h @@ -11,8 +11,8 @@ in whole or in part, without the prior written consent of Nintendo. $Date:: $ - $Rev$ - $Author$ + $Rev:$ + $Author:$ *---------------------------------------------------------------------------*/ #ifndef __DRAW_FUNC__ @@ -86,28 +86,28 @@ extern "C" { #define SCFG_ARM9_ROM_SEC 0 #define SCFG_ARM9_ROM_STATE 1 -#define SCFG_ARM9_CPU_SPEED 2 -#define SCFG_ARM9_DSP_CLOCK 3 -#define SCFG_ARM9_CAMERA_CLOCK 4 -#define SCFG_ARM9_WRAM_CLOCK 5 -#define SCFG_ARM9_CAMERA_CKI 6 -#define SCFG_ARM9_DSP_RESET 7 -#define SCFG_ARM9_FIX_DMA 8 -#define SCFG_ARM9_FIX_GEOMETRY 9 -#define SCFG_ARM9_FIX_RENDERER 10 -#define SCFG_ARM9_FIX_2DENGINE 11 -#define SCFG_ARM9_FIX_DIVIDER 12 -#define SCFG_ARM9_FIX_CARD 13 -#define SCFG_ARM9_VRAM_EXPANSION 14 -#define SCFG_ARM9_LCDC_EXPANSION 15 -#define SCFG_ARM9_INTC_EXPANSION 16 -#define SCFG_ARM9_PSRAM_BOUNDARY 17 -#define SCFG_ARM9_NDMA_ACCESSIBLE 18 -#define SCFG_ARM9_CAMERA_ACCESSIBLE 19 -#define SCFG_ARM9_DSP_ACCESSIBLE 20 -#define SCFG_ARM9_WRAM_ACCESSIBLE 21 -#define SCFG_ARM9_MCB 22 -#define SCFG_ARM9_CFG_ACCESSIBLE 23 +#define SCFG_ARM9_CLK_CPU 2 +#define SCFG_ARM9_CLK_DSP 3 +#define SCFG_ARM9_CLK_CAM 4 +#define SCFG_ARM9_CLK_WRAM 5 +#define SCFG_ARM9_CLK_CAM_CKI 6 +#define SCFG_ARM9_RST_DSP 7 +#define SCFG_ARM9_EXT_DMA 8 +#define SCFG_ARM9_EXT_GEO 9 +#define SCFG_ARM9_EXT_REN 10 +#define SCFG_ARM9_EXT_2DE 11 +#define SCFG_ARM9_EXT_DIV 12 +#define SCFG_ARM9_EXT_MC 13 +#define SCFG_ARM9_EXT_INTC 14 +#define SCFG_ARM9_EXT_LCDC 15 +#define SCFG_ARM9_EXT_VRAM 16 +#define SCFG_ARM9_EXT_PS 17 +#define SCFG_ARM9_EXT_DMAC 18 +#define SCFG_ARM9_EXT_CAM 19 +#define SCFG_ARM9_EXT_DSP 20 +#define SCFG_ARM9_EXT_MCB 21 +#define SCFG_ARM9_EXT_WRAM 22 +#define SCFG_ARM9_EXT_CFG 23 #define SCFG_ARM7_ROM_ARM9_SEC 0 @@ -158,7 +158,7 @@ extern "C" { #define SCFG_ARM7_OP_FORM 45 #define SCFG_ARM7_OP_APP 46 -#define SCFG_ARM7_WRAM_OFFSET 47 +#define SCFG_ARM7_SHARED_OFFSET 47 #define VERSION_WIRELESS 0 #define VERSION_FONT 1 @@ -178,7 +178,8 @@ extern int gMenuKindOffset[ROOTMENU_SIZE][MAXITEM]; /* function prototypes ----------------- */ void drawHeader( int menu, int line ); -void drawMenu( int menu, int line ); +void drawMenu( int menu, int line, int changeLine, BOOL isChangeMode ); +void switchViewMode( void ); #ifdef __cplusplus } diff --git a/build/tests/DisplaySystemInformation/ARM9/src/main.c b/build/tests/DisplaySystemInformation/ARM9/src/main.c index e755bcfc..8170e4af 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/main.c +++ b/build/tests/DisplaySystemInformation/ARM9/src/main.c @@ -65,15 +65,13 @@ void TwlMain( void ) // 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 ); + MI_CpuMove16( DISPINFO_SHARED_SCFG_WRAM_ADDR, gArm7SCFGShared, 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 ); @@ -85,8 +83,11 @@ void TwlMain( void ) OS_TPrintf("Allocator Initialize...\n"); InitAllocator(); +#ifdef COMP_ARMADILLO OS_TPrintf("NAM Initialize...\n"); NAM_Init( Alloc, Free ); +#endif + InitBG(); OS_TPrintf("Initialize Finished\n"); diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.c b/build/tests/DisplaySystemInformation/ARM9/src/strResource.c index 1f3041f0..8a1e484d 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/strResource.c +++ b/build/tests/DisplaySystemInformation/ARM9/src/strResource.c @@ -11,8 +11,8 @@ in whole or in part, without the prior written consent of Nintendo. $Date:: $ - $Rev$ - $Author$ + $Rev:$ + $Author:$ *---------------------------------------------------------------------------*/ #include "drawFunc.h" @@ -60,6 +60,11 @@ const char *s_strARM9RegisterName[] = { "EXP", }; +const char *s_strSCFGViewMode[] = { + "", + "" +}; + const char *s_strRootMenu[] = { "Owner", "Parental control", @@ -240,6 +245,11 @@ char *s_strAccess[] = { "Accessible" }; +char *s_strJoint[] = { + "Jointed", + "DisJointed" +}; + char *s_strSupply[] = { "STOPPED", "SUPPLIED" diff --git a/build/tests/DisplaySystemInformation/ARM9/src/strResource.h b/build/tests/DisplaySystemInformation/ARM9/src/strResource.h index 372e4123..8d3d54e9 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/strResource.h +++ b/build/tests/DisplaySystemInformation/ARM9/src/strResource.h @@ -11,8 +11,8 @@ in whole or in part, without the prior written consent of Nintendo. $Date:: $ - $Rev$ - $Author$ + $Rev:$ + $Author:$ *---------------------------------------------------------------------------*/ #ifndef __DISPLAY_INFO_RESOURCE__ @@ -34,7 +34,9 @@ extern const char *s_strVersionMenu[]; extern const char **s_strMetaMenu[]; extern const char *s_strARM7RegisterName[]; extern const char *s_strARM9RegisterName[]; +extern const char *s_strSCFGViewMode[]; extern char *s_strEnable[]; +extern char *s_strJoint[]; extern char *s_strSupply[]; extern char *s_strRomMode[]; extern char *s_strPSRAM[]; diff --git a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c index 8e6f492f..d78a18f4 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c +++ b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.c @@ -11,8 +11,8 @@ in whole or in part, without the prior written consent of Nintendo. $Date:: $ - $Rev$ - $Author$ + $Rev:$ + $Author:$ *---------------------------------------------------------------------------*/ #include @@ -49,9 +49,6 @@ 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; // コンテンツタイトルの一覧 @@ -60,20 +57,7 @@ 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]; // シリアル番号 -*/ +u8 gArm7SCFGShared[DISPINFO_SHARED_SCFG_WRAM_SIZE]; /* static data ---------------------------------- */ @@ -83,9 +67,13 @@ static u8 gSerialNo[OS_TWL_HWINFO_SERIALNO_LEN_MAX]; // void displayInfoMain( void ) { static int menu = MENU_ROOT; - static int line = 0; // 現在選択しているページナンバと行 - + static int line = 0; // 現在選択しているページナンバと行 + static int changeLine = 0; // changeMode用 static BOOL firstCall = TRUE; // 最初の呼び出しか否か + static BOOL isChangeMode = FALSE; + + BOOL repaintFlag = FALSE; + ChangeCotnrolResult ccResult = CHANGE_NOTHING; // 初回の呼び出し時は全ての情報を取得しなおす if( firstCall ) @@ -94,31 +82,43 @@ void displayInfoMain( void ) getAllInfo(); } + if( isChangeMode ) + { + ccResult = changeControl( &menu, &line, &changeLine, &isChangeMode ); + } + else + { + repaintFlag = control( &menu, &line, &changeLine, &isChangeMode ); + } + + if( ccResult == CHANGE_VALUE_CHANGED ) + { + // 値が更新されたときは全部取得しなおす + getAllInfo(); + } + // パッド情報で選んでる場所とか情報とか更新 - if( control( &menu, &line ) || firstCall ) + if( ccResult == CHANGE_VALUE_CHANGED || ccResult == CHANGE_CONTROL || repaintFlag || firstCall ) { // 何か操作があったときはキャンバスクリアして描画しなおし NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); NNS_G2dCharCanvasClear( &gCanvasSub, TXT_COLOR_WHITE ); + // 情報一覧を描画する + drawMenu( menu, line, changeLine, isChangeMode); + 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 ); @@ -131,11 +131,12 @@ void initInfo( void ) 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 ) +// initInfoの作業用関数。isSjis=trueだとcharを、falseならu16を割り当てる { if( isSjis ) { @@ -168,8 +169,10 @@ void getAllInfo( void ) getSCFGARM7InfoReg(); getSCFGARM7InfoShared(); getSCFGARM9Info(); + +#ifdef COMP_ARMADILLO getVersions(); - +#endif /* if( fuseRomAccessable ) @@ -181,6 +184,73 @@ void getAllInfo( void ) OS_TPrintf("reflesh information finished\n"); } + +void displayInfoInit( void ) +{ + int loop1, loop2; + + GX_DispOff(); + GXS_DispOff(); + NNS_G2dCharCanvasClear( &gCanvas, TXT_COLOR_WHITE ); + + // 全体情報を持つ配列をセット + // 可能なものは用意したstatic文字列へのポインタで対応 + // 必要なものだけあとでmallocする + for(loop1=0; loop1isNumData ) + { + 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); + } + + } + } +} + void getOwnerInfo( void ) // オーナー情報周りを取得する { @@ -338,9 +408,11 @@ void getSCFGARM9Info( void ) int value; // ROM制御レジスタ - value = SCFG_IsSecureRomAccessible(); + + // IsSecureRomAccessibleの返り値はレジスタビットが反転 + value = ! SCFG_IsSecureRomAccessible(); gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_SEC].str.sjis = s_strJoint[ value ]; value = SCFG_GetSystemRomType(); gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_ROM_STATE].iValue = value; @@ -348,56 +420,101 @@ void getSCFGARM9Info( void ) // クロック制御レジスタ value = SCFG_IsCameraCKIClockEnable(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_CKI].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_CKI].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].changeFunc.cBool = SCFG_SetCameraCKIClock; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM_CKI].numKindName = 2; value = SCFG_IsClockSuppliedToWram(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_WRAM_CLOCK].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_WRAM_CLOCK].str.sjis = s_strSupply[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_WRAM].str.sjis = s_strSupply[ value ]; value = SCFG_IsClockSuppliedToCamera(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_CLOCK].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_CLOCK].str.sjis = s_strSupply[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].str.sjis = s_strSupply[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].changeFunc.cBool = SCFG_SupplyClockToCamera; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].kindNameList = s_strSupply; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CAM].numKindName = 2; value = SCFG_IsClockSuppliedToDSP(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_CLOCK].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_CLOCK].str.sjis = s_strSupply[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].str.sjis = s_strSupply[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].changeFunc.cBool = SCFG_SupplyClockToDSP; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].kindNameList = s_strSupply; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_DSP].numKindName = 2; + value = SCFG_GetCpuSpeed(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CPU_SPEED].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CPU_SPEED].str.sjis = (value == SCFG_CPU_SPEED_1X) ? s_strCpuSpeed[0] : s_strCpuSpeed[1]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].str.sjis = s_strCpuSpeed[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changeFunc.cBool = SCFG_SetCpuSpeed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].kindNameList = s_strCpuSpeed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].numKindName = 2; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CLK_CPU].changable = TRUE; // 新規ブロック制御レジスタ value = SCFG_IsDSPReset(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_RESET].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_RESET].str.sjis = s_strBool[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].str.sjis = s_strBool[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].argType = ARG_OTHER; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].kindNameList = s_strBool; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_RST_DSP].numKindName = 2; // 拡張機能制御レジスタ value = SCFG_IsConfigBlockAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CFG_ACCESSIBLE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CFG_ACCESSIBLE].str.sjis = s_strAccess[ value ]; - 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_EXT_CFG].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].argType = ARG_OTHER; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].kindNameList = s_strAccess; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].numKindName = 2; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CFG].numLines = 2; value = (reg_SCFG_EXT & REG_SCFG_EXT_MC_B_MASK) || 0; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_MCB].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MCB].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MCB].str.sjis = s_strAccess[ value ]; value = SCFG_IsWramAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_WRAM_ACCESSIBLE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_WRAM_ACCESSIBLE].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_WRAM].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_WRAM].str.sjis = s_strAccess[ value ]; value = SCFG_IsDSPAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_ACCESSIBLE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_DSP_ACCESSIBLE].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].changeFunc.cBool = SCFG_SetDSPAccessible; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].kindNameList = s_strAccess; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DSP].numKindName = 2; value = SCFG_IsCameraAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_ACCESSIBLE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_CAMERA_ACCESSIBLE].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].changeFunc.cBool = SCFG_SetCameraAccessible; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].kindNameList = s_strAccess; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_CAM].numKindName = 2; value = SCFG_IsNDmaAccessible(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_NDMA_ACCESSIBLE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_NDMA_ACCESSIBLE].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].str.sjis = s_strAccess[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].changeFunc.cBool = SCFG_SetNDmaAccessible; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].kindNameList = s_strAccess; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMAC].numKindName = 2; { u8 idx; @@ -416,46 +533,95 @@ void getSCFGARM9Info( void ) idx = 2; } - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_PSRAM_BOUNDARY].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_PSRAM_BOUNDARY].str.sjis = s_strPSRAM[ idx ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].iValue = idx; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].str.sjis = s_strPSRAM[ idx ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].argType = ARG_OTHER; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].kindNameList = s_strPSRAM; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_PS].numKindName = 3; } value = SCFG_IsIntcExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_INTC_EXPANSION].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_INTC_EXPANSION].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].changeFunc.cBool = SCFG_SetIntcExpanded; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_INTC].numKindName = 2; value = SCFG_IsLCDCExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_LCDC_EXPANSION].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_LCDC_EXPANSION].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].changeFunc.cBool = SCFG_SetLCDCExpanded; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_LCDC].numKindName = 2; value = SCFG_IsVramExpanded(); - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_VRAM_EXPANSION].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_VRAM_EXPANSION].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].changeFunc.cBool = SCFG_SetVramExpanded; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_VRAM].numKindName = 2; value = SCFG_IsCardFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_CARD].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_CARD].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].changeFunc.cBool = SCFG_SetCardFixed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_MC].numKindName = 2; value = SCFG_IsDividerFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_DIVIDER].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_DIVIDER].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].changeFunc.cBool = SCFG_SetDividerFixed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DIV].numKindName = 2; value = SCFG_Is2DEngineFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_2DENGINE].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_2DENGINE].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].changeFunc.cBool = SCFG_Set2DEngineFixed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_2DE].numKindName = 2; value = SCFG_IsRendererFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_RENDERER].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_RENDERER].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].changeFunc.cBool = SCFG_SetRendererFixed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_REN].numKindName = 2; value = SCFG_IsGeometryFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_GEOMETRY].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_GEOMETRY].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].changeFunc.cBool = SCFG_SetGeometryFixed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_GEO].numKindName = 2; value = SCFG_IsDmacFixed() ; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_FIX_DMA].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].iValue = value; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].changable = TRUE; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].changeFunc.cBool = SCFG_SetDmacFixed; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].argType = ARG_BOOL; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].kindNameList = s_strEnable; + gAllInfo[MENU_SCFG_ARM9][SCFG_ARM9_EXT_DMA].numKindName = 2; } @@ -471,29 +637,29 @@ void getSCFGARM7InfoReg( void ) // SECフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可) value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_SEC_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].str.sjis = value ? s_strAccess[0]: s_strAccess[1]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_SEC].str.sjis = s_strAccess[ !value ]; value = ( gArm7SCFGReg[DISP_REG_A9ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A9ROM_RSEL_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].str.sjis = value ? s_strRomMode[1]: s_strRomMode[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM9_RSEL].str.sjis = s_strRomMode[ value ]; // SECフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可) value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_SEC_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].str.sjis = value ? s_strAccess[0]: s_strAccess[1]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_SEC].str.sjis = s_strAccess[ !value ]; value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_RSEL_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].str.sjis = value ? s_strRomMode[1]: s_strRomMode[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_RSEL].str.sjis = s_strRomMode[ value ]; // FuseROMフラグはTRUE = 切り離し(アクセス不可), FALSE = 接続(アクセス可) value = ( gArm7SCFGReg[DISP_REG_A7ROM_OFFSET - 0x4000] & DISP_REG_SCFG_A7ROM_FUSE_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].str.sjis = value ? s_strAccess[0]: s_strAccess[1]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_ARM7_FUSE].str.sjis = s_strAccess[ !value ]; value = ( gArm7SCFGReg[DISP_REG_ROMWE_OFFSET - 0x4000] & DISP_REG_SCFG_ROMWE_WE_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_ROM_WE].str.sjis = s_strEnable[ value ]; } // 新規ブロッククロック制御レジスタ @@ -502,23 +668,23 @@ void getSCFGARM7InfoReg( void ) value = ( flag & DISP_REG_SCFG_CLK_SD1HCLK_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].str.sjis = value ? s_strSupply[1]: s_strSupply[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD1].str.sjis = s_strSupply[ value ]; value = ( flag & DISP_REG_SCFG_CLK_SD2HCLK_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].str.sjis = value ? s_strSupply[1]: s_strSupply[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SD2].str.sjis = s_strSupply[ value ]; value = ( flag & DISP_REG_SCFG_CLK_AESHCLK_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].str.sjis = value ? s_strSupply[1]: s_strSupply[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_AES].str.sjis = s_strSupply[ value ]; value = ( flag & DISP_REG_SCFG_CLK_WRAMHCLK_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].str.sjis = value ? s_strSupply[1]: s_strSupply[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_WRAM].str.sjis = s_strSupply[ value ]; value = ( flag & DISP_REG_SCFG_CLK_SNDMCLK_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].str.sjis = value ? s_strSupply[1]: s_strSupply[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_CLK_SND].str.sjis = s_strSupply[ value ]; } // JTAG制御レジスタ @@ -527,17 +693,17 @@ void getSCFGARM7InfoReg( void ) value = ( flag & DISP_REG_SCFG_JTAG_ARM7SEL_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].str.sjis = s_strEnable[ value ]; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].isAligned = FALSE; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_A7].numLines = 2; value = ( flag & DISP_REG_SCFG_JTAG_CPUJE_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_CPU].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_JTAG_DSPJE_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_JTAG_DSP].str.sjis = s_strEnable[ value ]; } // 拡張機能制御レジスタ @@ -546,49 +712,49 @@ void getSCFGARM7InfoReg( void ) value = ( flag & DISP_REG_SCFG_EXT_DMA_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMA].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_SDMA_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SDMA].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_SND_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SND].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_MC_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].str.sjis = s_strEnable[ value ]; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].isAligned = FALSE; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MC].numLines = 2; value = ( flag & DISP_REG_SCFG_EXT_INTC_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].str.sjis = s_strEnable[ value ]; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].isAligned = FALSE; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_INTC].numLines = 2; value = ( flag & DISP_REG_SCFG_EXT_SPI_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SPI].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_DSEL_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].str.sjis = s_strEnable[ value ]; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].isAligned = FALSE; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DSEL].numLines = 2; value = ( flag & DISP_REG_SCFG_EXT_SIO_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SIO].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_LCDC_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_LCDC].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_VRAM_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_VRAM].str.sjis = s_strEnable[ value ]; { u8 idx = 0; @@ -614,51 +780,51 @@ void getSCFGARM7InfoReg( void ) value = ( flag & DISP_REG_SCFG_EXT_DMAC_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_DMAC].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_AES_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_AES].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_SD1_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD1].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_SD2_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_SD2].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_MIC_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MIC].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_I2S_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2S].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_I2C_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_I2C].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_GPIO_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_GPIO].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_MC_B_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_MCB].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_WRAM_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_WRAM].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_PUENABLE_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_PU].str.sjis = s_strEnable[ value ]; value = ( flag & DISP_REG_SCFG_EXT_CFG_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_EXT_CFG].str.sjis = s_strEnable[ value ]; } @@ -668,15 +834,15 @@ void getSCFGARM7InfoReg( void ) value = ( flag & DISP_REG_MI_MC_SL1_CDET_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].str.sjis = value ? s_strBool[1]: s_strBool[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_CDET].str.sjis = s_strBool[ value ]; value = ( flag & DISP_REG_MI_MC_SL2_CDET_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].str.sjis = value ? s_strBool[1]: s_strBool[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC2_CDET].str.sjis = s_strBool[ value ]; value = ( flag & DISP_REG_MI_MC_SWP_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].str.sjis = value ? s_strBool[1]: s_strBool[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SWP].str.sjis = s_strBool[ value ]; value = (flag & DISP_REG_MI_MC_SL1_MODE_MASK) >> DISP_REG_MI_MC_SL1_MODE_SHIFT ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_MI_SC1_MODE].iValue = value; @@ -704,7 +870,7 @@ void getSCFGARM7InfoReg( void ) value = ( flag & DISP_REG_SCFG_WL_OFFB_MASK ) || 0 ; gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].iValue = value; - gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].str.sjis = value ? s_strEnable[1]: s_strEnable[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_WL_OFFB].str.sjis = s_strEnable[ value ]; } @@ -727,6 +893,197 @@ void getSCFGARM7InfoReg( void ) void getSCFGARM7InfoShared( void ) { // 共有領域に退避されたほうのSCFGデータを取得する + int value; + + // 拡張機能制御レジスタ (4byte) + { + u32 extData = MI_LoadLE32( &gArm7SCFGShared[HWi_WSYS04_OFFSET] ); + + value = (extData & DISP_REG_SCFG_EXT_DMA_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMA].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMA].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_SDMA_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SDMA].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SDMA].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_SND_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SND].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SND].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_MC_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MC].numLines = 2; + + value = (extData & DISP_REG_SCFG_EXT_INTC_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_INTC].numLines = 2; + + value = (extData & DISP_REG_SCFG_EXT_SPI_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SPI].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SPI].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_DSEL_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].str.sjis = s_strEnable[ value ]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DSEL].numLines = 2; + + value = (extData & DISP_REG_SCFG_EXT_LCDC_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_LCDC].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_LCDC].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_VRAM_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_VRAM].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_VRAM].str.sjis = s_strEnable[ value ]; + + { + u8 idx = 0; + value = (int) ( (extData & HWi_WSYS04_EXT_PSRAM_MASK ) >> HWi_WSYS04_EXT_PSRAM_SHIFT ); + + if( value <= 1 ) + { + idx = 0; + } + else if ( value == 2 ) + { + idx = 1; + } + else if ( value == 3 ) + { + idx = 2; + } + + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PS].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PS].str.sjis = s_strPSRAM[idx]; + } + + value = (extData & DISP_REG_SCFG_EXT_DMAC_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMAC].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_DMAC].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_AES_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_AES].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_AES].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_SD1_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD1].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD1].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_SD2_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD2].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_SD2].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_MIC_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MIC].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MIC].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_I2S_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2S].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2S].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_I2C_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2C].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_I2C].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_GPIO_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_GPIO].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_GPIO].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_MC_B_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MCB].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_MCB].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_WRAM_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_WRAM].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_WRAM].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_PUENABLE_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PU].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_PU].str.sjis = s_strEnable[ value ]; + + value = (extData & DISP_REG_SCFG_EXT_CFG_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_CFG].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_EXT_CFG].str.sjis = s_strEnable[ value ]; + } + + // ボンディング、rom状態、旧無線レジスタ ( 1byte ) + { + u8 regData = gArm7SCFGShared[HWi_WSYS08_OFFSET]; + + value = (regData & HWi_WSYS08_OP_OPT_MASK) >> HWi_WSYS08_OP_OPT_SHIFT ; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_FORM].iValue = (value & 0x2) || 0 ; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_FORM].str.sjis = value == 3 ? s_strRomForm[1] : s_strRomForm[0]; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_APP].iValue = (value & 0x1) || 0 ; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_OP_APP].str.sjis = s_strRomApp[ value ]; + + // rom制御 + value = ( regData & HWi_WSYS08_ROM_ARM9SEC_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_SEC ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_SEC ].str.sjis = s_strAccess[ !value ] ; + + value = ( regData & HWi_WSYS08_ROM_ARM9RSEL_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_RSEL ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM9_RSEL ].str.sjis = s_strRomMode[value] ; + + value = ( regData & HWi_WSYS08_ROM_ARM7RSEL_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_RSEL ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_RSEL ].str.sjis = s_strRomMode[value] ; + + value = ( regData & HWi_WSYS08_ROM_ARM7FUSE_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_FUSE ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_ROM_ARM7_FUSE ].str.sjis = s_strAccess[ !value ] ; + + // + value = ( regData & HWi_WSYS08_WL_OFFB_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_WL_OFFB ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_WL_OFFB ].str.sjis = s_strEnable[value] ; + + } + + // jtag、clkレジスタ ( 1byte ) + { + u8 regData = gArm7SCFGShared[HWi_WSYS09_OFFSET]; + + value = ( regData & HWi_WSYS09_JTAG_ARM7SEL_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].str.sjis = s_strEnable[value] ; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].isAligned = FALSE; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_A7 ].numLines = 2; + + value = ( regData & HWi_WSYS09_JTAG_CPUJE_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_CPU ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_CPU ].str.sjis = s_strEnable[value] ; + + value = ( regData & HWi_WSYS09_JTAG_DSPJE_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_DSP ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_JTAG_DSP ].str.sjis = s_strEnable[value] ; + + value = ( regData & HWi_WSYS09_CLK_SD1HCLK_MASK) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD1 ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD1 ].str.sjis = s_strSupply[value] ; + + value = ( regData & HWi_WSYS09_CLK_SD2HCLK_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD2 ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SD2 ].str.sjis = s_strSupply[value] ; + + value = ( regData & HWi_WSYS09_CLK_AESHCLK_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_AES ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_AES ].str.sjis = s_strSupply[value] ; + + value = ( regData & HWi_WSYS09_CLK_WRAMHCLK_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_WRAM ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_WRAM].str.sjis = s_strSupply[value] ; + + value = ( regData & HWi_WSYS09_CLK_SNDMCLK_MASK ) || 0; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SND ].iValue = value; + gAllInfo[MENU_SCFG_ARM7][SCFG_ARM7_SHARED_OFFSET + SCFG_ARM7_CLK_SND ].str.sjis = s_strSupply[value] ; + } + } @@ -762,6 +1119,7 @@ void getWirelessVersion( void ) void getSharedFontVersion( void ) { u32 time = OS_GetSharedFontTimestamp(); + OS_TPrintf("SharedFont Time Stamp %08lx\n", time ); gAllInfo[MENU_VERSION][VERSION_FONT].iValue = (int) time; gAllInfo[MENU_VERSION][VERSION_FONT].isNumData = TRUE; } @@ -793,90 +1151,4 @@ void getContentsVersion( void ) } -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."); - - // 全体情報を持つ配列をセット - // 全項目に文字列バッファを持たせるとメモリ書き込みが多くなるので - // 可能なものは用意したstatic文字列へのポインタで対応 - // 必要なものだけあとでmallocする - for(loop1=0; loop1isNumData ) - { - 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 index b3efea61..436af4ec 100644 --- a/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h +++ b/build/tests/DisplaySystemInformation/ARM9/src/viewSystemInfo.h @@ -11,8 +11,8 @@ in whole or in part, without the prior written consent of Nintendo. $Date:: $ - $Rev:$ - $Author:$ + $Rev$ + $Author$ *---------------------------------------------------------------------------*/ #ifndef __LOAD_VIEW_INFO__ @@ -28,6 +28,12 @@ extern "C" { //////////////////////////////// +typedef enum ChangeFuncArg{ + ARG_BOOL, + ARG_INT, + ARG_OTHER +} ChangeFuncArg; + typedef struct DispInfoEntry { BOOL isNumData; // 表示するときは数値データか文字列データか @@ -43,7 +49,21 @@ typedef struct DispInfoEntry } str; int iValue; // データの数値型表現(インデクスとか) + BOOL changable; // その値が変更可能か否か + + // ここから先はchangableがtrueのエントリのみ設定される + ChangeFuncArg argType; // 値を変更するための関数の引数型 + + // 値を変更するための関数 + union { + void (*cBool)(bool); + void (*cInt)(int); + } changeFunc; + + char **kindNameList; // 項目名一覧の先頭へのポインタ + int numKindName; // 項目名一覧の長さ + } DispInfoEntry; @@ -57,7 +77,7 @@ extern OSTitleId *gContentsTitle; extern u16 *gContentsVersion; extern u8 gArm7SCFGReg[DISPINFO_SHARED_SCFG_REG_SIZE]; // ARM7からのデータ取得用バッファ -extern u8 gArm7SCFGWram[DISPINFO_SHARED_SCFG_WRAM_SIZE]; // ARM7からのデータ取得用バッファ +extern u8 gArm7SCFGShared[DISPINFO_SHARED_SCFG_WRAM_SIZE]; // ARM7からのデータ取得用バッファ //////////////////////////////// diff --git a/build/tests/DisplaySystemInformation/Makefile b/build/tests/DisplaySystemInformation/Makefile index 5ae69c3e..6c2cd85e 100644 --- a/build/tests/DisplaySystemInformation/Makefile +++ b/build/tests/DisplaySystemInformation/Makefile @@ -20,7 +20,7 @@ include $(TWLSDK_ROOT)/build/buildtools/commondefs #---------------------------------------------------------------------------- -SUBDIRS = banner ARM7 ARM9 +SUBDIRS = banner ARM7_armadillo ARM7_racoon ARM9 #----------------------------------------------------------------------------